LoginSignup
30
40

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-10-19

各種調べていましたが、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条件で作成する

参考

30
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
40