ZabbixのアラートをSlackで飛ばす。

# 概要
zabbixで取得したアラートを、Slack経由で飛ばすようにしたい。 SlackのWebhook機能を使って実現しよう。 基本的には、参考サイトの情報をそのまま追記していく形になる。 Slackのメディアタイプが存在しない場合、以下のリポジトリからファイルをDLしてきて、 Zabbix管理画面のメディアタイプからインポートする必要がある。
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/slack?at=release/6.0

# 必要な環境
- Zabbix 5.x環境 
- 通知するSlackワークスペース 
- 通知するSlackチャンネル 
- Slackユーザーアカウント

今回は、CentOs8のLinux上に、ZabbixServer5.0をのせています。

# 設定手順
slackappの作成
Slackチャンネルで通知をおこなうSlackアプリを作成します
以下のリンクからアクセスして、Create an appを押す。
https://api.slack.com/

![スクリーンショット 2022-11-03 14.16.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/32bf1d2b-043b-6df9-dd3b-ad3afca8fddb.png)

すると「Create an app」ポップアップが表示されるので「From scratch」を選択し、手動で設定を入力してアプリを作成します。

![スクリーンショット 2022-11-03 14.19.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/6233a54c-e614-f78e-a153-5aa46eaa3614.png)


`「Name app & choose workspace」`ポップアップが表示されるので、
以下の流れで設定を行います。
1.「Sign into a different workspace」を選択してSlackユーザーアカウントにログインします 
2.  「App Name」にSlackアプリ名を記載します
3. 「Pick a workspace to develop your app in:」で対象のSlackワークスペースを選択します 
4. 「Create App」を押下します
![スクリーンショット 2022-11-03 14.21.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/d17c2f3b-9c3c-1ff8-3dfa-c8d33500f715.png)

App Nameに記載したSlackアプリ名でSlackチャンネルに通知を行います。
 アプリ名は後から変更ができます。
「Create App」ボタンを押下した後に、サイドバーから【OAuth & Permissions】を選択します。 OAuth & Permissionsの設定で、追加するSlackアプリの権限設定を行います

![スクリーンショット 2022-11-03 14.22.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/81f19b5e-83ad-f35e-6ccf-d266b7c22acd.png)

下にスクロールして「Add an OAuth Scope」ボタンを押下
![スクリーンショット 2022-11-03 14.24.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/ee221b48-2ab6-42ea-531f-042015caa05e.png)

プルダウンメニューから「chat:write」を選択します。「chat:write」を選択することでSlackアプリにSlackチャンネルへの書き込み権限 を付与しています。

`「Bot Token Scopes」`に`「chat:write」`が追加されていることを確認

![スクリーンショット 2022-11-03 14.25.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/a4b1d0e7-3591-b1d1-f583-ce0bb5b55352.png)

![スクリーンショット 2022-11-03 14.28.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/e1fd4f10-0d06-1161-64e1-a1d62480685f.png)

上にスクロールして`「Install to Workspace」`を押下し、SlackアプリをSlackワークスペースにインストールします。


その後、`許可する`を押下します

許可をすると、`「Bot User OAuth Token」`が表示されていることを確認します。「Bot User OAuth Token」は後でZabbix側の設定をす る時に必要になります。忘れないように「Copy」ボタンを押してメモします。

これでSlackAPIの設定は完了。

# slackでの設定
通知に用いるSlackチャンネルを開く。ここでは、sample_zabbix_alertというチャンネルを新たに作成した。 右上の所を選択して、
インテグレーションタブ⇒`アプリを追加する`を選択。

先ほど作成したSlackAPPの名前を検索し、追加する。
![スクリーンショット 2022-11-03 14.36.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/971e64c4-0e69-a101-6816-dafe222debba.png)

成功したら、チャンネルの方に、Slackチャンネル名に追加されました。と表示される。

# Zabbixでの設定
Zabbixでは
- メディアタイプの設定、 
- ユーザーの設定、 
- トリガーアクション
の設定を実施していく。

Zabbixフロントエンドに、Zabbix特権管理者相当の権限を持つユーザーでログインする。 
メインメニューから【管理】→【メディアタイプ】を押下してメディアタイプの一覧から「Slack」を押下。
![スクリーンショット 2022-11-03 14.38.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/5c1d4fc2-898a-3cc0-f219-ce7c0548d6d4.png)


