Zabbix 5.0からはwebhook機能が充実したと聞いて、早速Slackに連携して遊んでみます。
#1.Slack APIの設定
Slack APIを作成するため、Slack APIページにアクセスし、Slackアプリを作成します。
まずはトップページの[Create an app]を押下します。
次に、App Name
とPick a workspace to develop your app in:
を入力します。
App Name
は任意のBot名、Pick a workspace to develop your app in:
には通知先のワークスペースを入力します。
入力したら、[Create App]を押下します。
同じ画面の[OAuth & Permission]を押下します。
中段の[Scopes] - [Add an OAuth Scope]を押下し、[calls:write]を選択します。
上部にSuccess!と表示されたら、上段の[OAuth Tokens for Your Workspace] - [Install Workspace]を押下します。
アクセス許可の画面が表示されるので、[許可する]を押下します。
再びSlack APIの画面にて、アクセストークンが表示されるため、こちらのトークンを控えておきます。
#2.Slackワークスペース、チャンネルの設定
次はSlackワークスペースを表示します。
[App]を展開し、先ほど作成したBOTが表示されることを確認します。
続いて、通知用のチャンネルを作成します。
チャンネル名はzabbix_notification
とでもしておきます。
その後、チャンネルオプションからインテグレーションの設定をします。
チャンネルオプションを表示して、[インテグレーション]タブを表示します。
[App]-[アプリを追加する]を押下します。
アプリ追加の画面で、最初に作成したBOT(Zabbix_Slack_Notification)を[追加]します。
追加が完了すると、Slack側の設定は完了です。
#3.Zabbixメディアタイプの設定
こちらからはZabbix Server側で設定を行います。
まずは[管理]-[メディアタイプ]を選択し、その中に[Slack]がありますので押下します。
まずはこのデフォルト設定を汚さないため、複製して別名で作成するため、下部の[複製]を押下します。
複製したメディアタイプ設定について、以下の項目は記載を変更します。
設定を変更したら[追加]を押下します。
項目 | 設定 | 備考 |
---|---|---|
名前 | [メディアタイプ名] | 既存と重複はNG |
bot_token | [Slack APIで表示されたトークン] | - |
zabbix_url | http://[ZabbixServerのIPアドレス]/zabbix/ | - |
なお、
zabbix_url
については{$ZABBIX.URL}
のままにし、グローバルマクロを修正する方法もありますが、当環境では何故かうまく設定が反映されなかったため、直書きで記載をしています。
#4.メディアタイプのテスト
ここで、先ほど設定した内容にてZabbixからSlackへ連携できるかテストを行います。
テスト自体は、作成したメディアタイプの右にある[テスト]を押下します。
テスト用の内容一覧が表示されるため、以下のみ手動で書き換えてから[テスト]を押下します。
項目 | 設定 |
---|---|
channel | [Slackチャンネル名] |
event_id | 1 |
成功すると、Zabbix側では以下が表示され、Slack側でも通知がされます。
失敗するとZabbix側にアラート内容が記載されるので、適宜修正を行います。
なお、初回テスト時に以下の内容も編集する必要がある場合があります。設定内容に
0
を入れると通知が飛ばないようでしたので、基本は1
を設定します。
項目 | 設定 |
---|---|
event_nseverity | 1 |
event_source | 1 |
event_tags | 1 |
event_update_status | 1 |
event_value | 1 |
trigger_id | 1 |
#5.通知ユーザの設定
通知するためにはZabbix側でユーザを作成する必要がありますので、ユーザを作成します。
なお、ユーザ権限周りについては必要最低限度に絞った方が良いですが、今回は最上級特権の特権管理者
を割り振ります。
[管理]-[ユーザー]でユーザー画面を表示し、右上の[ユーザー作成]を押下します。
[ユーザー]タブでユーザー名、グループ名、パスワードを設定します。
グループ名は適当にデフォルトのものを設定しています。
[タイプ]は先ほど作成したメディアタイプ名を、[送信先]にはSlackのチャンネル名を入力して[更新]を押下します。
最後に、[権限]タブを表示し、[ユーザの種類]を特権管理者に設定して、[追加]を押下します。
[ユーザーの種類]で特権管理者以外を選択する場合、[ユーザー]タブで設定したユーザグループの権限を継承しますので、詳細に権限を割り与える場合はユーザーグループ側の権限を正しく付与する必要があります。
#6.アクションの設定
Zabbix側の設定としては最後となる、アクションの設定を行います。
[設定]-[アクション]から右上の[アクションの作成]を押下します。
[アクション]タブにて、名前と実行条件を設定します。名前はなんでもよく、実行条件もなんでもよいですが、一般的なメンテナンス期間外
と警告以上を通知
を設定しておきます。
続いて、[実行内容]タブから[実行内容]-[追加]を押下します。
[実行内容の詳細]画面にて、[ユーザーに送信]に先ほど作成したユーザを、[次のメディアのみ使用]に作成したメディアタイプを設定します。
また、[復旧時の実行内容]も同様に設定をしておきます。
#復旧検知可能な監視アイテムについて、復旧時にもアラートが出るようになります。CPU使用率の閾値回復やプロセス停止後の起動検知など。
実行内容、復旧時の実行内容の両方の設定完了後、[追加]を押下します。
これにて、Zabbix/Slack連携の設定は完了です。
#7.Slackへの障害通知連携
最後に、障害発生時のSlack連携内容について確認します。
今回はLinuxサーバのcrondプロセス監視を利用し、crondプロセスを停止することで疑似故障、開始することで疑似回復のアラートを発行します。
##7.1 crondプロセス停止
crondプロセスを停止します。
[root@cent79-02 ~]# systemctl stop crond
[root@cent79-02 ~]# systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: inactive (dead) since 月 2021-08-30 20:11:51 JST; 26s ago
《中略》
Zabbix側で障害が通知され、アクションが発行されたことが確認できました。
##7.2 crondプロセス開始
crondプロセスを開始します。
[root@cent79-02 ~]# systemctl start crond
[root@cent79-02 ~]# systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 月 2021-08-30 20:15:16 JST; 1s ago
《中略》
Zabbix側で障害が解決済になり、アクションが発行されたことが確認できました。
Slack側でも回復通知が確認できました。
なお、先に通知された障害通知に対し、回復通知が上書きされているため、障害通知の内容自体は消えています。