【Ver6.4対応】zabbixのスクリプトでslackに通知する
概要
以前Macにzabbixサーバを立てたのでそれにslackに通知する機能を持たせる。しかし、1番簡単なwebhookからの通知設定を実施するとzabbix_serverがクラッシュしてしまう事象が発生する。(ソースインストールした時のオプションが不足していた?)
そこでスクリプトを用いてslackに通知する機能を実装したのでその手順について説明する。
手順
Slackの「Incoming Webhooks」を作成してチャネルに通知するアプリを作る
slackの左下のアプリを追加するを押下
検索窓でIncoming Webhooksと入力してアプリを探し、追加を押下
slackに追加するを押下
追加したいチャンネルを設定して Incomming Webhookインテグレーションの追加 を押下
Webhook URLは今後必要になるので書き控えておきます。
通知用シェルスクリプトを作成する
slack.shという名前のscriptを作成します。
sudo vim /usr/local/share/zabbix/alertscripts/slack.sh
#!/bin/bash
# Slack incoming web-hook URL
SLACK_WEBHOOKSURL='${Webhook URL}'
# Slack UserName
SLACK_USERNAME='Zabbix(bot)'
# "Send to" for Zabbix User Media Setting
NOTIFY_CHANNEL="$1"
# "Default subject" for Action Operations Setting
ALERT_SUBJECT="$2"
# "Default message" for Action Operations Setting
ALERT_MESSAGE="$3"
if [ "${ALERT_SUBJECT%%:*}" == 'Recover' ]; then
ICON=':smile:'
COLOR="good"
elif [ "${ALERT_SUBJECT%%:*}" == 'Problem' ]; then
ICON=':skull:'
COLOR="danger"
else
ICON=':innocent:'
ICON=':sushi:'
COLOR="#439FE0"
fi
# Create JSON payload
PAYLOAD="payload={
\"channel\": \"${NOTIFY_CHANNEL//\"/\\\"}\",
\"username\": \"${SLACK_USERNAME//\"/\\\"}\",
\"icon_emoji\": \"${ICON}\",
\"attachments\": [
{
\"color\": \"${COLOR}\",
\"text\": \"${ALERT_MESSAGE//\"/\\\"}\"
}
]
}"
# Send it as a POST request to the Slack incoming webhooks URL
curl -m 5 --data-urlencode "${PAYLOAD}" $SLACK_WEBHOOKSURL
メディアの設定
ブラウザからzabbixを開き 通知 → メディアタイプ を押下
メディアタイプslackを有効にし、さらにslackを押下し設定していく
以下の様に設定していく。
項目名 | 設定内容 |
---|---|
名前 | slack |
タイプ | スクリプト |
スクリプト名 | slack.sh |
スクリプトパラメータ1 | {ALERT.SENDTO} |
スクリプトパラメータ2 | {ALERT.SUBJECT} |
スクリプトパラメータ3 | {ALERT.MESSAGE} |
zabbix ユーザーの設定
ユーザーの項目を開きユーザーを作成を押下
ユーザー名(今回はzabbix)とパスワードを入力し メディアを押下し、追加を押下し送信先にslack通知したいチャンネルを入力
最後に追加を忘れずに
権限で Super Admin roleを付与して追加を押下します。
トリガーアクションの設定
通知 → アクション → トリガーアクション を押下しアクションの作成を押下する。
アクション名を命名して、実行条件を追加する。
今回は警告以上でメンテナンス期間でない場合 実行するアクションにしています。
実行内容を押下しデフォルトのアクション実行ステップの間隔を60秒を設定します。
実行内容を以下の様に設定していきます。
項目名 | 設定内容 |
---|---|
処理内容 | メッセージの送信 |
ユーザーに送信 | zabbix(さっき作ったuser名) |
次のメディアのみ使用 | slack |
メッセージのカスタマイズ | ☑️ |
件名 | Problem |
メッセージは以下の内容にしてください。
以下の障害が発生しました。
発生時刻 {EVENT.DATE} {EVENT.TIME}
発生ホスト {HOST.NAME}
深刻度 {EVENT.SEVERITY}
発生障害 {EVENT.NAME}
障害の説明
------------------------------------
{TRIGGER.DESCRIPTION}
復旧時の実行内容を以下の様に設定してアクションを追加します。
項目名 | 設定内容 |
---|---|
処理内容 | 障害通知済のユーザーすべてにメッセージを送信 |
メッセージのカスタマイズ | ☑️ |
件名 | Recover |
メッセージは以下の内容にしてください。
以下が復旧しました。
発生時刻 {EVENT.DATE} {EVENT.TIME}
復旧時刻 {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
発生ホスト {HOST.NAME}
深刻度 {EVENT.SEVERITY}
発生障害 {EVENT.NAME}
障害の説明
------------------------------------
{TRIGGER.DESCRIPTION}
完成
障害テスト
zabbix_agentを落として通知されるか確認します。
ターミナルを開き以下のコマンドを実行します
pkill -f zabbix_agent
3分くらいすると以下の様にslack通知されます。
復旧テスト
落としたzabbix_agentを起動して復旧通知されるか確認します。
ターミナルを開き以下のコマンドを実行します
sudo /usr/local/sbin/zabbix_agentd
以下の様にslack通知されます。
参考
Discussion