0


docker compose方式部署Zabbix 7.0 LTS

docker compose方式部署 Zabbix 7.0 LTS

Zabbix 由几个主要的功能组件组成
  • zabbix-server 是 Zabbix agent 向其报告可用性、系统完整性信息和统计信息的核心组件。
  • zabbix-agent 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。
  • zabbix-web 提供基于 web 的界面(Apache 或 Nginx)。
  • Zabbix-Web-Service 在Zabbix5.4版中首次出现,基于Go编写。主要作用是定期发送巡检报告到指定邮件账户。
  • zabbix-java-gateway
  • zabbix-snmptraps
  • zabbix-proxy

可以根据不同组合,搭配不同的docker镜像,如下

Zabbix server 收集数据存储(可选MySQL、PostgreSQL等)

  • MySQL 数据库支持的 Zabbix server - zabbix/zabbix-server-mysql
  • PostgreSQL 数据库支持的 Zabbix server - zabbix/zabbix-server-pgsql

Zabbix web-interface

  • 基于 Apache2 Web 服务器以及支持 MySQL 数据库的 Zabbix web 接口 - zabbix/zabbix-web-apache-mysql
  • 基于 Apache2 Web 服务器以及支持 PostgreSQL 数据库的 Zabbix web 接口 - zabbix/zabbix-web-apache-pgsql
  • 基于 Nginx Web 服务器以及支持 MySQL 数据库的 Zabbix web 接口 - zabbix/zabbix-web-nginx-mysql
  • 基于 Nginx Web 服务器以及支持 PostgreSQL 数据库的 Zabbix web 接口 - - zabbix/zabbix-web-nginx-pgsql
安装环境版本

单机安装以下服务。不使用docker安装zabbix agent,安装在容器中的agent监控的是容器的状态,而不是宿主机的状态。

OS: Rocky Linux 9.2 x86_64
docker compose组合: zabbix 7.0 LTS + MySQL 8.0 + Nginx
docker宿主机IP: 10.10.88.2 (这里选择宿主机安装zabbix agent2)

1、前期准备工作

省略docker安装步骤。

2、zabbix docker compose 配置文件

从 Zabbix github官网 获取7.0 LTS 版本 docker compose.yaml
Zabbix 为 Docker 提供了定义和运行复杂 Zabbix 组件的 compose 文件。这些 compose 文件可以在 Zabbix docker 官方镜像仓库 中找到。

官方提供的 docker compose 文件很多,都是根据组件搭配命名

  • v3 为 docker compose 版本,具体对应关系在这里查看https://docs.docker.com/compose/compose-file/compose-versioning/
  • 基础镜像类型,有 alpine/ubuntu/Oracle linux 可选。
  • MySQL 为 zabbix server 所使用的数据库类型,目前有 MySQL/PostgreSQL 二种。
  • latest 表示为使用官方的最新镜像,local 是下载本地进行 build 镜像。

这里使用基于 docker-compose_v3_alpine_mysql_latest.yaml 模板,调整适合公司使用。

基于alpine Linux镜像,Zabbix server 后端使用MySQL数据库, Zabbix web使用Nginx展示

