fluent-plugin-zabbix リリース

fluentd の出力プラグイン、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 を使っているかたはどうぞご利用ください!