可以根据不同组合,搭配不同的docker镜像,如下
Zabbix server 收集数据存储(可选MySQL、PostgreSQL等)
Zabbix web-interface
单机安装以下服务。不使用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)
省略docker安装步骤。
从 Zabbix github官网 获取7.0 LTS 版本 docker compose.yaml
Zabbix 为 Docker 提供了定义和运行复杂 Zabbix 组件的 compose 文件。这些 compose 文件可以在 Zabbix docker 官方镜像仓库 中找到。
官方提供的 docker compose 文件很多,都是根据组件搭配命名
这里使用基于 docker-compose_v3_alpine_mysql_latest.yaml 模板,调整适合公司使用。
基于alpine Linux镜像,Zabbix server 后端使用MySQL数据库, Zabbix web使用Nginx展示
也可以通过git方式获取基于 zabbix7.0 LTS配置(可选,非必须)
git clone https://github.com/zabbix/zabbix-docker.git 如果之前已经clone过了,重现拉取服务器最新配置,如: git pull git切换分支为7.0,也就是长期支持版本(LTS) git checkout 7.0 [root@VM8802 zabbix-docker]# ll -tha 已省略部分…… -rw-r--r-- 1 root root 2.8K Jun 6 11:20 .env drwxr-xr-x 3 root root 4.0K Jun 6 11:20 env_vars -rw-r--r-- 1 root root 44K Jun 6 11:20 kubernetes.yaml -rw-r--r-- 1 root root 338 Jun 6 11:20 compose_additional_components.yaml -rw-r--r-- 1 root root 2.6K Jun 6 11:20 compose_databases.yaml lrwxrwxrwx 1 root root 42 Jun 6 11:20 compose.yaml -> docker-compose_v3_alpine_mysql_latest.yaml -rw-r--r-- 1 root root 14K Jun 6 11:20 compose_zabbix_components.yaml -rw-r--r-- 1 root root 4.1K Jun 6 11:20 docker-compose_v3_ubuntu_mysql_latest.yaml -rw-r--r-- 1 root root 7.4K Jun 6 11:20 docker-compose_v3_ubuntu_mysql_local.yaml -rw-r--r-- 1 root root 4.1K Jun 6 11:20 docker-compose_v3_ubuntu_pgsql_latest.yaml -rw-r--r-- 1 root root 7.7K Jun 6 11:20 docker-compose_v3_ubuntu_pgsql_local.yaml -rw-r--r-- 1 root root 4.4K Jun 6 11:20 docker-compose_v3_alpine_mysql_latest.yaml -rw-r--r-- 1 root root 7.6K Jun 6 11:20 docker-compose_v3_alpine_mysql_local.yaml -rw-r--r-- 1 root root 4.4K Jun 6 11:20 docker-compose_v3_alpine_pgsql_latest.yaml -rw-r--r-- 1 root root 8.0K Jun 6 11:20 docker-compose_v3_alpine_pgsql_local.yaml -rw-r--r-- 1 root root 4.3K Jun 6 11:20 docker-compose_v3_ol_mysql_latest.yaml -rw-r--r-- 1 root root 7.4K Jun 6 11:20 docker-compose_v3_ol_mysql_local.yaml -rw-r--r-- 1 root root 4.3K Jun 6 11:20 docker-compose_v3_ol_pgsql_latest.yaml -rw-r--r-- 1 root root 7.7K Jun 6 11:20 docker-compose_v3_ol_pgsql_local.yaml 可以看到当前 compose.yaml 是链接指向 docker-compose_v3_alpine_mysql_latest.yaml # docker compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d 官网提供的docker compose文件把所有组件都写上了。可根据自己需求,删除一些不需要的组件配置部分。
当前配置如下组件
zabbix-server
zabbix-server-mysql
zabbix-web-nginx-mysql
zabbix-java-gateway
zabbix-snmptraps
# tree -a /data/zabbix/ /data/zabbix/ ├── compose.yaml └── zbx_env ├── .env_db_mysql ├── .env_java ├── .env_srv └── .env_web 官网默认配置了两个网段,其中zabbix-server和zabbix-java-gateway在不同的网段,导致互通有些干扰,这里就仅保留一个网段配置。
compose.yaml 完整配置(基于 docker-compose_v3_alpine_mysql_latest.yaml 修改)
services: zabbix-server: container_name: zabbix-server image: zabbix/zabbix-server-mysql:alpine-7.0-latest ports: - 10051:10051 restart: "unless-stopped" attach: true volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /data/zabbix/zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro - /data/zabbix/zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro - /data/zabbix/zbx_env/var/lib/zabbix/dbscripts:/var/lib/zabbix/dbscripts:ro - /data/zabbix/zbx_env/var/lib/zabbix/export:/var/lib/zabbix/export:rw - /data/zabbix/zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro - /data/zabbix/zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro - /data/zabbix/zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro - /data/zabbix/zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro - snmptraps:/var/lib/zabbix/snmptraps:ro tmpfs: /tmp ulimits: nproc: 65535 nofile: soft: 20000 hard: 40000 deploy: resources: limits: cpus: '0.70' memory: 1G reservations: cpus: '0.5' memory: 512M env_file: - /data/zabbix/zbx_env/.env_db_mysql - /data/zabbix/zbx_env/.env_srv depends_on: - mysql-server networks: zbx_net: # 固定容器zabbix server ip (可选,非必须) ipv4_address: 172.16.238.10 aliases: - zabbix-server - zabbix-server-mysql stop_grace_period: 30s sysctls: - net.ipv4.ip_local_port_range=1024 64999 - net.ipv4.conf.all.accept_redirects=0 - net.ipv4.conf.all.secure_redirects=0 - net.ipv4.conf.all.send_redirects=0 # - 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 image: zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest ports: - 80:8080 - 443:8443 restart: "unless-stopped" attach: false volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /data/zabbix/zbx_env/etc/ssl/nginx:/etc/ssl/nginx:ro - /data/zabbix/zbx_env/usr/share/zabbix/modules/:/usr/share/zabbix/modules/:ro tmpfs: /tmp deploy: resources: limits: cpus: '0.70' memory: 1024M reservations: cpus: '0.50' memory: 256M env_file: - /data/zabbix/zbx_env/.env_db_mysql - /data/zabbix/zbx_env/.env_web depends_on: - mysql-server healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/ping"] interval: 10s timeout: 5s retries: 3 start_period: 30s networks: zbx_net: aliases: - zabbix-web-nginx-mysql stop_grace_period: 10s sysctls: - net.core.somaxconn=65535 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 ports: - 10052:10052 deploy: resources: limits: cpus: '0.5' memory: 512M reservations: cpus: '0.25' memory: 256M env_file: - /data/zabbix/zbx_env/.env_java networks: zbx_net: aliases: - zabbix-java-gateway stop_grace_period: 5s 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 profiles: - full - all ports: - 162:1162/udp volumes: - snmptraps:/var/lib/zabbix/snmptraps:rw deploy: resources: limits: cpus: '0.5' memory: 256M reservations: cpus: '0.25' memory: 128M networks: zbx_net: aliases: - zabbix-snmptraps stop_grace_period: 5s 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 image: mysql:8.0-oracle security_opt: - seccomp:unconfined command: - mysqld - --skip-mysqlx - --character-set-server=utf8mb4 - --collation-server=utf8mb4_bin # Only during upgrade from versions prior 6.4 and new installations (schema deployment) #- --log_bin_trust_function_creators=1 - --log_timestamps=SYSTEM - --binlog_expire_logs_seconds=3600 - --innodb_buffer_pool_size=2G - --max_connections=500 #- --wait_timeout=1200 #- --interactive_timeout=1200 restart: "unless-stopped" attach: false volumes: - /etc/localtime:/etc/localtime:ro - /data/zabbix/zbx_env/var/lib/mysql:/var/lib/mysql:rw - /data/backup/mysql:/data/backup/mysql:rw env_file: - /data/zabbix/zbx_env/.env_db_mysql stop_grace_period: 1m networks: zbx_net: aliases: - mysql-server - zabbix-database - mysql-database labels: com.zabbix.description: "Zabbix server with MySQL database support" com.zabbix.dbtype: "mysql" db_data_mysql: image: busybox volumes: - /data/zabbix/zbx_env/var/lib/mysql:/var/lib/mysql:rw networks: zbx_net: driver: bridge driver_opts: com.docker.network.enable_ipv6: "false" ipam: driver: default config: - subnet: 172.16.238.0/24 volumes: snmptraps: 在 compose 文件中找到每个组件的默认环境变量文件,这些环境变量文件名类似 .env_ 。
.env_db_mysql# 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_PASSWORD MYSQL_USER=zabbix MYSQL_PASSWORD=yourzabbix MYSQL_ROOT_PASSWORD=yourmysql # MYSQL_ROOT_PASSWORD_FILE=/run/secrets/MYSQL_ROOT_PASSWORD # MYSQL_ALLOW_EMPTY_PASSWORD=false # MYSQL_DATABASE=zabbix MYSQL_DATABASE=zabbix .env_javaZBX_START_POLLERS=5 ZBX_TIMEOUT=3 .env_srvZBX_STARTPOLLERS=7 ZBX_STARTPOLLERSUNREACHABLE=7 ZBX_STARTTRAPPERS=20 ZBX_STARTPINGERS=7 ZBX_STARTDISCOVERERS=7 ZBX_JAVAGATEWAY_ENABLE=true ZBX_JAVAGATEWAY=zabbix-java-gateway ZBX_JAVAGATEWAYPORT=10052 ZBX_STARTJAVAPOLLERS=5 ZBX_ENABLE_SNMP_TRAPS=true ZBX_CACHESIZE=1024M ZBX_HISTORYCACHESIZE=128M ZBX_TIMEOUT=15 .env_webZBX_SERVER_HOST=zabbix-server ZBX_SERVER_NAME=Your Corp. IT PHP_TZ=Asia/Shanghai docker compose 配置说明
.env_web 配置相关项 PHP_TZ=Asia/Shanghaicd /data/zabbix/ docker compose up -d 浏览 zabbix web界面
启动之后即可使用 直接访问 zabbix web界面
默认用户名:Admin ,密码:zabbix (注意区分大小写)
配置已经设置了持久化数据目录映射到本地。
安装Zabbix仓库(这里选择国内的腾讯源),然后安装Zabbix agent2
# 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 存储库配置文件中添加以下子句来排除,更详细说明可访问官网安装文档。
[epel] ... excludepkgs=zabbix* 然后安装即可 rpm -ivh https://mirrors.tencent.com/zabbix/zabbix/7.0/rhel/9/x86_64/zabbix-release-7.0-2.el9.noarch.rpm yum install zabbix-agent2 修改 /etc/zabbix/zabbix_agent2.conf ,指定 zabbix server 地址,如:
Server=127.0.0.1,172.16.238.10 # 172.16.238.10 为zabbix server容器IP ServerActive=127.0.0.1,172.16.238.10 Hostname=10.10.88.2 # 这里为Linux主机IP 查看zabbix server容器(容器名为 zabbix-zabbix-server-1 )IP方法
# docker inspect zabbix-server |grep IPAddress |tail -1 |awk '{print $2}' |tr '"' " " |tr ',' ' ' 172.16.238.10 进入zabbix server容器 # docker exec -it zabbix-server bash 测试访问 zabbix agent2 的端口是否可以正常连通(端口不通,提示:wget: can't connect to remote host (10.10.88.2): Connection refused) 78d0d09dfa31:/var/lib/zabbix$ wget 10.10.88.2:10050 Connecting to 10.10.88.2:10050 (10.10.88.2:10050) wget: error getting response 如果zabbix-server 服务器ip地址有更改,这里配置也需要修改,然后重启agent2服务systemctl restart zabbix-agent2.service
默认情况下宿主机内docker容器是禁止访问宿主机IP
防火墙firewalld开放zabbix server容器IP段(172.16.238.0/24)访问zabbix agent端口(tcp 10050)
# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=172.16.238.0/24 port port=10050 protocol=tcp accept' --permanent # firewall-cmd --reload 上面的命令等同于修改配置 /etc/firewalld/zones/public.xml ,在 区域内添加如下:
然后重启防火墙服务 systemctl restart firewalld.service 即可。
zabbix web页面里配置 zabbix server 主机接口 Agent(类型)地址由默认的 127.0.0.1:10050 改为 your-zabbix-server-ip:10050
先切换到 compose.yaml 目录 cd /data/zabbix 停止 zabbix 所有服务 docker compose down 启动 zabbix 所有服务 docker compose up -d 停止mysql服务 docker compose stop mysql-server 查看指定容器IP docker inspect zabbix-server |grep IPAddress |tail -1 |awk '{print $2}' |tr '"' " " |tr ',' ' ' 更新配置缓存 /usr/sbin/zabbix_server -R config_cache_reload zabbix server日志默认位置(容器内): /var/log/zabbix/zabbix_server.log
备注:使用基于Oracle linux的zabbix容器镜像才有。如果是基于Apline的容器,只能看容器控制台输出了。比如输出到日志:docker logs zabbix-server > zabbix-server.log
MySQL持久化目录 /data/zabbix/zbx_env/var/lib/mysql
MySQL备份目录 /data/backup/mysql
由于使用的zabbix是从低版本升级上来的,需要使用新版本只能手动从 Zabbix Git 存储库下载,然后zabbix web页面的 Configuration → Templates(配置 → 模板)手动导入。
Only during upgrade from versions prior 6.4 and new installations (schema deployment)
mysql> set global log_bin_trust_function_creators = 1;
停止服务,修改配置 docker.yaml 把指定镜像alpine-6.0所有替换为alpine-7.0即可,
如:image: zabbix/zabbix-server-mysql:alpine-6.0-latest 替换为 image: zabbix/zabbix-server-mysql:alpine-7.0-latest
然后启动服务就可以看到日志里有升级信息提示。
升级前 zabbix6.0.23 LTS (MySQL 8.0.35)
升级后 zabbix7.0.0 LTS (MySQL 8.0.37)
zabbix server初次启动时,会自动升级MySQL数据库结构。
# 启动服务 docker compose up -d # 除了msyql服务,其它服务都停止 docker compose stop zabbix-web-nginx-mysql docker compose stop zabbix-java-gateway docker compose stop zabbix-server #进入msyql容器,删除原zabbix数据库。 docker exec -it zabbix-mysql bash mysqlsh -p # 因为mysql账号zabbix都在,所以重建库后,就可以开始导入库了 mysql> drop database zabbix; mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin; # 导入前临时更改,导入后改回默认值 0 mysql> set global log_bin_trust_function_creators = 1; 导入备份(视情况选择) 方式1(sql备份文件): mysql> use zabbix; mysql> source /var/lib/mysql/zabbix_backup.sql; 方式2(mysql shell备份文件): MySQL JS > \sql SET GLOBAL local_infile = 'ON'; MySQL JS > \sql show global variables like 'local_infile'; MySQL JS > \sql ALTER INSTANCE DISABLE INNODB REDO_LOG; MySQL JS > \sql SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_enabled'; MySQL JS > util.loadDump("/data/backup/mysql/zabbix_20240605", {"threads": 4,"ignoreVersion": true}) # Disable log_bin_trust_function_creators option after importing database schema. mysql> set global log_bin_trust_function_creators = 0; # 导入完成后,再次停止服务 docker compose down # 然后启动(这是启动zabbix server会自动进行升级数据库) docker compose up -d