OS: openSUSE Leap 15.3 in Azure
Zabbix: 6.0 docker image
最近在專案上要執行服務的監控, 討論之後決定使用 Zabbix, 有以下考量點
相對於之前使用 Nagios 有 container 支援, 社群以及改變也相對活躍
想法上使用 container 的方式來執行 Zabbix Server, Client 的部份看專案的需求來看看要使用套件安裝還是 Container 方式
版本的部份使用剛剛正式發行的 Zabbix 6.0
Client 的部份會採取 Active mode 來進行監控, 所以 Server 的部份會開 Port 10051
會實驗與測試 zabbix-proxy with container
這篇文章主要先就 Zabbix Server with container 方式安裝來紀錄
首先先在 Azure 上面建立 VM
openSUSE Leap 15.3
大小: Standard B1ms (1 vcpu,2 GiB 記憶體) ( NT$ 596.76 / 每月, 0.8175 TWD/hr ), Blog 是實驗性質所以沒有開太大, 請依照實際的專案調整.
將 Port 10051 ( Zabbix Active 使用 ) 在 NSG 開放
接下來進行安裝
參考官方文件
Zabbix 的相關資源, 可以參考 https://www.zabbix.com/community
在 openSUSE Leap 15.3 的終端機上
啟用 docker 服務, 設定開機啟動
# systemctl start docker
# systemctl enable docker
建立 zabbix-net 網路
# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
啟動相關 container
# docker run --name postgres-server -t \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="YOUR_PW" \
-e POSTGRES_DB="zabbix" \
--network=zabbix-net \
--restart unless-stopped \
-d postgres:latest
# docker run --name zabbix-snmptraps -t \
-v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \
-v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \
--network=zabbix-net \
-p 162:1162/udp \
--restart unless-stopped \
-d zabbix/zabbix-snmptraps:alpine-6.0-latest
# docker run --name zabbix-server-pgsql -t \
-e DB_SERVER_HOST="postgres-server" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="YOUR_PW" \
-e POSTGRES_DB="zabbix" \
-e ZBX_ENABLE_SNMP_TRAPS="true" \
--network=zabbix-net \
-p 10051:10051 \
--volumes-from zabbix-snmptraps \
--restart unless-stopped \
-d zabbix/zabbix-server-pgsql:alpine-6.0-latest
# docker run --name zabbix-web-nginx-pgsql -t \
-e ZBX_SERVER_HOST="zabbix-server-pgsql" \
-e DB_SERVER_HOST="postgres-server" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="YOUR_PW" \
-e POSTGRES_DB="zabbix" \
-e PHP_TZ="Asia/Taipei" \
--network=zabbix-net \
-p 443:8443 \
-p 80:8080 \
-v /etc/ssl/nginx:/etc/ssl/nginx:ro \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-pgsql:alpine-6.0-latest
確認 container 狀態
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
588e5c4b7e4a zabbix/zabbix-web-nginx-pgsql:alpine-6.0-latest "docker-entrypoint.sh" About a minute ago Up About a minute 0.0.0.0:80->8080/tcp, :::80->8080/tcp, 0.0.0.0:443->8443/tcp, :::443->8443/tcp zabbix-web-nginx-pgsql
0e9c1ce04840 zabbix/zabbix-server-pgsql:alpine-6.0-latest "/sbin/tini -- /usr/…" 5 minutes ago Up 5 minutes 0.0.0.0:10051->10051/tcp, :::10051->10051/tcp zabbix-server-pgsql
837b905ab22a zabbix/zabbix-snmptraps:alpine-6.0-latest "/usr/sbin/snmptrapd…" 9 minutes ago Up 9 minutes 0.0.0.0:162->1162/udp, :::162->1162/udp zabbix-snmptraps
c7fc1c173b10 postgres:latest "docker-entrypoint.s…" 13 minutes ago Up 13 minutes 5432/tcp postgres-server
接下來進行初步設定
開啟網頁 http://YOUR_SERVER_IP
登入 Zabbix
變更 Zabbix Admin 密碼
接下來安裝這台 Zabbix Server 的 Agent
Zabbix Agent 有兩種模式
Active - 主動跟 Server 回報, Client -- > Server Port 10051
Passive - Server 來跟 Client 詢問, Server -- > Client Port 10050
根據官方的說法, 採取 Active 模式是比較好的, 因為 Passive 執行的 process 比較多, 然後當要監控的 client 數量如果太多, 這樣也會增加 Server 的 loading
Zabbix Agent 目前也有兩種
zabbix agent2
zabbix agent
Zabbix Agent 2 安裝 ( Zabbix Server 使用 with Privileged )
# docker run --name test20220220-zabbix-agent \
--network=zabbix-net \
-e ZBX_HOSTNAME="zabbix-server" \
-e ZBX_SERVER_HOST="172.20.240.3" \
--privileged \
--restart unless-stopped \
-d zabbix/zabbix-agent2:alpine-6.0-latest
ZBX_HOSTNAME 為要登記到 host 的主機名稱, 必須與 Configuration -- > Host 上面的 Host name 一致
ZBX_SERVER_HOST 為Server 的 IP 或是 FQDN
使用 --privileged 來啟用 Privileged mode, 有使用 Privileged 的話 Graph 會多了磁碟的相關資訊
因為 預設的 Zabbix Server host 設定無法移除 Interface 設定, 所以這個部份採取 Passive 的方式來進行, 然後是在此主機的 zabbix-net 比較沒有相關顧慮
Zabbix Server 的主機設定更新
在 Zabbix 頁面
Host name 的部份填入剛剛 zabbix agent 2 的 ZBX_HOSTNAME
Interfaces Agent 的 IP 從 127.0.0.1 改為目前 agent IP, 例如 172.20.240.5 ( 透過 #docker network inspect zabbix-net 查詢 Client IP )
放一段時間就會看到正常了
先踏出 Zabbix 的第一步了
~ enjoy it
Reference