Zabbix5.0 を公式 docker-compose で構築し SNMPTRAP 監視をして Slack 通知設定をする

## はじめに
自宅サーバ監視を Zabbix でする際に、公式の docker-compose を使ってコンテナで構築した
ネットワーク機器もあるので SNMPTRAP 受信時にアラート通知も出せるようにする
Alert は Slack 通知にしたのでその際の構築メモも記載する
(情報は 2020.11.01 時点での構築の際の情報)

下記ざっくり絵
![zabbix-comopse-slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/6c8365b5-5c25-5949-c9ce-0d2f5b35b072.png)


## 実施内容

1. docker-compose での Zabbix 構築
2. zabbix 設定
3. 監視設定
4. zabbix slack 連携
5. Alert 試験

## 実施環境
- dockerサーバ
    - OS: CentOS 7.8.2003
    - Docker: docker-ce 19.03.13
    - Docker-compose: 1.18.0
- Slack
    - ワークスペース：HomeLabという名前で作成済み

## 1. docker-compose でインストール
Zabbix が下記 GitHub にて zabbix-docker を公開している
https://github.com/zabbix/zabbix-docker

こちらの docker-compose を利用して起動する

zabbix-docker のサイトで5.0の最新タグを確認して、タグ指定で clone する (タグ指定しないと 5.2 などの最新バージョンになる)
https://github.com/zabbix/zabbix-docker/tags

```sh:git_clone
git clone https://github.com/zabbix/zabbix-docker.git -b 5.0.5
```

今回は、centos イメージで mysql を DB として使用するバージョンを使用ので、
下記の yaml を `docker-compose.yaml` にしてデフォルトにする

```sh:cp_use_version
cd zabbix-docker/
cp -p docker-compose_v3_centos_mysql_latest.yaml docker-compose.yaml
```

下記でデーモン起動する

```sh:docker-compose_up
docker-compose up -d
```

下記で起動状況の確認。一番上は `Exit 0` で問題ない

```sh:check_ps
# docker-compose ps
WARNING: Some services (zabbix-agent, zabbix-java-gateway, zabbix-proxy-mysql, zabbix-proxy-sqlite3, zabbix-server, zabbix-snmptraps, zabbix-web-apache-mysql, zabbix-web-nginx-mysql) use the 'deploy' key, which will be ignored. Compose does not support 'deploy' configuration - use `docker stack deploy` to deploy to a swarm.
                 Name                               Command               State                    Ports                
------------------------------------------------------------------------------------------------------------------------
zabbixdocker_db_data_mysql_1             sh                               Exit 0                                        
zabbixdocker_mysql-server_1              docker-entrypoint.sh mysql ...   Up                                            
zabbixdocker_zabbix-agent_1              /sbin/tini -- /usr/bin/doc ...   Up                                            
zabbixdocker_zabbix-java-gateway_1       docker-entrypoint.sh /usr/ ...   Up                                            
zabbixdocker_zabbix-proxy-mysql_1        /sbin/tini -- /usr/bin/doc ...   Up       0.0.0.0:10071->10051/tcp             
zabbixdocker_zabbix-proxy-sqlite3_1      /sbin/tini -- /usr/bin/doc ...   Up       0.0.0.0:10061->10051/tcp             
zabbixdocker_zabbix-server_1             /sbin/tini -- /usr/bin/doc ...   Up       0.0.0.0:10051->10051/tcp             
zabbixdocker_zabbix-snmptraps_1          /usr/bin/supervisord -c /e ...   Up       0.0.0.0:162->1162/udp                
zabbixdocker_zabbix-web-apache-mysql_1   docker-entrypoint.sh             Up       0.0.0.0:80->8080/tcp,                
                                                                                   0.0.0.0:443->8443/tcp                
zabbixdocker_zabbix-web-nginx-mysql_1    docker-entrypoint.sh             Up       0.0.0.0:8081->8080/tcp,              
                                                                                   0.0.0.0:8443->8443/tcp 
```

http://[dockerサーバIP] でブラウザアクセスすると下記画面になるので Username: `Admin`,Password: `zabbix`でログイン

