Zabbix(3.x)からSlackにグラフ付きの通知を送る

  • 3
    いいね
  • 0
    コメント

いろんな実装があるけど気に入ったものがなかったので作ってみた。

特徴

  • グラフ画像をGyazoに送って表示するので、Slackから直接繋がらないZabbixサーバのグラフでも表示できる
    • 運用如何ではホスト名が外部に漏れるなど起き得るので、そこは要注意

インストール方法

  • Python3.xが入っているマシンで、pipあたりでrequestsをインストール。
  • slack.pyを AlertScriptPath以下(/usr/lib/zabbix/alertscripts/など)へ放り込んでchmod +x
    • zabbixのホスト・ユーザ・パスワードを設定。このユーザでログインして通知時にグラフを取ってきます
  • Gyazo APIでトークンを取ってくる
    • Applicationを登録したあと、アプリ詳細画面でYour access tokenに書いてあるのがトークン
  • Gyazoのトークンをslack.pyのgyazo_tokenに設定

設定方法

メディアにスクリプトを追加

メディアタイプ追加

スクリプト引数は「メッセージ」「Incoming-hook URL」「チャンネル名」「ユーザ名」「アイコンemoji」の5つで、メッセージとIncoming-hook URLは必須です。メッセージは{ALERT.MESSAGE}で、Incoming-hook URLはSlackの設定からコピペしてください。チャンネル名は固定文字列(#zabbixとか)とか、{ALERT.SENDTO}1を入れるなど任意です。

メディアを追加した後、ユーザ設定で当該ユーザに追加したメディアでの通知を許可しないとアクション実行時に通知不能でエラー2になります

アクションの設定

アクション設定

メッセージ内容に以下のような設定をします。トリガ条件に使われていて、通知時に表示したい値がある場合はITEM_なんとか系をインクリメントして追加してください。

HOST: {HOST.NAME}
TRIGGER_NAME: {TRIGGER.NAME}
TRIGGER_STATUS: {TRIGGER.STATUS}
TRIGGER_SEVERITY: {TRIGGER.SEVERITY}

ITEM_ID1: {ITEM.ID1}
ITEM_NAME1: {ITEM.NAME1}
ITEM_VALUE1: {ITEM.VALUE1}

ITEM_ID2: {ITEM.ID2}
ITEM_NAME2: {ITEM.NAME2}
ITEM_VALUE2: {ITEM.VALUE2}

ITEM_ID3: {ITEM.ID3}
ITEM_NAME3: {ITEM.NAME3}
ITEM_VALUE3: {ITEM.VALUE3}

ITEM_ID4: {ITEM.ID4}
ITEM_NAME4: {ITEM.NAME4}
ITEM_VALUE4: {ITEM.VALUE4}

MESSAGE_PREFIX: @walkure

MESSAGE_PREFIXを設定すると、通知の先頭に付け加えます。@channelなどお好みで。

実行内容は、さっき追加したメディアへの通知を選択します
通知設定

通知例

通知例


  1. 「管理」→「ユーザー」→「メディア」の「送信先」に入ってるものが反映される様子。 

  2. 実行してみるまで気付かなくてハマった