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配置(可选,非必须)
- 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 修改)
2.2 环境变量文件
在 compose 文件中找到每个组件的默认环境变量文件,这些环境变量文件名类似 .env_<type of component> 。
- # 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
复制代码- 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
复制代码- 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">
- <source address="172.16.238.0/24"/>
- <port protocol="tcp" port="10050"/>
- <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页面的 Configuration → Templates(配置 → 模板)手动导入。
升级
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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |