Norikra の集計結果を直接 Zabbix に送る norikra-listener-zabbix をリリースしました
追記(2016/02/08 15:30):0.2.0 で group
の記述方式を変更しましたので、
norikra-listener-zabbix 0.2.0 をリリースしました をご確認ください。
Norikra から直接 Zabbix にデータを送る norikra-listener-zabbix (rubygems) をリリースしました。
Zabbix へデータを送信するコードのほとんどは、
fujiwara/fluent-plugin-zabbix を使わせていただきました。ありがとうございます。
Installation
gem install norikra-listener-zabbix
Norikra をインストールした gem で gem install すれば自動で有効になります。
Usage
Group を以下のように設定します。
ZABBIX(zabbix_server, zabbix_host, preifx_item_key, [port=10051])
- zabbix_server:
localhost
- zabbix_host:
test server
- prefix_item_key:
nginx
の場合は、以下のとおりです。
ZABBIX(localhost, test server, nginx)
prefix_item_key については、アイテムキーの prefix です。
port は Zabbix Server デフォルトの 10051 を使っている場合は省略できます。
利用例
秒間のリクエスト数を HTTP ステータスコードごとに集計する場合を考えます。
SQL
ステータスコードごとに COUNT
して秒間のデータにします。
SELECT COUNT(1, 200 <= status AND status <= 299) / 60 AS rate_2xx, COUNT(1, 300 <= status AND status <= 399) / 60 AS rate_3xx, COUNT(1, 400 <= status AND status <= 499) / 60 AS rate_4xx, COUNT(1, 500 <= status AND status <= 599) / 60 AS rate_5xx FROM nginx_status.win:time_batch(1 min)
Zabbix
アイテム
prefix_item_key とSQL の列名(rate_2xx
など) を .
で連結したアイテムを作成します。
prefix_item_key は nginx
、列名は rate_2xx
, rate_3xx
, rate_4xx
, rate_5xx
です。
作成するアイテムは以下のようになります。
- タイプ:
Zabbix トラッパー
- キー:
nginx.rate_2xx
,nginx.rate_3xx
,nginx.rate_4xx
,nginx.rate_5xx
- データ型:
数値 (浮動小数点)
1 つの SQL で複数のアイテムにデータを送信することができます。
グラフ
グラフは適宜作成してください。
2xx のデータしかないのであまり良くない例ですが、
それぞれのステータスコードのリクエストが送られてくれば集計されます。
その他
Zabbix 周りのコードはほとんど fujiwara/fluent-plugin-zabbix を使わせていただきましたが、
一部変更した部分があります。
また、実装する上でハマったところがあったのでそのことに触れておきます。
Zabbix 周りの改良点
Zabbix Server にデータを送信すると、
{ "response" => "success", "info" => "Processed 2 Failed 0 Total 2 Seconds spent 0.000103" }
のようなレスポンスが返って来ます。
このとき、info
の Failed が 1 以上だったり、Processed が 0 で全て Failed というケースでも response
は success になります。
Processed が 0 でなければ 1 つ以上データが送れていることになるので良いのですが、
全て Failed した場合は失敗にしたほうがわかり易いと思い、 warn
でログを出すようにしています
(実装している時、ログに何も出ないのにデータが送れていなくて理解するのに時間がかかりました)。
全て Failed になるケースは、以下の 2 つを確認しています。
- Zabbix ホスト名が間違っている
- アイテムキーが間違っている
split(",")
だけだと空白が含まれる
Norikra::Listener::Zabbix.initialize
の argument
を ,
で split するときに、
ZABBIX(zabbix_server, zabbix_host, preifx_item_key)
(わかりにくいですが ,
の後ろにスペースがあります)と書いて、
zabbix host とアイテムキーにスペースが含まれて正常に動作しない問題で1時間くらい嵌まりました...
そこで、スペースを気にしなくても良いように split したあとに strip しています。
def self.parse_argument(args) args.split(",").map(&:strip) end
Listener Plugin を書く方は、この処理をしておくと変なところで嵌らなくて良いのでおすすめです。
まとめ
Norikra Listener Plugin の norikra-listener-zabbix をリリースしました。
是非お使いください!