docker compose方式部署Zabbix 7.0 LTS

islandstar 2024-08-13 08:37:01 阅读 92

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-gatewayzabbix-snmptrapszabbix-proxy

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

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

MySQL 数据库支持的 Zabbix server - zabbix/zabbix-server-mysqlPostgreSQL 数据库支持的 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配置(可选,非必须)

<code>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

2.1 docker compose配置

官网提供的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:

2.2 环境变量文件

在 compose 文件中找到每个组件的默认环境变量文件,这些环境变量文件名类似 .env_<type of component>

配置mysql:.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

配置zabbix-java-gateway:.env_java

ZBX_START_POLLERS=5

ZBX_TIMEOUT=3

配置Zabbix server:.env_srv

ZBX_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

配置Nginx:.env_web

ZBX_SERVER_HOST=zabbix-server

ZBX_SERVER_NAME=Your Corp. IT

PHP_TZ=Asia/Shanghai

docker compose 配置说明

修改时区(web页面显示中文)

修改 .env_web 配置相关项 PHP_TZ=Asia/Shanghai解决zebbix web图片中文显示乱码(zabbix7.0下不指定也可以正常显示中文)

3、部署服务

cd /data/zabbix/

docker compose up -d

浏览 zabbix web界面

启动之后即可使用 <http://ip> 直接访问 zabbix web界面

默认用户名:Admin ,密码:zabbix (注意区分大小写)

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

4、独立安装Zabbix agent2

安装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

5、设置允许docker容器访问宿主机

默认情况下宿主机内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 ,在 <zone> 区域内添加如下:

<rule family="ipv4">code>

<source address="172.16.238.0/24"/>code>

<port protocol="tcp" port="10050"/>code>

<accept/>

</rule>

然后重启防火墙服务 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是从低版本升级上来的,需要使用新版本只能手动从 Zabbix Git 存储库下载,然后zabbix web页面的 ConfigurationTemplates(配置 → 模板)手动导入。

升级

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

mysql> set global log_bin_trust_function_creators = 1;

从 zabbix6.0.x 升级为 zabbix7.0.0

停止服务,修改配置 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 迁移至新机器并升级为zabbix7.0 步骤

升级前 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

参考文档

https://www.zabbix.com/documentation/7.0/en/manual/installation/containers



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。