![スクリーンショット 2020-11-01 12.29.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/6f2e682e-320a-1e2b-8df7-fcfe79148b2f.png)

ログインすると下記の画面になる

![スクリーンショット 2020-11-01 12.32.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/8083d33b-bfda-a619-125b-08f29dfd87a6.png)

## 2. zabbix 設定
使い始めの基本的な設定として、ユーザ設定と zabbix server の監視有効化をする

### 2.1. ユーザ設定
![スクリーンショット 2020-11-01 12.35.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/893ea002-5b34-e427-f2d2-f95de9b45dd0.png)

### 2.2. zabbix-server
zabbix-server が障害になっているので対処する
![スクリーンショット 2020-11-01 12.48.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/45dff07a-1352-3d07-9b5d-843b61892ccc.png)

`設定` > `ホスト` > >`Zabbix server`
![スクリーンショット 2020-11-01 12.40.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/94635145-e0ba-d0d1-f844-3ca5e331f2e4.png)

下記画面のように、DNS名`zabbix-agent`、接続方法`DNS`に変更して`更新`をクリックする
![スクリーンショット 2020-11-01 12.46.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/56984346-8189-704e-dfb5-f7f97c32b1cc.png)

少し経つとエージェント通信ができるようになっていることを確認できる
![スクリーンショット 2020-11-01 12.50.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/71f6d6ac-ff53-6261-87fd-ef807b9e9f32.png)

## 3. 監視設定
### 3.1 SNMP Trap のトリガー作成
docker-compose には zabbix-snmptraps のコンテナも起動して 162 をアサインされており、SNMP Trap もアイテムとして取得できる
SNMP TRAP をトリガーにして発報するテンプレートが見当たらなかったので、作成しておく

デフォルトの`Template Net Network Generic Device SNMP`に`SNMP traps (fallback)`というアイテムは有るので、これを受信したらトリガーとしてアラートを出すようにする
SNMP Trap は復旧との紐付けなどはできるかもしれないが難しいので、ここでは 60sec でとりあえず復旧とする

`設定` > `テンプレート` > `テンプレートの作成` に移動する
![スクリーンショット 2020-11-01 13.01.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/159ab680-a909-4234-fab7-56cab7e81208.png)

下記は例でテンプレート名`Template Net Network Generic Device SNMP plus SNMPTRAP Trigger` として、グループは`Templates/Network devices`として入力

![スクリーンショット 2020-11-01 17.38.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/f790bf51-4b85-f20d-d640-d7afbf6b8c8a.png)


`テンプレートとのリンク`タブに移動して、新規テンプレートをリンクで`Template Net Network Generic Device SNMP`を選択して`追加`をクリックしてテンプレートを作成
![スクリーンショット 2020-11-01 17.39.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/9b64a667-f708-0f7d-062d-bc6b413dce55.png)


作成したテンプレートに入って、`トリガー`タブを指定して右上の`トリガーの作成`をクリックしてトリガー追加作成する
![スクリーンショット 2020-11-01 13.18.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/28e738c3-2da7-4fca-94f3-9fec840406b2.png)

トリガーは下記内容で作成する (深刻度はてきとう)

- 名前
    - SNMP trap received from {HOST.NAME}
- 深刻度
    - 警告
- 条件式
    - {Template Net Network Generic Device SNMP plus SNMPTRAP Trigger:snmptrap.fallback.nodata(60)}=0

![スクリーンショット 2020-11-01 17.41.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/ae17e3ac-ff73-57c2-9dbb-0c2e16233d34.png)


### 3.2. ホスト登録
ここで Network 機器の SNMP 監視設定でホスト登録を実施する (発報試験にも使用する)

`設定` > `ホスト` > `ホストの作成` で作成する

- ホスト名
    - 設定するホスト名
- グループ
    - Templates
- インターフェース
    - SNMP
        - ポーリング先の IP アドレス
    - SNMPコミュニティ
        - 機器設定のコミュニティ名を入れる

![スクリーンショット 2020-11-01 14.07.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/14d05485-f64e-c7fc-9831-8a93197eb84e.png)

`テンプレート`タブを開いて作成したテンプレートを選択して`追加`する

![スクリーンショット 2020-11-01 17.43.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/d919c577-7575-b4cb-7a24-296273cc99a9.png)


SNMP ポーリングがうまく行けば`SNMP`箇所がグリーンになる
![スクリーンショット 2020-11-01 17.44.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/4ed5392a-da18-77af-8a23-4f6c8dbabc59.png)



## 4. zabbix slack 連携
Slack には Bot での連携となる

### Slack Bots 作成
事前に通知用のチャンネルを作成しておく
![スクリーンショット 2020-11-01 0.58.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/bc091da4-6b4e-6edb-bfbb-420e3fe22daa.png)

slack api を開いて`Your Apps`を開く
https://api.slack.com/
![スクリーンショット 2020-11-01 14.22.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/84f02ccb-f5ee-91ef-0a1d-4c2f181ecd56.png)

`Create New App`を開く
![スクリーンショット 2020-11-01 14.25.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/4069c646-8476-db3b-a2fa-bc62ced59aab.png)

App Name: `zabbix_alerter` Development Slack Workspace`HomeLab`(連携先ワークスペース)を選択して`Create App`をクリックする
![スクリーンショット 2020-11-01 0.46.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/5dfb8433-3af0-9db4-f8e6-ed75ef8fcd0f.png)

`Bots`を選択する
![スクリーンショット 2020-11-01 0.46.46のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/e62c80b2-db57-4886-2e4b-8b0e08b80a76.png)


`Features` > `OAuth & Permissions` を開き、
`Scopes` のなかで Token を`calls:write`で作成する
![スクリーンショット 2020-11-01 0.49.44のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/84d72d27-fb1a-cf5f-f723-29fdc799f190.png)

`OAuth Tokens & Redirect URLs`の`Install App to Workspace`をクリックする
![スクリーンショット 2020-11-01 0.51.21のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/bd75f78d-68ce-e164-2ccc-d4100c4481e2.png)

連携を許可する
![スクリーンショット 2020-11-01 0.51.35のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/45302d76-763b-0960-0c47-131205c6b21e.png)

生成された Access Token を`Copy`して保存しておく (Zabbix側で使用する)
![スクリーンショット 2020-11-01 0.51.59のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/87660b13-f170-766c-ff97-a6ebc93a64c0.png)

作成した Slack のチャンネルの`詳細`の`・・・ その他`の`アプリを追加する`を開く
![スクリーンショット 2020-11-01 15.10.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/e4095450-c6ea-38cb-8190-bf3fd0aaef77.png)

作成した`zabbix_alerter`を`追加`する
![スクリーンショット 2020-11-01 15.09.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/b56de016-254f-91b0-57ff-b4b7390d07df.png)

追加されると下記のようにチャンネルに表示される
![スクリーンショット 2020-11-01 15.09.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/6ff23181-d141-077c-1f58-38a325c28f0b.png)


### Zabbix設定
`管理` > `メディアタイプ` を開いて `Slack`を開く
![スクリーンショット 2020-11-01 0.53.03のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/d937c7bb-7818-3bf3-a45d-c74080c5c2f7.png)
`bot_token`にSlack API で作成した Access Token を入力して、下のほうにいって`更新`をクリックする
![スクリーンショット 2020-11-01 14.54.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/240dc88c-760e-123d-335c-313f70040585.png)

`管理` > `ユーザー` を開いて `Admin` を開く
![スクリーンショット 2020-11-01 14.56.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/5de58662-f4e0-aa57-8db7-5cad8691566c.png)

`メディア`タブを開いて`追加`をクリック
![スクリーンショット 2020-11-01 14.58.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/c049e634-6558-b089-aadd-9a10b04a3a52.png)

タイプ`Slack`、送信先`#homelab-zabbix`(通知先チャンネル名)を入力して`追加`
![スクリーンショット 2020-11-01 14.59.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/3161f153-7a95-98a5-fbf4-deb0de7ee38b.png)

