ZabbixのヒストリデータをリアルタイムにSplunkへMetricsとしてインポートする方法
はじめに
監視ツールとして大変便利なZabbixですが、forecast関数しかなかったり
他のログとの突き合わせに困るときはないでしょうか。
そんなときには、SplunkにZabbixのヒストリデータを入れてしまいましょう。
ただ、単に入れてもおもしろくないので今回はSplunk 7.0から導入されている Metrics を使います。
(Metrics は通常のSplunkの イベントより高速に統計が取れるそうです)
前提
以下の三つが前提となっています
- Zabbix Serverが入っていること
v4.0以上でないとリアルタイムエクスポートが動きません。
https://www.zabbix.com/documentation/current/manual/installation/install_from_packages
- td-agentが入ってること
v3でないと、Splunk HECプラグインのインストールに失敗します。
https://docs.fluentd.org/v1.0/articles/install-by-rpm
- Splunkが入ってること
v7.0 以上でないと Metrics が作れません。
https://docs.splunk.com/Documentation/Splunk/7.2.6/Installation/InstallonLinux
なお、テスト環境は以下の通りです
- CentOS 7
- Splunk 7.2
- Zabbix 4.2
- td-agent v3
実作業
そんなわけで、作業をしていきます。
Zabbix Serverの設定
Zabbixの設定
/etc/zabbix/zabbix_server.conf をに以下を追記します。
ExportDir=/var/log/zabbix/
ExportFileSize=500M
追記した後restartするとExportDirの下にrealtime exportされます。
この時の注意としてはExportFileSizeは小さめにしておくのが良いと思います。
(※: ポーラー単位で1ファイル作成される仕様なので
ExportFileSize * ポーラー数 * 2 が最大容量になります
(*2 は指定ファイルサイズを超えるとリネームされるため)
参考:
4 Real-time export of events, values, trends [Zabbix Documentation 4.0]
Splunkの設定
Zabbixのヒストリ用インデックスを作ります
Splunkにログインしてメニューバーより「設定」→「インデックス」を開き、「新規インデックス」をクリックします。
インデックス名を入力し、「メトリック」を選択してインデックスを作成します。
これでインデックスができました。つぎにHEC(HTTP Event Collector)を作成します。
メニューバーより「設定」→「データ入力」を開き、HTTP イベントコレクタの「新規作成」をクリックします。
ざっくりと名前だけ入力します。
許可されたインデックスの所で、先ほど作成したインデックスを選択します。
これでSplunk側の設定は完了です。
Fluentdの設定
あらかじめ fluent-plugin-splunk-hec を入れます
# td-agent-gem install fluent-plugin-splunk-hec
設定は以下のようにします。
<source> @type tail format json time_key clock path {PATH_TO_ZABBIX}/history-*.ndjson pos_file /var/log/td-agent/tmp/zabbix-history.pos tag splunk.zabbix </source> <filter splunk.zabbix> @type record_transformer <record> metric_name ${record["host"]}.${record["name"]} </record> </filter> <match splunk.zabbix> @type splunk_hec hec_host SPLUNK_HOST hec_port 8088 hec_token SPLUNK_HEC_TOKEN insecure_ssl true index zabbix data_type metric host_key host metric_name_key metric_name metric_value_key value <fields> itemid groups </fields> </match>
in_tailは余りひねりがありませんが、record_transformer を挟んでいます。
これを挟まずに直接流し込むと、メトリクスを見るときにアイテム名が表示されず非常にしんどい思いをします
メトリクス名についてはベストプラクティスを見るとイマイチな感じがしますが、とりあえず動いているのでよしとします。(記号も大丈夫でした)
Best practices for metrics - Splunk Documentation
insecure_ssl についてはテスト用ということで、プロダクション環境で使用することはきちんと検討してください。
(このプラグインはHTTPS専用のようです)
Splunkで見る
Fluentd設定を反映したあと、サーチアプリの「メトリクス」から見れます。
あとはSPLを書いて楽しみましょう。
おわりに
とりあえず動く感じにまでは持っていけました。
SplunkはSNMP周りの実装がつらい所があるので、Zabbixと共存出来るようになったのは良いことです。