fluentd の出力プラグイン、fluent-plugin-zabbix をリリースしました。
- Github fujiwara/fluent-plugin-zabbix https://github.com/fujiwara/fluent-plugin-zabbix
- fluent-plugin-zabbix | RubyGems.org https://rubygems.org/gems/fluent-plugin-zabbix]
監視とメトリクス収集に Zabbix を使っているので、fluentd で収集した値を zabbix に送って扱いたかったのです。
挙動としては zabbix_sender でホスト側から送信するのと同様です。主に datacounter や flowcounter で集計した値を送るのを想定していますが、送信頻度に気をつければなんでも送れると思います。
作成にあたっては、id:tagomoris 先生の fluentdのためのプラグインをイチから書く手順(bundler版) - tagomorisのメモ置き場 を大変参考にさせていただきました。というか実装も fluent-plugin-growthforecast から結構コピペしていたりします。毎度お世話になっております。
使いかた
例として、httpd アクセスログを status code 別に数えた数値を Zabbix に保存する場合です。
Zabbix 側で収集したい項目のアイテムを Type: Zabbix trapper で定義します。
datacounter で status code 別に集計する設定。
<match nginx.access> type datacounter count_key message aggregate all tag stats.datacount.nginx.access pattern1 2xx " 2\d\d \d+ pattern2 3xx " 3\d\d \d+ pattern3 4xx " 4\d\d \d+ pattern4 5xx " 5\d\d \d+ </match>
以下のようなログが生成されます。
stats.datacount.nginx.access { "unmatched_count":0, "unmatched_rate":0.0, "unmatched_percentage":0.0, "2xx_count":7402, "2xx_rate":123.36, "2xx_percentage":99.86508364813815, "3xx_count":10, "3xx_rate":0.16, "3xx_percentage":0.13491635186184567, "4xx_count":0, "4xx_rate":0.0, "4xx_percentage":0.0, "5xx_count":0, "5xx_rate":0.0, "5xx_percentage":0.0 }
これを zabbix サーバに投げる設定は以下のようになります。
<match stats.**> type zabbix zabbix_server zabbix.example.com host web01 name_key_pattern [2345]xx_rate add_key_prefix nginx </match>
name_keys または name_key_pattern にマッチしたカラムの値が、add_key_prefix が付与されて zabbix_server に送信されます。host はアイテムが定義してあるホスト名です。
上記の例だと、以下のような key, value が送信されることになります。
key value ---------------------------- nginx.2xx_rate 123.36 nginx.3xx_rate 0.16 nginx.4xx_rate 0.0 nginx.5xx_rate 0.0
このデータをグラフにしてみると、ログ中のステータスコード別の割合が一目瞭然。急に 4xx, 5xx が増加した、などの条件でトリガを掛けてアラートを飛ばすこともできちゃいますね。
zabbix と fluentd を使っているかたはどうぞご利用ください!