Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
40
Help us understand the problem. What is going on with this article?
@wapa5pow

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条件で作成する

参考

40
Help us understand the problem. What is going on with this article?
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
wapa5pow
サーバサイドのエンジニアです。 機械学習とかも興味あります。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
40
Help us understand the problem. What is going on with this article?