Fluent Bit では以下のようにHTTP_Serverを有効にすることで内部のメトリックをHTTP経由で /api/v1/metrics
というパスからJSON形式で取得できるようになります。*1
[SERVICE] HTTP_Server On HTTP_Listen 127.0.0.1 HTTP_PORT 2020
これで各プラグインで今までに処理したレコード数やバイト数が取得できるわけですが、実はこのJSONはmackerel-plugin-jsonでそのまま扱える形式になっています。
下はoutputのcloudwatch_logsプラグインに対してのメトリックを送信する例です。
$ mackerel-plugin-json -prefix='fluent-bit' -url='http://127.0.0.1:2020/api/v1/metrics' -diff='.?' -include='output.cloudwatch_logs' fluent-bit.output.cloudwatch_logs.1.retries 0.000000 1653008277 fluent-bit.output.cloudwatch_logs.1.retries_failed 0.000000 1653008277 fluent-bit.output.cloudwatch_logs.1.dropped_records 0.000000 1653008277 fluent-bit.output.cloudwatch_logs.1.retried_records 0.000000 1653008277 fluent-bit.output.cloudwatch_logs.1.proc_records 0.000000 1653008277 fluent-bit.output.cloudwatch_logs.1.proc_bytes 0.000000 1653008277 fluent-bit.output.cloudwatch_logs.1.errors 0.000000 1653008277
このようにdiffオプションを使ってFluent Bitで1分間に処理したログに関するメトリックをMackerelで確認することができるようになります。
ユースケースとしては、Fluent Bit経由でCloudWatch Logsにエラーログを送っているけどエラーの増加はMackerelで通知したいという時にわざわざCloudWatchから集計しなくても良くなるというのがあります。
ちなみにmackerel-container-agentのpluginsイメージにはmackerel-plugin-jsonが最初から同梱されているので、HTTP_Serverを有効にすればあとはすぐに取得できるようになります。