API Gateway - Kong
You can use Amberflo's API Metering plugin for Kong to meter the requests handled by your Kong instance and monetize your APIs. See the repository for more details.
How it Works

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.
Installation

-
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
Configuration

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 |
Updated 3 days ago