目的
zabbixにて障害が発生した場合、Mattermostに障害情報(ITEM.VALUE)を書き込む。
やったこと
Zabbixで障害が発生すると、Zabbixのアクション機能で、リモートコマンド(webhook)を実行し、以下のようにMattermostに障害情報を書き込む。
事前にいるもの
- zabbix(当環境は3.0)
- Mattermost
作業の流れ
- Mattermostの「内向きのウェブフック」設定
- zabbixのitem/trigger設定
- zabbixのアクション設定
- zabbixサーバ側でのスクリプト設定
作業の流れ(詳細)
Mattermostの「内向きのウェブフック」設定
Mattermost内で「統合機能」を選択
「内向きのウェブフック」を選択
「内向きのウェブフックを追加する」を選択
必要情報を記載(重要なのはどこのチャンネルに書き出すか(ここではchannel=alert))
設定完了すると、下記のようにTOKENを含んだアクセスURLが出てくるので控えておきます。
- TOKEN丸見えですが、どうせすぐスクラップするので載せてます(載せたほうがサンプルPGMも分かり易そうだし)
zabbixのitem/trigger設定
割愛します。何かアラートが上がるような設定をします。
zabbixのアクション設定
アクション部分は、名前だけ設定します(ここでは"send mattermost")
アクションの実行条件もデフォルトのままでOKです
アクションの実行内容
- 実行内容のタイプ=リモートコマンド
- ターゲットリスト=現在のホスト
- タイプ=カスタムスクリプト
- 次で実行=Zabbixサーバー
- コマンド=/usr/local/bin/send_mattermost.sh '{ITEM.VALUE}'
zabbixサーバ側でのスクリプト設定
雑なプログラムですが、一応動くのでご容赦を…
/usr/local/bin/send_mattermost.sh
# !/usr/bin/php
<?php
$json = json_encode( array( "text" => preg_replace( "/^[^ ]* /", "Alert ", implode( " ", $argv))));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://192.168.10.189:8065/hooks/53yph6toibgyjmqn8ie7aawb3r");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_exec ($ch);
curl_close ($ch);
まとめ
slackを使っていたけど、クローズドな環境でchatを使いたくて、Mattermostをインストールした。
初めて使ってみたけど、Mattermostはいい感じかも。
今後、どうやってやるか知らないけど、Mattermostでクローズって呟いたら対象の障害イベントのコメント記載しクローズするようなの作ってみたい。