背景前言
Zabbix想要做更复杂的告警策略,但是复杂的步骤与判断会给系统带来负载;之前出现过Zabbix告警夯住,造成告警堆积。在了解到Zabbix3.4的新特性后,发现有一项:多线程告警(alerter进程),有了这个新特性就可大胆设计复杂告警策略,不再担心告警夯住。
编译升级过程中出现报错,最终决定迁移到Docker里。
Zabbix在Github上官方代码仓库
# Zabbix-Server https://github.com/zabbix/zabbix-docker/tree/3.4/server-mysql # Zabbix-Web https://github.com/zabbix/zabbix-docker/tree/3.4/web-nginx-mysql
Zabbix在Docker hub上的仓库
# Zabbix-Server https://hub.docker.com/r/zabbix/zabbix-server-mysql/ # Zabbix-Web https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql/
部署所需
需要两个Docker镜像Zabbix-Server与Zabbix-Web,数据库与Agent保持原状。
制作镜像
拉取镜像
拉取zabbix-server
# docker pull zabbix/zabbix-server-mysql:alpine-3.4.4
拉取zabbix-web
# docker pull zabbix/zabbix-web-nginx-mysql:alpine-3.4.4
镜像内添加所需组件,以zabbix-server为例
# vim Dockerfile FROM zabbix/zabbix-server-mysql:alpine-3.4.4 RUN <需要安装的软件> CMD ["/run_zabbix_component.sh", "server", "mysql"]
重新build一个新版本
# docker build -t <镜像名> .
切换新旧Zabbix
停止旧Zabbix-server/agent
# service zabbix-server stop # service zabbix-agent stop
运行新版Zabbix-server
docker run --name zabbix-server -e DB_SERVER_HOST="<数据库IP>" -e MYSQL_USER="<数据库用户>" -e MYSQL_PASSWORD="<数据库密码>" -e ZBX_DEBUGLEVEL="<DEBUG等级>" -v <告警脚本路径>:/usr/lib/zabbix/alertscripts -v /etc/localtime:/etc/localtime -v <启动脚本>:/run_zabbix_component.sh -p 10051:10051 -d <镜像名>
# 其他调优参数参见: https://github.com/zabbix/zabbix-docker/tree/3.4/server-mysql/alpine
# 默认三个alerter进程
运行新版Zabbix-web
docker run --name zabbix-web --link zabbix-server:zabbix-server -e DB_SERVER_HOST="<数据库IP>" -e MYSQL_USER="<数据库用户>" -e MYSQL_PASSWORD="<数据库密码>" -e ZBX_SERVER_HOST=zabbix-server -e PHP_TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime -v <自定styles>:/usr/share/zabbix/styles -v <启动脚本>:/run_zabbix_component.sh -p 80:80 -d <镜像名>
修改Zabbix-agent配置为
Server=ZabbixServer
在/etc/hosts添加
<ZabbixServerIP> ZabbixServer
运行后,系统会自动判断数据库;如果不存在数据库则创建新的数据库,如果存在将直接使用或升级SQL,Zabbix2.2版本以上跨版本升级不用太过担心数据库问题,Zabbix会自动适配更新。部署完修改启动脚本即可,到此完成Zabbix3.0迁移升级工作。
启动脚本 https://github.com/ca7dEm0n/zabbix_scripts/blob/master/docker-zabbix/zabbix-server