Debian 9.3 ZabbixでSlack連携による通知 (Linux自作PC 23)
当サイトではアフィリエイト広告を利用しています
Debian Stretch 9.3で稼働するZabbixで、Slackによる通知を行えるように設定を行います。
前回でCPUとGPUの温度監視に関するZabbixの設定を行いました。本記事ではメール通知以外にも即応性を優先してSlackでも同時に通知を行えるようにします。
Slackで事前準備
SlackのIncoming hookを利用してメッセージを送ります。
今回はserver-logチャンネルを新規に作成し、Webhookインテグレーションを追加しました。 発行されたWebhook URLを控えておきます。
Zabbixの設定
まずはZabbixのアラートスクリプトの置き場を確認します。
$ grep AlertScripts /etc/zabbix/zabbix_server.conf
### Option: AlertScriptsPath
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts
Slack用のアラートスクリプトとして/usr/lib/zabbix/alertscripts/slack.sh
を作成します。
#!/bin/bash
slack_url="web hook url"
subject=$1
message=$2
channel="server-log"
username="Zabbix"
# Change message color depending on the subject
#if [[ "${message}" == *`Normal "Generic"`* ]]; then
if [ `echo ${message} | grep "Normal \"Generic\""` ]; then
color="#91bbfc"
elif [ "${subject%%:*}" == 'Resolved' ]; then
color="good"
elif [ "${subject%%:*}" == 'Problem' ]; then
color="danger"
else
color="#808080"
fi
# Delete double quote (") on the message
message=`echo ${message} | sed -e 's/"//g'`
# Message format
payload="payload={
\"channel\":\"${channel}\",
\"username\":\"${username}\",
\"attachments\": [
{
\"fallback\": \"fallback\",
\"text\": \"Zabbix>\",
\"color\": \"${color}\",
\"fields\":[
{
\"title\": \"${subject%%:*}\",
\"value\": \"${message}\",
\"short\": true
}
]
}
]
}"
# Posting message to slack
curl -m 5 --data-urlencode "${payload}" "${slack_url}"
なお、着色する部分となるifブロックはメッセージタイトルに応じて条件を変更しておいてください。 そしてスクリプトに実行権限を付与します。
$ sudo chmod +x /usr/lib/zabbix/alertscripts/slack.sh
Zabbixブラウザより管理→メディアタイプに以下を追加します。
- 名前: slack
- タイプ: スクリプト
- スクリプト名: slack.sh
- スクリプトパラメータ:
{ALERT.SUBJECT},{ALERT.MESSAGE}
これで通知時に以下のコマンドが実行されます。
/usr/lib/zabbix/alertscripts/slack.sh {ALERT.SUBJECT} {ALERT.MESSAGE}
次に通知トリガーを設定し、管理→ユーザー→Admin→メディア→追加で登録を行います。
タイプはSlack、送信先は適当にチャンネル名あたりで、メール送信に有効な時間帯、深刻度を設定します。
- 名前: Slack Alert
- 実行条件: and/or
- A メンテナンスの状態 期間外 メンテナンス
- B トリガーの深刻度 >= 警告
- 実行内容
- adminに送信
- メディア: slack
- 復旧時実行内容
- adminに送信
- メディア: slack
また、メッセージにItem values: {ITEM.NAME1}: {ITEM.VALUE1}
を加えておくと、具体的な値が分かって対応がしやすそうです。
参考
次の記事を参考に設定を行いました。
今後
今回Slackの連携を行いましたが、Zabbix以外でもSlack通知の設定をしておきます。