👀

【Ver6.4対応】zabbixのスクリプトでslackに通知する

2023/12/30に公開

概要

以前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通知されます。

参考

https://colabmix.co.jp/tech-blog/install-zabbix-slack/

GitHubで編集を提案

Discussion