基於Docker部署4.4版本的zabbix監控平台

  • 2020 年 4 月 10 日
  • 筆記

1 準備工作

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的主機