- bot_tokenにSlack API設定で取得した「Bot User OAuth Token」の値
    - zabbix_urlに{$ZABBIX_URL}がある。
これは、グローバルマクロでの設定をお勧めする。後程解説する。

そして、更新を押す。

## グローバルマクロの設定

1. メインメニューから【管理】→【一般設定】の順で押下する。
2. 左上のプルダウンメニューから「マクロ」を選択する。
3. マクロに {$ZABBIX_URL}、値に「http://IPアドレス」または「https://IPアドレス」を記載する。 `https~` の記載がないと、アラート送信時に失敗する。

そして、更新ボタンを押す。
![スクリーンショット 2022-11-03 14.40.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/1fa27a5d-cae5-eae8-d73f-464279c53898.png)


## テストの実行
設定が正しいか確認するために、管理⇒メディアタイプの右側にあるSlackの「テスト」を押下する。

テストを行うために必要なパラメーターに値を入力する。 必要なのは、以下のパラメータ。
- channel: 通知するSlackのチャンネル名を記載します
- event_id: 任意の数値を記載します
- event_source: 0-3の数値を記載します
- zabbix_url: 「http://IPアドレス」または「https://IPアドレス」を記載します。

必要なパラメーターに値を入力したら「テスト」ボタンを押下する。 テストに成功した場合、「メディアタイプ"Slack"のテスト」ポップアップに「メディアタイプのテストに成功しました。」と表示され
る。 また、Slack側でも、送信されたのが確認できる。
![スクリーンショット 2022-11-03 14.42.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/b19a998f-60e2-e4b3-c9c2-532dbf24c756.png)

## userの作成
アラート通知を行うユーザーを作成する。
メインメニューから【管理】→【ユーザー】の順で押下する。
 今回は「zabbix_alerts」ユーザーを使用します。 Slack通知用のユーザーを作成していない場合は「ユーザーの作成」を押下して作成を押す。 (元からあるユーザーを使用する場合はスキップする。)

所属するユーザーグループは、監視対象ホストの表示権限が必要。
表示権限が付与されていない場合はアラート通知を行えない。
1. メディアタブに移動して追加を選択。
2. 「メディア」のポップアップが表示されるので「タイプ」のプルダウンメニューからSlackを選択した後に「送信先」にSlackのチャンネル名を記載する。
3. 設定後に「追加」を押下します。この時、送信先の先頭についている#は無くても動作はしてくれる。

この時に指定する、深刻度と、 有効な時間帯は、ケースによって適宜変更する事をお勧めする。

## トリガーアクションの設定
アラートを発報する条件や送信するメッセージを設定する。 アクションの左上のプルダウンからトリガーアクションを指定し、 メインメニューから【設定】→【アクション】の順で押下して「アクションの作成」を押下する。

実行条件を設定して「実行内容」タブを選択します。今回は実行条件を「Zabbix serverホスト」でイベント発生時に設定している。
![スクリーンショット 2022-11-03 14.45.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/7c53094d-d18a-9ecd-07bc-0e4d5e15fbe4.png)

- 「実行内容」と「復旧時の実行内容」 
- 「更新時の実行内容」を設定します。 
今回は「実行内容」と「復旧時の実行内容」にメディアタイプ「Slack」とユーザー「zabbix_alerts」の設定を行う。
![スクリーンショット 2022-11-03 14.46.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/eb2a3744-6fad-9585-6a73-7ec132a9c39b.png)

この時、メッセージを変更する場合は、画面下にあるメッセージのカスタマイズにチェックを入れて、 メッセージを編集する。
これにて設定は完了です。

# 発報テスト
Zabbixエージェントを停止させたり、検証用のマシンのケーブルを抜いたりしてみて、 アラートが来るか確認してみる。以下のような画面の出力が出てくるハズである。
![スクリーンショット 2022-11-03 14.47.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/c4ce07ff-11ff-692f-36e8-8d59ec668ffd.png)


# 参考サイト
https://devlog.arksystems.co.jp/2021/07/27/13746/