loader image

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

参考

ZABBIXのアラートをSlackに飛ばす - 株式会社CoLabMix
ZABBIXのアラートをSlackに飛ばすための設定です。(ZABBIX4.2)Webhooksを利用したことがない方でも画面を見ながら確認することができます。基本的な手順と必要になるスクリプトをまとめ、ZABBIXでの設定方法も画面を見ながら確認ができます。

コメント

タイトルとURLをコピーしました