Amberflo is the simplest way to integrate metering into your application. Sign up for free to get started.
This is the official Amberflo plugin for Kong. Use it to meter the requests handled by your Kong instance and monetize your APIs. Check out our docs to learn more.
go install github.com/amberflo/kong-plugin-amberflo@latest
This plugin will intercept the requests, detect which customer is making the request, generate a meter event and send it to Amberflo.
Customer detection happens via inspection of the request headers. You can configure Kong to inject the customer id as a header before this plugin runs. For instance, if you use Kong's Key Authentication plugin, this happens automatically.
To avoid impacting the performance of your gateway, the plugin will batch meter records and send them asynchronously to Amberflo.
-
Compile and make the binary available to your Kong instance.
- Make sure your compilation environment is compatible with your Kong environment, otherwise the compile binary won't work.
-
Update your Kong configuration with the now-available metering plugin.
-
Enable the plugin
- Either by adding it to your
kong.yaml
file or making an Admin API request.
- Either by adding it to your
Please find a sample configuration file here.
Here's a breakdown of the fields and their respective meanings.
Name | Type | Required? | Default | Description |
---|---|---|---|---|
apiKey | string | yes | Your Amberflo API key | |
meterApiName | string | yes | Meter for metering the requests | |
customerHeader | string | yes | Header from which to get the Amberflo customerId |
|
intervalSeconds | int | no | 1 |
Send the meter record batch every x seconds |
batchSize | int | no | 10 |
Send the meter record batch when it reaches this size |
debug | bool | no | false |
Enable debug mode of the Amberflo API client (for development) |
methodDimension | string | no | Dimension name for the request method | |
hostDimension | string | no | Dimension name for the target url host | |
routeDimension | string | no | Dimension name for the route name | |
serviceDimension | string | no | Dimension name for the service name | |
dimensionHeaders | map[string]string | no | Map of "dimension name" to "header name", for inclusion in the meter record | |
replacements | map[string]string | no | {"/": ":"} |
Map of "old" to "new" values for transforming dimension values |
- Build the plugin
make
- Start Kong. We're using
docker-compose
, based on their template:
make kong-up
- On the first time, setup a test service, route and user (see this tutorial)
make kong-init
- Restart the kong server whenever you rebuild the plugin
make update
- Use the helper scripts to interact with Kong:
./scripts/admin.sh GET /plugins
./scripts/test.sh GET /mock/requests -H 'x-api-key: super-secret-key' -i
- To update the plugin configuration:
./scripts/admin.sh PUT /plugins/<plugin-id> -d @metering.json
- To stop and clean-up docker resources
make kong-down