星期日, 2月 20, 2022

Zabbix Server 6.0 with container in Azure 安裝小記

Zabbix Server 6.0 with container in Azure 安裝小記


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

  • 台灣有 Zabbix 的 Telegram 群組 @zabbix_tw 也可以去那邊討論


在 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 請把 YOUR_PW 換成自己要設定的密碼

  • 我這邊採用的 DB 是 PostgreSQL 配合專案狀況



確認 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



接下來進行初步設定

  • 在該 VM 的 NSG 設定 Port 80 可以存取 ( 因為是實驗所以走 HTTP, 實務上應該要走 HTTPS ), 這個部份就看自己的設定規劃


開啟網頁 http://YOUR_SERVER_IP 



登入 Zabbix

  • 預設帳號 Admin 

  • 密碼 zabbix


變更 Zabbix Admin 密碼

  • User settings -- > Profile -- > Change password


接下來安裝這台 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

    • 使用 go 語言, 然後有對 container 的監控支援

  • 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

    • 這個部份我用  #docker network inspect zabbix-net 查詢 Server IP

  • 使用 --privileged 來啟用 Privileged mode, 有使用 Privileged 的話 Graph 會多了磁碟的相關資訊

  • 因為 預設的 Zabbix Server host 設定無法移除 Interface 設定, 所以這個部份採取 Passive 的方式來進行, 然後是在此主機的 zabbix-net 比較沒有相關顧慮


Zabbix Server 的主機設定更新

在 Zabbix 頁面

  • Configuration -- > Hosts 


  • 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





沒有留言: