zabbix5.0でslackに通知を投げるのにはまったのでメモを残す。
https://www.zabbix.com/jp/integrations/slack
基本的には上記の通りに行えばいいが、いくつかはまりどころがある。
https://www.youtube.com/watch?v=3-ONmc43vMw
こちらの動画の通りにパラメータ設定すれば、うまくいく。
目的
- zabix 5.0のデフォルトメディアタイプ設定を利用してslackに通知を投げる。
slackの設定
4.4ではIncoming webhookを使っていたが、5.0ではbotsを利用するように変更された。
zabbix用Appを作成する
Your AppsからCreate New Appで新Appを作成する
App Nameはわかりやすい名前を、workspaceは投稿するworkspaceを設定する
Basic InformationのAdd features and functionalityでBotsを選択する。
「First, assign a scope to your bot token」と言われるので、セクション最後(又は左メニュー)のOAuth & Permissionsリンクを選択する。
ScopesセクションのAdd an OAuth Scopeでchat: write
を追加する。
(用途によってはchat: write.customize
、chat: write.public
も追加する)
公式ドキュメントでは、作成後にslack側がOAuthの権限仕様を変更したらしく、この記述がない。
OAuth Tokens & Redirect URLsセクションでInstall App to Workspaceを選択する。
Bot User OAuth Access Tokenをコピーしておく
チャンネルの設定
slack上で新規チャンネルを作成する。
チャンネル名がascii以外だと投稿できないので日本語名などつけないこと。
チャンネルのユーザーに作成済のbotを追加する。
chat: write.public
がScopeにあればユーザー追加は不要。
Zabbix側の設定
マクロ設定
管理 -> 一般設定 -> マクロから{$ZABBIX.URL}
を設定する。
これは、slack投稿された際に該当トリガーを開くためのリンクに使われる。
なので、zabbixのwebインターフェースURLのトップを設定する。
(テスト中でリンクがまともに動かなくてもいいならhttp://127.0.0.1/
とでもしておけばいい)
メディアタイプ設定
管理 -> メディアタイプ からSlackを選択する。
デフォルト設定を残しておきたければ、複製を選択して別の名前を付ける。
bot_token
に先ほどクリップボードにコピーしたBot User OAuth Access Tokenを設定する。(xorb-で始まる文字列)
host_ip
が{HOST.IP}
になっているが、後ろに何か文字を追加する。
{HOST.IP} .
など
zabbix server自体のトリガーなどではHOST.IPが空の通知が来ることがあるのに、デフォルトのスクリプトではそれをイリーガルとしてはじいているため、これを設定する。
メッセージテンプレートタブに移って、テンプレートを追加する。
障害、障害復旧、障害更新あたりを最低追加しておく。
全部追加しても問題はない。(たった七種)
それ以外はデフォルト設定のまま追加(更新)を選択する。
メディアテスト
管理 -> メディアタイプ から作成したslackメディアの右端にあるテストを選択するして、テストダイアログを開く。
channel
に先ほど作成したチャンネル名(#で始まる文字列)を設定する。
zabbix_url
に先ほど{$ZABBIX.URL}
に設定したURLを設定する。
あとは、テストボタンを押す -> エラーメッセージに従って項目を修正する、を繰り返す。
だいたい数字を入れろというエラーなので、1を設定してまわればいい。
具体的な項目としてはevent_id
、event_nseverity
、event_update_status
、event_value
、trigger_id
。
ここで0か1を設定しろというものに対して0を設定すると投稿できなかったりするので、各パラメータの意味をスクリプト読んでしっかり把握したい人以外は全部1を設定しておくのが無難。
テスト投稿が成功したら次へ進む
ユーザーに割り当て
管理 -> ユーザーで適切なユーザーにslackメディアを追加する。
ユーザーを開いたらメディアタブ -> 追加
タイプを先ほど設定したslackのメディアタイプを設定する。
送信先に先ほどテストでchannelに設定したチャンネル名を設定する。
あとはデフォルト設定のまま追加を選択、ユーザーを更新or追加で設定する。
参考
https://www.youtube.com/watch?v=3-ONmc43vMw
https://www.zabbix.com/jp/integrations/slack