也可以通过git方式获取基于 zabbix7.0 LTS配置(可选,非必须)

  1. git clone https://github.com/zabbix/zabbix-docker.git
  2. 如果之前已经clone过了,重现拉取服务器最新配置,如:
  3. git pull
  4. git切换分支为7.0,也就是长期支持版本(LTS
  5. git checkout 7.0[root@VM8802 zabbix-docker]# ll -tha
  6. 已省略部分……
  7. -rw-r--r-- 1 root root 2.8K Jun 611:20 .env
  8. drwxr-xr-x 3 root root 4.0K Jun 611:20 env_vars
  9. -rw-r--r-- 1 root root 44K Jun 611:20 kubernetes.yaml
  10. -rw-r--r-- 1 root root 338 Jun 611:20 compose_additional_components.yaml
  11. -rw-r--r-- 1 root root 2.6K Jun 611:20 compose_databases.yaml
  12. lrwxrwxrwx 1 root root 42 Jun 611:20 compose.yaml -> docker-compose_v3_alpine_mysql_latest.yaml
  13. -rw-r--r-- 1 root root 14K Jun 611:20 compose_zabbix_components.yaml
  14. -rw-r--r-- 1 root root 4.1K Jun 611:20 docker-compose_v3_ubuntu_mysql_latest.yaml
  15. -rw-r--r-- 1 root root 7.4K Jun 611:20 docker-compose_v3_ubuntu_mysql_local.yaml
  16. -rw-r--r-- 1 root root 4.1K Jun 611:20 docker-compose_v3_ubuntu_pgsql_latest.yaml
  17. -rw-r--r-- 1 root root 7.7K Jun 611:20 docker-compose_v3_ubuntu_pgsql_local.yaml
  18. -rw-r--r-- 1 root root 4.4K Jun 611:20 docker-compose_v3_alpine_mysql_latest.yaml
  19. -rw-r--r-- 1 root root 7.6K Jun 611:20 docker-compose_v3_alpine_mysql_local.yaml
  20. -rw-r--r-- 1 root root 4.4K Jun 611:20 docker-compose_v3_alpine_pgsql_latest.yaml
  21. -rw-r--r-- 1 root root 8.0K Jun 611:20 docker-compose_v3_alpine_pgsql_local.yaml
  22. -rw-r--r-- 1 root root 4.3K Jun 611:20 docker-compose_v3_ol_mysql_latest.yaml
  23. -rw-r--r-- 1 root root 7.4K Jun 611:20 docker-compose_v3_ol_mysql_local.yaml
  24. -rw-r--r-- 1 root root 4.3K Jun 611:20 docker-compose_v3_ol_pgsql_latest.yaml
  25. -rw-r--r-- 1 root root 7.7K Jun 611:20 docker-compose_v3_ol_pgsql_local.yaml
  26. 可以看到当前 compose.yaml 是链接指向 docker-compose_v3_alpine_mysql_latest.yaml
  27. # docker compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d
2.1 docker compose配置

官网提供的docker compose文件把所有组件都写上了。可根据自己需求,删除一些不需要的组件配置部分。

当前配置如下组件
zabbix-server
zabbix-server-mysql
zabbix-web-nginx-mysql
zabbix-java-gateway
zabbix-snmptraps

配置文件列表
  1. # tree -a /data/zabbix/
  2. /data/zabbix/
  3. ├── compose.yaml
  4. └── zbx_env
  5. ├── .env_db_mysql
  6. ├── .env_java
  7. ├── .env_srv
  8. └── .env_web

官网默认配置了两个网段,其中zabbix-server和zabbix-java-gateway在不同的网段,导致互通有些干扰,这里就仅保留一个网段配置。

  1. compose.yaml

完整配置(基于

  1. docker-compose_v3_alpine_mysql_latest.yaml

修改)

  1. services:zabbix-server:container_name: zabbix-server
  2. image: zabbix/zabbix-server-mysql:alpine-7.0-latest
  3. ports:- 10051:10051restart:"unless-stopped"attach:truevolumes:- /etc/localtime:/etc/localtime:ro
  4. - /etc/timezone:/etc/timezone:ro
  5. - /data/zabbix/zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro
  6. - /data/zabbix/zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
  7. - /data/zabbix/zbx_env/var/lib/zabbix/dbscripts:/var/lib/zabbix/dbscripts:ro
  8. - /data/zabbix/zbx_env/var/lib/zabbix/export:/var/lib/zabbix/export:rw
  9. - /data/zabbix/zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
  10. - /data/zabbix/zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
  11. - /data/zabbix/zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
  12. - /data/zabbix/zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro
  13. - snmptraps:/var/lib/zabbix/snmptraps:ro
  14. tmpfs: /tmp
  15. ulimits:nproc:65535nofile:soft:20000hard:40000deploy:resources:limits:cpus:'0.70'memory: 1G
  16. reservations:cpus:'0.5'memory: 512M
  17. env_file:- /data/zabbix/zbx_env/.env_db_mysql
  18. - /data/zabbix/zbx_env/.env_srv
  19. depends_on:- mysql-server
  20. networks:zbx_net:# 固定容器zabbix server ip (可选,非必须)ipv4_address: 172.16.238.10
  21. aliases:- zabbix-server
  22. - zabbix-server-mysql
  23. stop_grace_period: 30s
  24. sysctls:- net.ipv4.ip_local_port_range=1024 64999
  25. - net.ipv4.conf.all.accept_redirects=0
  26. - net.ipv4.conf.all.secure_redirects=0
  27. - net.ipv4.conf.all.send_redirects=0
  28. # - net.ipv4.ping_group_range=0 1995 labels:com.zabbix.company:"Zabbix LLC"com.zabbix.component:"zabbix-server"zabbix-web-nginx-mysql:container_name: zabbix-web-nginx
  29. image: zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest
  30. ports:- 80:8080- 443:8443restart:"unless-stopped"attach:falsevolumes:- /etc/localtime:/etc/localtime:ro
  31. - /etc/timezone:/etc/timezone:ro
  32. - /data/zabbix/zbx_env/etc/ssl/nginx:/etc/ssl/nginx:ro
  33. - /data/zabbix/zbx_env/usr/share/zabbix/modules/:/usr/share/zabbix/modules/:ro
  34. tmpfs: /tmp
  35. deploy:resources:limits:cpus:'0.70'memory: 1024M
  36. reservations:cpus:'0.50'memory: 256M
  37. env_file:- /data/zabbix/zbx_env/.env_db_mysql
  38. - /data/zabbix/zbx_env/.env_web
  39. depends_on:- mysql-server
  40. healthcheck:test:["CMD","curl","-f","http://localhost:8080/ping"]interval: 10s
  41. timeout: 5s
  42. retries:3start_period: 30s
  43. networks:zbx_net:aliases:- zabbix-web-nginx-mysql
  44. stop_grace_period: 10s
  45. sysctls:- net.core.somaxconn=65535
  46. labels:com.zabbix.description:"Zabbix frontend on Nginx web-server with MySQL database support"com.zabbix.company:"Zabbix LLC"com.zabbix.component:"zabbix-frontend"com.zabbix.webserver:"nginx"com.zabbix.dbtype:"mysql"com.zabbix.os:"Alpine"zabbix-java-gateway:image: zabbix/zabbix-java-gateway:alpine-7.0-latest
  47. ports:- 10052:10052deploy:resources:limits:cpus:'0.5'memory: 512M
  48. reservations:cpus:'0.25'memory: 256M
  49. env_file:- /data/zabbix/zbx_env/.env_java
  50. networks:zbx_net:aliases:- zabbix-java-gateway
  51. stop_grace_period: 5s
  52. labels:com.zabbix.description:"Zabbix Java Gateway"com.zabbix.company:"Zabbix LLC"com.zabbix.component:"java-gateway"com.zabbix.os:"Alpine"zabbix-snmptraps:image: zabbix/zabbix-snmptraps:alpine-7.0-latest
  53. profiles:- full
  54. - all
  55. ports:- 162:1162/udp
  56. volumes:- snmptraps:/var/lib/zabbix/snmptraps:rw
  57. deploy:resources:limits:cpus:'0.5'memory: 256M
  58. reservations:cpus:'0.25'memory: 128M
  59. networks:zbx_net:aliases:- zabbix-snmptraps
  60. stop_grace_period: 5s
  61. labels:com.zabbix.description:"Zabbix snmptraps"com.zabbix.company:"Zabbix LLC"com.zabbix.component:"snmptraps"com.zabbix.os:"Alpine"mysql-server:container_name: zabbix-mysql
  62. image: mysql:8.0-oracle
  63. security_opt:- seccomp:unconfined
  64. command:- mysqld
  65. ---skip-mysqlx
  66. ---character-set-server=utf8mb4
  67. ---collation-server=utf8mb4_bin
  68. # Only during upgrade from versions prior 6.4 and new installations (schema deployment)#- --log_bin_trust_function_creators=1---log_timestamps=SYSTEM
  69. ---binlog_expire_logs_seconds=3600
  70. ---innodb_buffer_pool_size=2G
  71. ---max_connections=500
  72. #- --wait_timeout=1200#- --interactive_timeout=1200restart:"unless-stopped"attach:falsevolumes:- /etc/localtime:/etc/localtime:ro
  73. - /data/zabbix/zbx_env/var/lib/mysql:/var/lib/mysql:rw
  74. - /data/backup/mysql:/data/backup/mysql:rw
  75. env_file:- /data/zabbix/zbx_env/.env_db_mysql
  76. stop_grace_period: 1m
  77. networks:zbx_net:aliases:- mysql-server
  78. - zabbix-database
  79. - mysql-database
  80. labels:com.zabbix.description:"Zabbix server with MySQL database support"com.zabbix.dbtype:"mysql"db_data_mysql:image: busybox
  81. volumes:- /data/zabbix/zbx_env/var/lib/mysql:/var/lib/mysql:rw
  82. networks:zbx_net:driver: bridge
  83. driver_opts:com.docker.network.enable_ipv6:"false"ipam:driver: default
  84. config:-subnet: 172.16.238.0/24
  85. volumes:snmptraps:
2.2 环境变量文件

在 compose 文件中找到每个组件的默认环境变量文件,这些环境变量文件名类似

  1. .env_<type of component>

  1. 配置mysql:.env_db_mysql
  1. # DB_SERVER_HOST=mysql-server# DB_SERVER_PORT=3306# DB_SERVER_SOCKET=/var/run/mysqld/mysqld.sock# MYSQL_USER_FILE=/run/secrets/MYSQL_USER# MYSQL_PASSWORD_FILE=/run/secrets/MYSQL_PASSWORDMYSQL_USER=zabbix
  2. MYSQL_PASSWORD=yourzabbix
  3. MYSQL_ROOT_PASSWORD=yourmysql
  4. # MYSQL_ROOT_PASSWORD_FILE=/run/secrets/MYSQL_ROOT_PASSWORD# MYSQL_ALLOW_EMPTY_PASSWORD=false# MYSQL_DATABASE=zabbixMYSQL_DATABASE=zabbix
  1. 配置zabbix-java-gateway:.env_java
  1. ZBX_START_POLLERS=5
  2. ZBX_TIMEOUT=3
  1. 配置Zabbix server:.env_srv
  1. ZBX_STARTPOLLERS=7
  2. ZBX_STARTPOLLERSUNREACHABLE=7
  3. ZBX_STARTTRAPPERS=20
  4. ZBX_STARTPINGERS=7
  5. ZBX_STARTDISCOVERERS=7
  6. ZBX_JAVAGATEWAY_ENABLE=true
  7. ZBX_JAVAGATEWAY=zabbix-java-gateway
  8. ZBX_JAVAGATEWAYPORT=10052
  9. ZBX_STARTJAVAPOLLERS=5
  10. ZBX_ENABLE_SNMP_TRAPS=true
  11. ZBX_CACHESIZE=1024M
  12. ZBX_HISTORYCACHESIZE=128M
  13. ZBX_TIMEOUT=15
  1. 配置Nginx:.env_web
  1. ZBX_SERVER_HOST=zabbix-server
  2. ZBX_SERVER_NAME=Your Corp. IT
  3. PHP_TZ=Asia/Shanghai

docker compose 配置说明

  1. 修改时区(web页面显示中文) 修改 .env_web 配置相关项 PHP_TZ=Asia/Shanghai
  2. 解决zebbix web图片中文显示乱码(zabbix7.0下不指定也可以正常显示中文)
3、部署服务
  1. cd /data/zabbix/
  2. docker compose up -d

浏览 zabbix web界面

启动之后即可使用

  1. <http://ip>

直接访问 zabbix web界面
默认用户名:Admin ,密码:zabbix (注意区分大小写)

配置已经设置了持久化数据目录映射到本地。

4、独立安装Zabbix agent2

安装Zabbix仓库(这里选择国内的腾讯源),然后安装Zabbix agent2

  1. # rpm -Uvh https://mirrors.tencent.com/zabbix/zabbix/7.0/rhel/9/x86_64/zabbix-release-latest.el9.noarch.rpm# dnf clean all# dnf install zabbix-agent2

如果是 Rocky Linux 9.x 版本,则需要注意:
EL9 的 EPEL 存储库也提供了 Zabbix 包。 如果同时安装了官方 Zabbix 存储库和 EPEL 存储库,那么 EPEL 中的 Zabbix 包必须通过在 /etc/yum.repos.d/ 下的 EPEL 存储库配置文件中添加以下子句来排除,更详细说明可访问官网安装文档。

  1. [epel]
  2. ...
  3. excludepkgs=zabbix*
  4. 然后安装即可
  5. rpm -ivh https://mirrors.tencent.com/zabbix/zabbix/7.0/rhel/9/x86_64/zabbix-release-7.0-2.el9.noarch.rpm
  6. yum install zabbix-agent2

修改

  1. /etc/zabbix/zabbix_agent2.conf

,指定 zabbix server 地址,如:

  1. Server=127.0.0.1,172.16.238.10 # 172.16.238.10 为zabbix server容器IPServerActive=127.0.0.1,172.16.238.10
  2. Hostname=10.10.88.2 # 这里为Linux主机IP

查看zabbix server容器(容器名为

  1. zabbix-zabbix-server-1

)IP方法

  1. # docker inspect zabbix-server |grep IPAddress |tail -1 |awk '{print $2}' |tr '"' " " |tr ',' ' ' 172.16.238.10
  2. 进入zabbix server容器
  3. # docker exec -it zabbix-server bash
  4. 测试访问 zabbix agent2 的端口是否可以正常连通(端口不通,提示:wget: can't connect to remote host(10.10.88.2): Connection refused)
  5. 78d0d09dfa31:/var/lib/zabbix$ wget10.10.88.2:10050
  6. Connecting to 10.10.88.2:10050 (10.10.88.2:10050)
  7. wget: error getting response

如果zabbix-server 服务器ip地址有更改,这里配置也需要修改,然后重启agent2服务

  1. systemctl restart zabbix-agent2.service
5、设置允许docker容器访问宿主机

默认情况下宿主机内docker容器是禁止访问宿主机IP

防火墙firewalld开放zabbix server容器IP段(172.16.238.0/24)访问zabbix agent端口(tcp 10050)

  1. # firewall-cmd --add-rich-rule 'rule family=ipv4 source address=172.16.238.0/24 port port=10050 protocol=tcp accept' --permanent
  2. # firewall-cmd --reload

上面的命令等同于修改配置

  1. /etc/firewalld/zones/public.xml

,在

  1. <zone>

区域内添加如下:

  1. <rulefamily="ipv4"><sourceaddress="172.16.238.0/24"/><portprotocol="tcp"port="10050"/><accept/></rule>

然后重启防火墙服务

  1. systemctl restart firewalld.service

即可。

zabbix web页面里配置 zabbix server 主机接口 Agent(类型)地址由默认的

  1. 127.0.0.1:10050

改为

  1. your-zabbix-server-ip:10050

日常维护

  1. 先切换到 compose.yaml 目录
  2. cd /data/zabbix
  3. 停止 zabbix 所有服务
  4. docker compose down
  5. 启动 zabbix 所有服务
  6. docker compose up -d
  7. 停止mysql服务
  8. docker compose stop mysql-server
  9. 查看指定容器IP
  10. docker inspect zabbix-server |grep IPAddress |tail-1|awk'{print $2}'|tr'"'" "|tr','' '
  11. 更新配置缓存
  12. /usr/sbin/zabbix_server -R config_cache_reload

zabbix server日志默认位置(容器内):

  1. /var/log/zabbix/zabbix_server.log

备注:使用基于Oracle linux的zabbix容器镜像才有。如果是基于Apline的容器,只能看容器控制台输出了。比如输出到日志:

  1. docker logs zabbix-server > zabbix-server.log

MySQL持久化目录

  1. /data/zabbix/zbx_env/var/lib/mysql

MySQL备份目录

  1. /data/backup/mysql
zabbix官方监控模板

由于使用的zabbix是从低版本升级上来的,需要使用新版本只能手动从 Zabbix Git 存储库下载,然后zabbix web页面的 ConfigurationTemplates(配置 → 模板)手动导入。

升级

Only during upgrade from versions prior 6.4 and new installations (schema deployment)

  1. mysql> set global log_bin_trust_function_creators = 1;
从 zabbix6.0.x 升级为 zabbix7.0.0

停止服务,修改配置

  1. docker.yaml

把指定镜像

  1. alpine-6.0

所有替换为

  1. alpine-7.0

即可,
如:

  1. image: zabbix/zabbix-server-mysql:alpine-6.0-latest

替换为

  1. image: zabbix/zabbix-server-mysql:alpine-7.0-latest

然后启动服务就可以看到日志里有升级信息提示。

zabbix6.0 迁移至新机器并升级为zabbix7.0 步骤

升级前 zabbix6.0.23 LTS (MySQL 8.0.35)
升级后 zabbix7.0.0 LTS (MySQL 8.0.37)

zabbix server初次启动时,会自动升级MySQL数据库结构。

  1. # 启动服务docker compose up -d# 除了msyql服务,其它服务都停止docker compose stop zabbix-web-nginx-mysql
  2. docker compose stop zabbix-java-gateway
  3. docker compose stop zabbix-server
  4. #进入msyql容器,删除原zabbix数据库。dockerexec-it zabbix-mysql bash
  5. mysqlsh -p# 因为mysql账号zabbix都在,所以重建库后,就可以开始导入库了
  6. mysql> drop database zabbix;
  7. mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;# 导入前临时更改,导入后改回默认值 0
  8. mysql>set global log_bin_trust_function_creators =1;
  9. 导入备份(视情况选择)
  10. 方式1sql备份文件):
  11. mysql> use zabbix;
  12. mysql>source /var/lib/mysql/zabbix_backup.sql;
  13. 方式2mysql shell备份文件):
  14. MySQL JS >\sql SET GLOBAL local_infile ='ON';
  15. MySQL JS >\sql show global variables like 'local_infile';
  16. MySQL JS >\sql ALTER INSTANCE DISABLE INNODB REDO_LOG;
  17. MySQL JS >\sql SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_enabled';
  18. MySQL JS > util.loadDump("/data/backup/mysql/zabbix_20240605", {"threads":4,"ignoreVersion": true})# Disable log_bin_trust_function_creators option after importing database schema.
  19. mysql>set global log_bin_trust_function_creators =0;# 导入完成后,再次停止服务docker compose down
  20. # 然后启动(这是启动zabbix server会自动进行升级数据库)docker compose up -d
参考文档
  1. https://www.zabbix.com/documentation/7.0/en/manual/installation/containers
标签: docker zabbix 容器

本文转载自: https://blog.csdn.net/islandstar/article/details/140105767
版权归原作者 islandstar 所有, 如有侵权,请联系我们删除。

“docker compose方式部署Zabbix 7.0 LTS”的评论:

还没有评论