​ ​
スクリーンショット 2014-12-17 17.17.09.png

zabbixサーバからアラートをSlackに通知する方法

天気が悪いんでそろそろ帰らないとやばい ながたにです。 採用情報を書いたばかりですが、たまには技術的な情報を。

さて、皆さんSlackつかってますかー? 弊社では歴代色々とコミュニケーションツールを使ってきましたが現在はSlackにおちついています。

今は社員全員使っいているのですが、ふと思いました。 みんなが見ているSlackに監視サーバのアラートを送ったらメールよりは見てくれるんじゃないだろうか。 ※メールも一部の社員さんには送信していますが、フィルタリングされてたらオシマイですよね(これはSlackも同じか・・・)

という事で設定方法を列挙します 他にも検索すると複数の方法がでてきますが多分僕の方法が一番簡単だと思います。

Incoming WebHooksを作成する

APIのエンドポイントみたいなものを作成します。作成したURLに対してPOSTを行う事で特定のチャンネルに通知を行う事が可能になります。

以下のURLにアクセスして作成画面に遷移する

https://my.slack.com/services/new/incoming-webhook

通知をPOSTしたいチャンネルを選択し、作成を実行します

作成すると以下のようなURLが表示されているのでメモしておきます
ex) https://hooks.slack.com/services/AAAA/BBBB/CCCC

zabbixサーバにIncoming WebHooksを叩くスクリプトを設置する

サーバの何処でもいいのでスクリプトを設置します。
ex) /usr/lib/zabbix/alertscriptsの中にslack.shという名前で保存

スクリプトの中身は以下になります。 最終行に先ほどコピーしたURLをペーストして下さい。 スクリプトはの元ネタはこちら なんですが、tokenを使用するようになっていて動かないので修正してあります。

追記:とおもったらつい最近アップデートされたようです(ガーン)

ユーザ名とチャンネル名については修正して下さい

#!/bin/bash

status="$1"

if [ "$status" == 'OK' ]; then
        emoji=':smile:'
elif [ "$status" == 'PROBLEM' ]; then
        emoji=':frowning:'
else
        emoji=':ghost:'
fi

message="$2\n$3"

payload="payload={\"channel\": \"#投稿先チャンネル名\", \"username\": \"投稿ユーザ名\", \"text\": \"${message}\", \"icon_emoji\": \"${emoji}\"}"

curl -m 5 --data "${payload}" https://hooks.slack.com/services/AAAA/BBBB/CCCC

スクリプトを設置したら実行権限を付けておきます。
chmod 755 /usr/lib/zabbix/alertscripts/slack.sh

zabbix側の設定を行う

今回はユーザ毎の情報の出し分けはしません。一律全てのアラート Slackの特定チャンネルに通知します

アクションの作成

システム管理者でzabbixにログインし、設定のアクションを新規作成を行います

スクリーンショット 2014-12-16 22.13.05.png

アクションの実行内容タブで新規作成

スクリーンショット 2014-12-16 22.15.00.png
  • 実行内容のタイプには「リモートコマンド」を設定
  • ターゲットリストには「現在のホスト」を設定
  • タイプに「カスタムスクリプト」
  • 次で実行に「Zabbixサーバ」

コマンドに以下を設定。ここで指定するマクロがメッセージになるのでzabbixのマニュアルを参考に変更して下さい

/usr/lib/zabbix/alertscripts/slack.sh "{TRIGGER.STATUS}" "{TRIGGER.NAME}" "{ITEM.NAME1} {HOST.NAME1} {HOST.DNS}  {ITEM.KEY1}"

設定完了

さて、如何でしたでしょうか。これで通知が届くと思います。では次回も宜しくお願いします。

このエントリーをはてなブックマークに追加