ZABBIXのアラートをSlackに飛ばす設定です。
アラート通知の際に周知や確認などメールよりもSlackの方が気づきやすなどのケースは多いのではないでしょうか。
基本的には以下の手順で行います。
- Slackの「Incoming Webhooks」を作成してチャンネルに通知するアプリを作る
- アプリに通知を行うシェルスクリプトを作成する
- メディアタイプにスクリプトを設定し、トリガーのアクションに追加する
今回設定を入れたZABBIXは4.2です。
Slackの「Incoming Webhooks」を作成してチャネルに通知するアプリを作る
Slackの左下の画面の「App」をクリックします。
次にアプリ一覧で「Incoming Webhooks」と入力してアプリを探します。
一番上のをインストールします。
アプリの概要が出るので確認して「設定を追加」を行います。
投稿するチャンネルの設定を行います。
その後にインテグレーションの追加を行います。
Webhookに必要なURLが確認できましたので、「設定を保存する」を行います。
いくつかのチャンネルに登録する場合はわかりやすい名前やアイコンをつけておいた方が良いでしょう。
「https://hooks.slack.com/services/XXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXX」というURLが取得できましたので、次以降はこちらを利用します。
アプリに通知を行うシェルスクリプトを作成する
「/usr/lib/zabbix/alertscripts/」のフォルダにシェルスクリプトを設置します。
今回はこちらのサイトを参考にさせていただきました。
シェルは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
#!/bin/bash # Slack incoming web-hook URL SLACK_WEBHOOKSURL='https://hooks.slack.com/services/XXXXXXXX/XXXXXXX/XXXXXXXXXXXXX' # 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%%:*}" == 'OK' ]; then ICON=':smile:' COLOR="good" elif [ "${ALERT_SUBJECT%%:*}" == 'WARNING' ]; then ICON=':speaker:' COLOR="warning" 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_to_slack.sh」で保存しています。
実行権限を忘れずにつけてください。
引数でチャンネル、タイトル、メッセージを順番に受け取っています。
タイトルの内容によって、アイコンや色などを変更させています。
元のスクリプトにWARNING用の設定を付け加えました。
アラートの種類を細かく設定している場合は条件訳を細かくすれば対応できます。
メディアタイプにスクリプトを設定し、トリガーのアクションに追加する
メディアタイプで以下のように設定します。
名前 | zabbix_to_slack |
タイプ | スクリプト |
スクリプト名 | zabbix_to_slack.sh |
スクリプトパラメータ1 | {ALERT.SENDTO} |
スクリプトパラメータ2 | {ALERT.SUBJECT} |
スクリプトパラメータ3 | {ALERT.MESSAGE} |
設定は以下のようになります。
こちらをユーザーの「メディア」などに紐付けます。
こちらを「アクション」などに割り当てて障害時の通知をSlackに飛ばすことができます。
運用をある程度実施しているところはだいたい入っている設定かと。
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。