基於Docker部署4.4版本的zabbix監控平台
- 2020 年 4 月 10 日
- 筆記
server主機
ip:172.19.204.200
基礎環境
cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
2 dcoker安裝
關閉防火牆:
systemctl stop firewalld systemctl disable firewalld
關閉selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config setenforce 0
安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
添加Docker軟體包源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安裝Docker ce
yum install -y docker-ce
啟動Docker服務並設置開機啟動
systemctl start docker systemctl enable docker
查看版本號
[root@localhost ~]# docker versionClient: Docker Engine - Community Version: 19.03.1 API version: 1.40 Go version: go1.12.5 Git commit: 74b1e89 Built: Thu Jul 25 21:21:07 2019 OS/Arch: linux/amd64 Experimental: falseServer: Docker Engine - Community Engine: Version: 19.03.1 API version: 1.40 (minimum version 1.12) Go version: go1.12.5 Git commit: 74b1e89 Built: Thu Jul 25 21:19:36 2019 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.6 GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb runc: Version: 1.0.0-rc8 GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f docker-init: Version: 0.18.0 GitCommit: fec3683
配置鏡像加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
重啟docker
systemctl restart docker docker安裝完畢!
3 zabbix server端操作
提供兩種不同的安裝方式,兩種方式都可以,自己根據實際情況選擇,也可以跟我文檔一樣搭建兩套,為了方便後期管理yml,個人建議使用3.2小節的安裝方式,單機編排
3.1 採用zabbix官網中的docker安裝章節內容,在官方鏡像庫中拉取鏡像的方式進行安裝
https://www.zabbix.com/documentation/4.0/zh/manual/installation/containers
本文檔主機的本地目錄結構目錄在/home/zabbix下,設置了用於保存容器的數據,其它目錄根據實際應用情況可選,以下操作命令需要連接外網進行鏡像拉取,沒有外網需要離線下載鏡像包
1)啟動一個單獨的資料庫mysql用於保存zabbix數據
docker run --name zabbix-mysql -t -p 3306:3306 -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix" -e MYSQL_ROOT_PASSWORD="zabbix" -v /home/zabbix/data:/var/lib/mysql -d mysql:5.7 --character-set-server=utf8 --collation-server=utf8_bin
定義了資料庫名zabbix,資料庫用戶zabbix,密碼zabbix,在本地目錄/home/zabbix/data中持久化保存mysql容器運行中的數據,確保容器退出運行後,數據不會丟失,最後兩條是定義了資料庫的字符集為utf8,解決了mysql資料庫保存中文的問題;
2)啟動zabbix server服務,
啟動zabbix server服務並關聯這個服務到上面已經啟動的mysql資料庫實例上,確保zabbix的數據可以保存到mysql資料庫中,掛載在本地目錄中的還有其它一些內容,根據生產環境實際情況靈活決定是否掛載,如果掛載可以通過容器直接載入本地目錄中的腳本或認證資訊,鏡像版本使用的centos版本,便於後續能夠使用python腳本,預裝了py環境
- 準備zabbix server的配置文件
因為一會創建zabbix server的容器的時候,會把使用bing Mounting的方式把配置文件目錄掛載到宿主機上,為了方便後修改和優化,因此需要提前準備配置文件
[root@node2 opt]# mkdir -p /home/zabbix/zabbixconfig [root@node2 opt]# wget https://raw.githubusercontent.com/sunsharing-note/zabbix/master/zabbix_server.conf [root@node2 opt]# mv zabbix_server.conf /home/zabbix/zabbixconfig/
- 啟動zabbix server容器
docker run --name zabbix-server-mysql -t -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix" -e MYSQL_ROOT_PASSWORD="zabbix" --link zabbix-mysql:mysql -v /home/zabbix/zabbixconfig:/etc/zabbix -v /home/zabbix/alertscripts:/usr/lib/zabbix/alertscripts -v /home/zabbix/externalscripts:/usr/lib/zabbix/externalscripts -v /home/zabbix/modules:/var/lib/zabbix/modules -v /home/zabbix/enc:/var/lib/zabbix/enc -v /home/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys -v /home/zabbix/ssl/certs:/var/lib/zabbix/ssl/certs -v /home/zabbix/ssl/keys:/var/lib/zabbix/ssl/keys -v /home/zabbix/ssl/ssl_ca:/var/lib/zabbix/ssl/ssl_ca -v /home/zabbix/snmptraps:/var/lib/zabbix/snmptraps -v /home/zabbix/export:/var/lib/zabbix/export -v /home/zabbix/mibs:/var/lib/zabbix/mibs -p 10051:10051 -d zabbix/zabbix-server-mysql:centos-latest
掛載說明:
/usr/lib/zabbix/alertscripts
該卷用於保存自定義警報腳本,它是AlertScriptsPath參數zabbix_server.conf
/usr/lib/zabbix/externalscripts
外部檢查(項目類型)使用該卷,它是ExternalScripts參數zabbix_server.conf
/etc/zabbix
該卷用於保存zabbix-server端的配置文件
/var/lib/zabbix/modules
該卷允許載入其他模組並使用LoadModule功能擴展Zabbix伺服器。
/var/lib/zabbix/enc
該卷用於存儲TLS相關文件。這些文件的名稱使用規定ZBX_TLSCAFILE,ZBX_TLSCRLFILE,ZBX_TLSKEY_FILE和ZBX_TLSPSKFILE變數。
/var/lib/zabbix/ssh_keys
該卷用作SSH檢查和操作的公鑰和私鑰的位置。它是SSHKeyLocation參數zabbix_server.conf。
/var/lib/zabbix/ssl/certs
該卷用作客戶端身份驗證的SSL客戶端證書文件的位置。它是SSLCertLocation參數zabbix_server.conf。
/var/lib/zabbix/ssl/keys
該卷用作客戶端身份驗證的SSL私鑰文件的位置。它是SSLKeyLocation參數zabbix_server.conf。
/var/lib/zabbix/ssl/ssl_ca
該卷用作SSL伺服器證書驗證的證書頒發機構(CA)文件的位置。它是SSLCALocation參數zabbix_server.conf。
/var/lib/zabbix/snmptraps
該卷用作snmptraps.log文件的位置。它可以由zabbix-snmptraps容器共享,並volumes_from在創建Zabbix伺服器的新實例時使用Docker選項繼承。
可以使用共享卷和交換ZBX_ENABLE_SNMP_TRAPS環境變數來啟用SNMP陷阱處理功能true。
/var/lib/zabbix/mibs
該卷允許添加新的MIB文件。它不支援子目錄,必須放置所有MIB /var/lib/zabbix/mibs
備註:通常會用到的是存放腳本的路徑和配置文件的路徑
3)啟動zabbix前端web介面實例,將web介面實例與前面的mysql資料庫服務實例
docker run --rm --name zabbix-web-nginx-mysql -t -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix" -e MYSQL_ROOT_PASSWORD="zabbix" -e PHP_TZ="Asia/Shanghai" --link zabbix-mysql:mysql --link zabbix-server-mysql:zabbix-server -p 8080:80 -d zabbix/zabbix-web-nginx-mysql:latest
–link zabbix-mysql:mysql 連接資料庫實例,zabbix-mysql必須要與第一步的–name zabbix-mysql完全一致
–link zabbix-server-mysql:zabbix-server 連接zabbix伺服器實例,zabbix-server-mysql必須要與第二步的–name zabbix-server-mysql完全一致
DB_SERVER_HOST變數的值要與第二步指定的-e DB_SERVER_HOST="mysql-server"一致
4)檢查安裝的三個容器是否都正常啟動
以下狀態就是三個容器全部正常啟動
如果有沒有啟動可以使用查看所有容器列表
[root@k8s-node02 ]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 806bb4e343eb zabbix/zabbix-web-nginx-mysql:latest "docker-entrypoint.sh" 3 seconds ago Up 2 seconds 443/tcp, 0.0.0.0:8080->80/tcp zabbix-web-nginx-mysql 5019b0a1270b zabbix/zabbix-server-mysql:centos-latest "/sbin/tini -- /usr/…" 52 seconds ago Up 51 seconds 0.0.0.0:10051->10051/tcp zabbix-server-mysql 10b96eba5138 mysql:5.7 "docker-entrypoint.s…" 9 minutes ago Up 9 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-server
找到未能啟動的容器ID,然後查看日誌 docker logs
5)宿主機上,使用正常的zabbix-agent的安裝,不使用容器安裝,不然有些數據會採集成容器中的數據
[root@node2 opt]# rpm -ivh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-agent-4.4.5-1.el7.x86_64.rpm [root@node2 opt]# yum install zabbix-agent -y #vim /etc/zabbix/zabbix_agentd.conf #修改配置文件 Server=172.17.0.3 ServerActive=172.17.0.3:10050 Hostname=Zabbix server #systemctl restart zabbix-agent #systemctl enable zabbix-agent
注意:因為剛才的zabbix server採用的是默認網橋模式,如果要對宿主機進行監控,請編輯宿主機的zabbix_agentd.conf,將Server地址,默認127.0.0.1,修改為docker-server容器地址,否則不通;如果是對其他主機的監控則使用docker-zabbix-server宿主機的IP
6)驗證登陸主機8080埠,查看是否能正常登陸
使用安裝zabbix server的主機ip加埠8080登錄,帳號Admin,密碼zabbix,默認是英文,白色背景,可以在右上角的用戶按鈕選項中調整語言和背景顏色

