はじめに
自宅サーバ監視を Zabbix でする際に、公式の docker-compose を使ってコンテナで構築した
ネットワーク機器もあるので SNMPTRAP 受信時にアラート通知も出せるようにする
Alert は Slack 通知にしたのでその際の構築メモも記載する
(情報は 2020.11.01 時点での構築の際の情報)
実施内容
- docker-compose での Zabbix 構築
- zabbix 設定
- 監視設定
- zabbix slack 連携
- 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
git clone https://github.com/zabbix/zabbix-docker.git -b 5.0.5
今回は、centos イメージで mysql を DB として使用するバージョンを使用ので、
下記の yaml を docker-compose.yaml
にしてデフォルトにする
cd zabbix-docker/
cp -p docker-compose_v3_centos_mysql_latest.yaml docker-compose.yaml
下記でデーモン起動する
docker-compose up -d
下記で起動状況の確認。一番上は Exit 0
で問題ない
# 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
でログイン
ログインすると下記の画面になる
2. zabbix 設定
使い始めの基本的な設定として、ユーザ設定と zabbix server の監視有効化をする
2.1. ユーザ設定
2.2. zabbix-server
下記画面のように、DNS名zabbix-agent
、接続方法DNS
に変更して更新
をクリックする
少し経つとエージェント通信ができるようになっていることを確認できる
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 でとりあえず復旧とする
下記は例でテンプレート名Template Net Network Generic Device SNMP plus SNMPTRAP Trigger
として、グループはTemplates/Network devices
として入力
テンプレートとのリンク
タブに移動して、新規テンプレートをリンクでTemplate Net Network Generic Device SNMP
を選択して追加
をクリックしてテンプレートを作成
作成したテンプレートに入って、トリガー
タブを指定して右上のトリガーの作成
をクリックしてトリガー追加作成する
トリガーは下記内容で作成する (深刻度はてきとう)
- 名前
- SNMP trap received from {HOST.NAME}
- 深刻度
- 警告
- 条件式
- {Template Net Network Generic Device SNMP plus SNMPTRAP Trigger:snmptrap.fallback.nodata(60)}=0
3.2. ホスト登録
ここで Network 機器の SNMP 監視設定でホスト登録を実施する (発報試験にも使用する)
設定
> ホスト
> ホストの作成
で作成する
- ホスト名
- 設定するホスト名
- グループ
- Templates
- インターフェース
- SNMP
- ポーリング先の IP アドレス
- SNMPコミュニティ
- 機器設定のコミュニティ名を入れる
- SNMP
テンプレート
タブを開いて作成したテンプレートを選択して追加
する
SNMP ポーリングがうまく行けばSNMP
箇所がグリーンになる
4. zabbix slack 連携
Slack には Bot での連携となる
Slack Bots 作成
slack api を開いてYour Apps
を開く
https://api.slack.com/
App Name: zabbix_alerter
Development Slack WorkspaceHomeLab
(連携先ワークスペース)を選択してCreate App
をクリックする
Features
> OAuth & Permissions
を開き、
Scopes
のなかで Token をcalls:write
で作成する
OAuth Tokens & Redirect URLs
のInstall App to Workspace
をクリックする
生成された Access Token をCopy
して保存しておく (Zabbix側で使用する)
作成した Slack のチャンネルの詳細
の・・・ その他
のアプリを追加する
を開く
Zabbix設定
管理
> メディアタイプ
を開いて Slack
を開く
bot_token
にSlack API で作成した Access Token を入力して、下のほうにいって更新
をクリックする
タイプSlack
、送信先#homelab-zabbix
(通知先チャンネル名)を入力して追加
グローバルマクロの設定をするため、
管理
> 一般設定
> 表示設定
> マクロ
を開く
マクロ{$ZABBIX.URL}
,値http://[dockerサーバのIP]/
を入力して更新
をクリック
トリガーアクションの設定をするために、
設定
> アクション
を開いてReport problems to Zabbix administrators
をクリックする
タイプトリガーの深刻度
、オペレータ以上
、深刻度情報
を選択して追加
をクリックする (通知したい深刻度以上を選択しておく)
5. Alert 試験
Ping 疎通でのアラート試験
登録したホスト機器側で Ping を止めて、Alert 発報試験をする
Ping を再有効にして復旧させると、同じメッセージが書きかわりグリーン・Upとなる
Open in Zabbix
をクリックすると、ブラウザで詳細表示ができる
SNMP TRAP でのアラート試験
ホスト側で VPN トンネルをダウンさせて SNMPTRAP を出す
60秒経つと自動で復旧扱いになる(同じメッセージ書きかわり)
VPN トンネルを復旧させるともう一度 SNMPTRAP が出て障害扱いになり再度60秒で復旧扱いとなる
以上、アラート発報試験完了
おわりに
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