Zabbix 5.4 版本带有预定的 PDF 报告生成、强大的问题检测、高级数据聚合和其他重大改进。如果要从Zabbix 5.0升级到5.4的话,操作系统要CentOS 8或其他更高版本系统,Zabbix 5.4服务端不再支持CentOS 7,其他中间件支持。本文环境是CentOS 7 上使用Docker容器跑服务端和前端程序。
一、数据备份
# mysqldump -u xxx -p xxx -R -E single-transaction zabbix | gzip > /data/zabbixback/zabbix_$(date +%Y%m%d_%H%M%S).sql.gz
# 或者直接备份数据文件
# systemctl stop mysqld
# cp -r /data/mysql /data/zabbixback
# systemctl start mysqld
二、服务升级
- 镜像下载
# 该镜像属于官方镜像,支持哪些版本可通过下面参考链接
# docker pull zabbix/zabbix-server-mysql:centos-5.4.0
# docker pull zabbix/zabbix-web-nginx-mysql:centos-5.4.0
- 映射目录
# 映射配置文件和日志目录,便于后期随时调整且可持久化保存,实际也可以不配置启动
# mkdir /data/zabbix/etc # 宿主创建Zabbix配置目录
# mkdir /data/zabbix/log # 宿主创建Zabbix日志目录
# chmod 777 /data/zabbix/log
# cat /
DBHost=x.x.x.x
DBName=xxx
DBUser=xxx
DBPassword=xxx
DBPort=3306
ListenIP=0.0.0.0
ListenPort=10051
LogFileSize=100
LogSlowQueries=3000
# log 为映射目录
LogFile=/var/log/zabbix/zabbix_server.log
SNMPTrapperFile=/var/log/zabbix/snmptrap.log
PidFile=/tmp/zabbix_server.pid
SocketDir=/tmp/
Timeout=4
StartDiscoverers=10
StartLLDProcessors=10
CacheSize=128M
ValueCacheSize=64M
User=zabbix
# 告警脚本映射目录
AlertScriptsPath=/etc/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/sbin/fping
SSHKeyLocation=/var/lib/zabbix/ssh_keys
SSLCertLocation=/var/lib/zabbix/ssl/certs/
SSLKeyLocation=/var/lib/zabbix/ssl/keys/
SSLCALocation=/var/lib/zabbix/ssl/ssl_ca/
LoadModulePath=/var/lib/zabbix/modules/
WebServiceURL=http://zabbix-web-service:10053/report
- 镜像启动
# 启动 zabbix-server
# 即使配置文件以及指定了数据库配置,但是容器指定还是要指定
# 网络要设置为host,否则会无法连接上数据库
# docker run --name zabbix-server-mysql -t \
-v /etc/localtime:/etc/localtime \
-v /etc/timezone:/etc/timezone \
-v /data/zabbix/etc:/etc/zabbix/ \
-v /data/zabbix/log:/var/log/zabbix/ \
--net=host \
-e DB_SERVER_HOST="x.x.x.x" \
-e MYSQL_DATABASE="xxx" \
-e MYSQL_USER="xxx" \
-e MYSQL_PASSWORD="xxx" \
-e MYSQL_ROOT_PASSWORD="xxx" \
-p 10051:10051 \
-d zabbix/zabbix-server-mysql:centos-5.4.0
# 启动Zabbix 前端
# 容器默认端口是8080
docker run --name zabbix-web-nginx-mysql -t \
-v /etc/localtime:/etc/localtime \
-v /etc/timezone:/etc/timezone \
--net=host \
-e DB_SERVER_HOST="x.x.x.x" \
-e MYSQL_DATABASE="xxx" \
-e MYSQL_USER="xxx" \
-e MYSQL_PASSWORD="xxx" \
-e MYSQL_ROOT_PASSWORD="xxx" \
-d zabbix/zabbix-web-nginx-mysql:centos-5.4.0
三、报错处理
- 服务日志报错
# zabbix-server 服务日志报如下错
25431:20200911:232414.292 database is not upgraded to use double precision values
# 因为Zabbix 的历史数据和趋势数据的数值(浮点型)数据类型支持的精度更高,需要手动更新数据库补丁。
MySQL的补丁地址为:
https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/database/mysql/double.sql
# 上述补丁文件内容
ALTER TABLE trends
MODIFY value_min DOUBLE PRECISION DEFAULT '0.0000' NOT NULL,
MODIFY value_avg DOUBLE PRECISION DEFAULT '0.0000' NOT NULL,
MODIFY value_max DOUBLE PRECISION DEFAULT '0.0000' NOT NULL;
ALTER TABLE history MODIFY value DOUBLE PRECISION DEFAULT '0.0000' NOT NULL;
- Zabbix server is not running
# vim /etc/zabbix/web/zabbix.conf.php
...
$ZBX_SERVER = 'x.x.x.x'; # 直接指定为zabbix server地址
...
- Web界面时间戳问题,直接查看 Latest data
# vim /etc/php-fpm.d/zabbix.conf
...
php_value[date.timezone] = Asia/Shanghai # 直接指定时区
...
- 中文字体显示乱码
# 先把宿主机的字体拷贝进 docker 容器内
# docker cp /usr/share/zabbix/assets/fonts/simkai.ttf container_id:/usr/share/zabbix/assets/fonts/
# 进入容器配置
# vim /usr/share/zabbix/include/defines.inc.php
...
define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name
...
四、Python环境
zabbix-server 里面是没有python环境的,如果告警脚本是使用python的话,那么告警无法使用,此时需要在容器内安装python环境,也可以直接使用如下镜像,基于官方镜像添加了python3.7环境。
# 详细介绍可参考dockerhub
# docker push skypipi/zabbix-server-mysql:centos-5.4.0
总结
Zabbix 5.2 及以上服务版本不再支持CentOS 7系统,除zabbix-server外其他服务依旧支持CentOS 7,在CentOS 7操作系统中升级Zabbix 5.0以上版本服务,Docker容器是个较好的选择,可以在不重装系统不迁移情况下快速升级。