7) 添加zabbix server主機監控

image.png
3.2 使用docker-compose進行安裝
1)安裝docker-compose
# curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose # chmod +x /usr/local/bin/docker-compose # docker-compose --version docker-compose version 1.23.1, build b02f1306
2)準備zabbix server配置文件
因為一會創建zabbix server的容器的時候,會把配置文件目錄掛載到宿主機上,為了方便後修改和優化,因此需要提前準備配置文件
[root@k8s-node02 ~]# mkdir /opt/docker-zabbix-server [root@k8s-node02 ~]# cd /opt/docker-zabbix-server/ [root@k8s-node02 docker-zabbix-server]# mkdir -p zabbix/zabbixconfig/ [root@k8s-node02 docker-zabbix-server]# wget https://raw.githubusercontent.com/sunsharing-note/zabbix/master/zabbix_server.conf [root@k8s-node02 docker-zabbix-server]# mv zabbix_server.conf zabbix/zabbixconfig/
2)編寫yml編排文件
yml中的埠,因為我剛才已經創建了一套zabbix,宿主機上已經佔用埠了,因此我這裡的宿主機埠都進行了修改
[root@k8s-node02 docker-zabbix-server]# vim docker-compose.yml version: '3' services: zabbix-mysql: image: mariadb:latest ports: - "3309:3306" volumes: - ./zabbix/data/mysqllib:/var/lib/mysql environment: - MYSQL_USER=zabbix - MYSQL_DATABASE=zabbix - MYSQL_PASSWORD=zabbix - MYSQL_ROOT_PASSWORD=123321 - character-set-server=utf8 - collation-server=utf8_bin restart: always zabbix-server: image: zabbix/zabbix-server-mysql:centos-latest restart: always ports: - "10052:10051" environment: - DB_SERVER_HOST=zabbix-mysql - MYSQL_USER=zabbix - MYSQL_DATABASE=zabbix - MYSQL_PASSWORD=zabbix - DB_SERVER_ROOT_USER=root - DB_SERVER_ROOT_PASS=123321 - TZ='Asia/Shanghai' volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - ./zabbix/zabbixconfig/:/etc/zabbix/ - ./zabbix/alertscripts:/usr/lib/zabbix/alertscripts - ./zabbix/externalscripts:/usr/lib/zabbix/externalscripts - ./zabbix/modules:/var/lib/zabbix/modules - ./zabbix/enc:/var/lib/zabbix/enc - ./zabbix/ssh_keys:/var/lib/zabbix/ssh_keys - ./zabbix/ssl/certs:/var/lib/zabbix/ssl/certs - ./zabbix/ssl/keys:/var/lib/zabbix/ssl/keys - ./zabbix/ssl/ssl_ca:/var/lib/zabbix/ssl/ssl_ca - ./zabbix/snmptraps:/var/lib/zabbix/snmptraps - ./zabbix/mibs:/var/lib/zabbix/mibs depends_on: - zabbix-mysql zabbix-web-nginx: image: zabbix/zabbix-web-nginx-mysql:latest restart: always ports: - "8088:80" environment: - DB_SERVER_HOST=zabbix-mysql - MYSQL_DATABASE=zabbix - MYSQL_USER=zabbix - MYSQL_PASSWORD=zabbix - MYSQL_ROOT_PASSWORD=123321 - ZBX_SERVER_HOST=zabbix-server - PHP_TZ="Asia/Shanghai" - TZ='Asia/Shanghai' volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro links: - zabbix-mysql - zabbix-server zabbix-agent: image: zabbix/zabbix-agent:latest environment: - ZBX_HOSTNAME=Zabbix server - ZBX_SERVER_HOST=zabbix-server - ZBX_SERVER_PORT=10051 - TZ='Asia/Shanghai' ports: - "10053:10050" restart: always privileged: true
對於宿主機上的監控,個人建議使用yum或者二進位agent,可以把docker-compose中的zabbix-agent去掉,然後再docker-compose up -d
3)載入yml編排文件(需要等待一些時間,因為需要下載鏡像)
[root@k8s-node02 docker-zabbix-server]# docker-compose -f docker-compose.yml up -d
4)載入完之後查看容器組是否運行
[root@node2 docker-zabbix-server]# docker-compose ps Name Command State Ports ---------------------------------------------------------------------------------------------------------------- docker-zabbix-server_zabbix-agent_1 /sbin/tini -- /usr/bin/doc ... Up 0.0.0.0:10053->10050/tcp docker-zabbix-server_zabbix-mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3309->3306/tcp docker-zabbix-server_zabbix-server_1 /sbin/tini -- /usr/bin/doc ... Up 0.0.0.0:10052->10051/tcp docker-zabbix-server_zabbix-web-nginx_1 docker-entrypoint.sh Up 443/tcp, 0.0.0.0:8088->80/tcp
5)訪問web測試

image.png

image.png
4 zabbix agent端操作
1 如果該主機安裝了docker就可以,一樣可以使用docker-compose,編寫編排yml文件安裝,根據主機ip地址修改第8行ip
# mkdir /opt/zabbix-agent # cd /opt/zabbix-agent # vim docerk-compose.yml version: '3' services: zabbix-agent: image: zabbix/zabbix-agent:latest container_name: zabbix-agent environment: - ZBX_HOSTNAME=172.19.204.201 - ZBX_SERVER_HOST=172.19.204.200 - ZBX_SERVER_PORT=10051 - TZ='Asia/Shanghai' network_mode: bridge ports: - "10050:10050" restart: always privileged: true
載入編排文件
docker-compose -f docker-compose.yml up -d
查看容器是否啟動成功
docker-compose ps
如果主機沒有安裝docker,則使用rpm包進行安裝即可,見zabbix-server主機的agent安裝步驟
5 web端操作
驗證登陸主機8080埠,查看是否能正常登陸,使用安裝zabbix server的主機ip加埠8080登錄,帳號admin,密碼zabbix,默認是英文,白色背景,可以在右上角的用戶按鈕選項中調整語言和背景顏色,在配置選項中添加剛才安裝的agent的主機