`更新`
![スクリーンショット 2020-11-01 15.00.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/3c32a529-b52d-0f7f-0358-b545c8fef6cf.png)

グローバルマクロの設定をするため、
`管理` > `一般設定` > `表示設定` > `マクロ` を開く
![スクリーンショット 2020-11-01 15.02.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/93bc1b37-d4da-a881-bd67-75f79871d3c4.png)

マクロ`{$ZABBIX.URL}`,値`http://[dockerサーバのIP]/`を入力して`更新`をクリック
![スクリーンショット 2020-11-01 15.03.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/e287f39d-8407-8727-4e63-7f51806ea7f8.png)

トリガーアクションの設定をするために、
`設定` > `アクション` を開いて`Report problems to Zabbix administrators`をクリックする
![スクリーンショット 2020-11-01 15.20.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/6bcbe055-77d8-0d14-a3c9-482b29e3026d.png)

`有効`にチェックを入れて、`追加`をクリックする
![スクリーンショット 2020-11-01 15.24.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/3cb45c81-f9e7-4094-a266-25b1b88c884d.png)

タイプ`トリガーの深刻度`、オペレータ`以上`、深刻度`情報`を選択して`追加`をクリックする (通知したい深刻度以上を選択しておく)
![スクリーンショット 2020-11-01 15.25.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/e038babf-f1f1-2964-48b9-aad2d6c9e0ff.png)

最後に`更新`をクリックして更新する
![スクリーンショット 2020-11-01 15.26.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/b35d137d-4bd7-751e-cdd5-2225bace3453.png)




## 5. Alert 試験
### Ping 疎通でのアラート試験
登録したホスト機器側で Ping を止めて、Alert 発報試験をする
![スクリーンショット 2020-11-01 15.42.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/fd4b3af5-2396-6999-3449-ce9f40b4b1cd.png)

Slack 通知は下記のようになる
![スクリーンショット 2020-11-01 15.42.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/dfd9f04d-f88b-3871-5ff5-bef83376f463.png)

Ping を再有効にして復旧させると、同じメッセージが書きかわりグリーン・Upとなる
![スクリーンショット 2020-11-01 15.47.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/1c4c96e5-7bda-ca91-6491-4cc2de27d744.png)

`Open in Zabbix`をクリックすると、ブラウザで詳細表示ができる
![スクリーンショット 2020-11-01 15.57.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/5d75e0fb-f94c-29d5-b26e-45eb4b05a845.png)



### SNMP TRAP でのアラート試験
ホスト側で VPN トンネルをダウンさせて SNMPTRAP を出す
![スクリーンショット 2020-11-01 15.50.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/50b8baad-40bd-83fd-edb2-16b957365315.png)
![スクリーンショット 2020-11-01 15.51.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/13719c54-1425-70d2-0f60-6af4b30b33cf.png)

60秒経つと自動で復旧扱いになる(同じメッセージ書きかわり)
![スクリーンショット 2020-11-01 15.52.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/73298a9a-c973-53d7-5ee0-a1018c771d39.png)

VPN トンネルを復旧させるともう一度 SNMPTRAP が出て障害扱いになり再度60秒で復旧扱いとなる
![スクリーンショット 2020-11-01 15.53.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/96629ea4-d8aa-94ad-c241-d6e488f1cfb3.png)
![スクリーンショット 2020-11-01 15.55.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/a97a709b-5ce3-489c-2217-eefab993852d.png)

以上、アラート発報試験完了

## おわりに
Zabbix を公式が公開している docker-compose で簡単に構築して、SNMPTRAP のトリガー設定もした
アラート通知は Slack と連携し、動作確認できた
今後、Zabbix 5.0 を色々触っていきたい

## 参考
GitHub zabbix-docker
https://github.com/zabbix/zabbix-docker
Zabbix 公式： Start with SNMP traps in Zabbix > Create "Template SNMP trap fallback"
https://zabbix.org/wiki/Start_with_SNMP_traps_in_Zabbix#Create_.22Template_SNMP_trap_fallback.22
Zabbix Integration Slack
https://www.zabbix.com/integrations/slack