Norikra でクエリした結果を Mackerel に投げたい場合、これまでは fluent-plugin-norikra で取得して fluent-plugin-mackerel で送信する、という作りにしていたと思います。
Norikra 1.2以降では Listener plugin が使えるようになったので、クエリ結果を直接 Norikra 上で扱うことが可能になりました。
ということで、norikra-listener-mackerel (rubygems) を書きました。Norikra 単体で、クエリ結果を Mackerel のサービスメトリクスとして送信できます。
使い方
$ gem install norikra-listener-mackerel
norikra が動作する ruby でインストールすれば、norikra start 時に自動的に読み込まれます。
クエリを通常と同じように書き、group を MACKEREL(service_name,api_key)
として登録します。
- Mackerel のサービス名: nginx
- metricsのprefix: status
- API Key: bpzpdhjzmTnkp+ZkE3bFX2EcoWG+N1wqy2x5wVdAr7o=
の場合は以下のようになります。
MACKEREL(nginx.status,bpzpdhjzmTnkp+ZkE3bFX2EcoWG+N1wqy2x5wVdAr7o=)
API keyが未指定の場合は環境変数 MACKEREL_APIKEY
から読むようになっています。
たとえば「アクセスログからステータスコードを1分ごとにカウントして、秒間のリクエスト数として送信する」というよくあるユースケースだとこんな感じですね。
SELECT COUNT(1, 200 <= status AND status <= 299) / 60.0 AS rate_2xx, COUNT(1, 300 <= status AND status <= 399) / 60.0 AS rate_3xx, COUNT(1, 400 <= status AND status <= 499) / 60.0 AS rate_4xx, COUNT(1, 500 <= status AND status <= 599) / 60.0 AS rate_5xx FROM nginx_access.win:time_batch(1 min) -- group: MACKEREL(nginx.status,bpzpdhjzmTnkp+ZkE3bFX2EcoWG+N1wqy2x5wVdAr7o=)
これで Norikra に fluentd からログを流し込んでやれば、Mackerel に自動的にサービスメトリクスが定義されてグラフができあがります。(サービスの定義だけは事前にしておく必要がありますが)
Norikra から値を取得して送信する fluentd が不要になるので、よりお手軽になりますね。