Help us understand the problem. What is going on with this article?

Zabbix 3.2で障害時にSlack通知させる

More than 3 years have passed since last update.

各種調べていましたが、Zabbix 3.2での設定がなかなかまとまっていないので備忘録として書いておきます。

環境

Macですが、基本的に多少の修正でどのLinux系OSでもいけるはずです。

  • Zabbix 3.2.1
  • OS X 10.11.6 (EI Capitan)

設定の流れ

  • slack通知用のスクリプトのダウンロードと設定
  • メディア設定
  • ユーザ設定
  • アクション設定
  • アラートテスト

slack通知用のスクリプトのダウンロードと設定

主に、zabbix-slackを使います。
github上にはグラフが見れるようになってますが、スクリプトのままだとサーバ側をごにょごにょ設定しなければいけないので、今回はグラフ表示対応はしていないです。

Zabbixのalertscriptsフォルダにいきslackのスクリプトを設置します。

cd /usr/local/share/zabbix/alertscripts
wget https://raw.githubusercontent.com/bageljp/zabbix-slack/master/slack.sh
chmod a+x slack.sh

slack.shを以下のように変えます。なお、slack_urlはIncoming Webhooksらへんを見ながら自身のを取得して設定してください。zabbix_username, zabbix_passwordもデフォルトのままですが、本番状況に応じてかえてください。

14,16c14,16
< zabbix_baseurl="http://localhost:8001"
< zabbix_username="admin"
< zabbix_password="zabbix"
---
> zabbix_baseurl="http://zabbix.example.com"
> zabbix_username="yourzabbixusername"
> zabbix_password="zabbixpassword"
42c42
<     ${cmd_wget} --load-cookies="${chart_cookie}_${timestamp}"  -O "${chart_basedir}/graph-${item_id}-${timestamp}.png" -q "${zabbix_baseurl}/chart.php?&itemids[]=${item_id}&width=${chart_width}&period=${chart_period}"
---
>     ${cmd_wget} --load-cookies="${chart_cookie}_${timestamp}"  -O "${chart_basedir}/graph-${item_id}-${timestamp}.png" -q "${zabbix_baseurl}/chart.php?&itemids=${item_id}&width=${chart_width}&period=${chart_period}"
48c48
<         trigger_url="${zabbix_baseurl}/history.php?action=showgraph&itemids[]=${item_id}"
---
>         trigger_url="${zabbix_baseurl}/history.php?action=showgraph&itemids=${item_id}"

注意: zabbix自体が外部からアクセスできない場合などは、グラフ画像を取得している部分でブロックして、スクリプトが実行終了しないので、該当部分はコメントアウトしておきます

メディア設定

[管理]->[メディアタイプ]からメディアを登録します。

image

以下のようなパラメータで設定します。

image

ユーザ設定

通知したいユーザのメディアにSlackを登録します。追加を押すと登録できるので、以下のように登録します。
なおチャネルは#bot_testとしていますが、適当な部屋名としてください。

image

ステータスが有効になっている事を確認し、無効ならクリックして有効にする

アクション設定

アクションを設定します。アクションとは、トリガーなどの条件が満たされたときにとられる行動です。
以下のように設定しています。
なお、追加しても、更新を押すまで登録されていないので気をつけてください。

image


image

Report problem to slack


image

** PROBLEM alert - {HOST.NAME}: {TRIGGER.NAME}


image

** RECOVERY alert - {HOST.NAME}: {TRIGGER.NAME}

メッセージは以下です

HOST: {HOST.NAME}
TRIGGER_NAME: {TRIGGER.NAME}
TRIGGER_STATUS: {TRIGGER.STATUS}
TRIGGER_SEVERITY: {TRIGGER.SEVERITY}
DATETIME: {DATE} / {TIME}
ITEM_ID: {ITEM.ID1}
ITEM_NAME: {ITEM.NAME1}
ITEM_KEY: {ITEM.KEY1}
ITEM_VALUE: {ITEM.VALUE1}
EVENT_ID: {EVENT.ID}
TRIGGER_URL: {TRIGGER.URL}

アラートテスト

アラートを設定し終わったら実際にアラートがとぶかテストしてみます。
今回はかんたんに、CPUのロードが一定値を超えたらアラートが飛ぶように設定してあるしきい値を下げてから、負荷をかけ、確認してみます。

以下のところでしきい値を設定します。

image

その後、以下のコマンドをうって、負荷をあげます。コアが8個だったので2回実行しました。

$ yes > /dev/null & yes > /dev/null & yes > /dev/null & yes > /dev/null &
$ yes > /dev/null & yes > /dev/null & yes > /dev/null & yes > /dev/null &

アラートがslackに飛んだらkillします。

killall yes

以下のように正しく通知がとびました。

image

アラートの送信ログの確認

以下のように[レポート]=>[アクションログ]で確認できます。

image

番外編: プロジェクトごとに異なるSlackチャネルへと通知する

ざっくり以下の手順を取ります

  1. ホストグループを作り、通知させたいホストを登録する
  2. ユーザグループを作り、上記のホストグループの読み込み権限を与える
  3. ユーザを作り、メディアとしてSalckを登録。さらjに上記のユーザグループに登録する
  4. アクションを登録し、メッセージを送るようにする。その際に、実行条件として、ホストグループを1で作ったものにして、深刻度とAND条件で作成する

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away