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通知の設定をしておきます。