坑比较多,写一些大概的,慢慢补充
1. 组件:mysql zabbix-server zabbix-nginx 这三个是基本的,然后还有两个zabbix-agent zabbix-snmptrap
数据库mysql要求比较多,选zabbix6.4的话要8.0.30以上的版本,下载镜像可以在群晖图形界面操作,但是首次创建容器时候一定要用命令行,图形界面貌似只能加环境变量不能加参数,运行参数那一行填了就会启动失败不知道什么鬼,因为之后的zabbix-server初次启动会创建zabbix数据库,很多时候会报错比如需要utf8格式,比如需要权限,所以用命令行加上参数就能解决,相当于改容器里的my.conf文件
容器名mysql,版本8.0.36,数据库名zabbix,密码123456,每个\相当于换行,全部打完到最后一行没有\的时候才会运行,最后两行和mysql版本有关系,版本不对log会报错,正常应该是不用加
docker run --restart=always --name mysql --hostname mysql \ -e MYSQL_ROOT_PASSWORD="123456" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="123456" \ -e MYSQL_DATABASE="zabbix" \ -v /var/lib/docker/volumes/mysql/db:/var/lib/mysql \ -d mysql:8.0.36 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci
--default-authentication-plugin=mysql_native_password \ #如果用最新的版本设置好utf8字符集就行,这两行不需要了
--disable-log-bin
2. zabbix-server
除数据库外的容器创建都可以用图形界面了,我都用了最新版,注意要和前面的mysql容器链接,环境变量是数据库主机、名字、用户和密码,几个文件夹映射要做一下否则日志里会报无法写入文件什么的,群晖上的docker路径是/volume1/docker,如果分区不一样可以在文件管理器里查看属性,对外端口也用10051这样其他局域网设备安装agent的时候连接群晖的10051端口就可以了
注意第一次启动非常慢,要观察日志是否正常启动,如果有报错一般容器也会停掉,环境变量里加入了对虚拟机的支持和缓存调整,不是必须的,正常只需主机名和数据库用户密码
如果用宝塔面板,挂载localtime会有问题,不能挂载文件只能挂载目录,可以用环境变量TZ=Asia/Shanghai来修改容器时区,否则发报警邮件的时间不会+8
20241016已升级到zabbix 7.0版本,镜像名字有变化 zabbix-proxy-mysql:alpine-7.0-latest
docker run --restart=always --name zabbix-server --hostname zabbix-server \ --link mysql:mysql \ -e DB_SERVER_HOST="mysql" \ -e MYSQL_USER="zabbix" \ -e MYSQL_DATABASE="zabbix" \ -e MYSQL_PASSWORD="123456" \ -e ZBX_STARTPOLLERS=500 \ -e ZBX_STARTPOLLERSUNREACHABLE=50 \ -e ZBX_STARTTRAPPERS=30 \ -e ZBX_STARTVMWARECOLLECTORS=3 \ -e ZBX_VMWARECACHESIZE=50M \ -e ZBX_VMWAREFREQUENCY=10 \ -e ZBX_VMWAREPERFFREQUENCY=60 \ -e ZBX_VMWARETIMEOUT=300 \ -e ZBX_STARTPINGERS=10 \ -e ZBX_CACHESIZE=200M \ -e ZBX_VALUECACHESIZE=200M \ -e ZBX_STARTDISCOVERERS=5 \ -e ZBX_CACHEUPDATEFREQUENCY=100 \ -e ZBX_STARTDBSYNCERS=20 \ -e ZBX_HISTORYCACHESIZE=512M \ -e ZBX_TRENDCACHESIZE=256M \ -e TZ=Asia/Shanghai \ -v /var/lib/docker/volumes/zabbix-server/alertscripts:/usr/lib/zabbix/alertscripts \ -v /var/lib/docker/volumes/zabbix-server/externalscripts:/usr/lib/zabbix/externalscripts \ -v /var/lib/docker/volumes/zabbix-server/snmptraps:/var/lib/zabbix/snmptraps \ -v /var/lib/docker/volumes/zabbix-server/export:/var/lib/zabbix/export \ -p 10051:10051 \ -d zabbix/zabbix-proxy-mysql:alpine-7.0-latest
3. zabbix-web
创建web服务,注意链接前两个容器,外网端口设为8080,到这里就能进入网页了,用户Admin密码zabbix
docker run --restart=always --name zabbix-web --hostname zabbix-web \ --link mysql:mysql \ --link zabbix-server:zabbix-server \ -e DB_SERVER_HOST="mysql" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="123456" \ -e MYSQL_DATABASE="zabbix" \ -e ZBX_SERVER_HOST="zabbix-server" \ -e PHP_TZ="Asia/Shanghai" \ -p 8080:8080 \ -d zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest
4. zabbix-agent
如果不装agent网页里显示Zabbix server是离线的,新建个容器安装agent,注意链接zabbix-server,环境变量主机名填Zabbix server,注意大小写,要和网页中填的完全一致,IP要用docker内部地址,默认的是那个bridge,我填zabbix-agent的172.17.0.5就变绿了,观察agent和server的日志没有报错即可
docker run --name zabbix-agent --link zabbix-server:zabbix-server -e ZBX_HOSTNAME="Zabbix server" -e ZBX_SERVER_HOST="zabbix-server" --init -d zabbix/zabbix-agent:latest
5. zabbix-snmptrap
这个没有环境变量,但是有三个文件夹要映射一下,也是根据日志判断,直到启动不报错为止
mibs
net-snmp
snmptraps
6. 容器命令
docker exec -it mysql /bin/bash 进入mysql容器命令行
docker inspect mysql | grep IPAddress 查看mysql容器的内部ip地址
docker ps 查看运行的容器
docker inspect --format='{{.LogPath}}' 6c4137bbbbe9 最后的6c4137bbbbe9代表容器ID,查看这个容器的log文件位置,日志太长了可以删除log文件
7. 容器里修改配置文件
不能直接进入容器修改里面的配置文件,比如zabbix-server.conf,容器里的文件必须保持最初始的模板,要修改配置,比如加入对VMware实体机的支持,则需要在环境变量里添加对应的值,格式和原版略有区别,这个在docker镜像的官网上有说明,在群晖图形界面里查看下载好的镜像文件,每个文件的右上角有链接点鼠标就能进官网查,其实就是每次启动容器时候,相当于都在重新运行脚本,会根据容器里设置的环境变量去重新修改容器里的文件
8. zabbix-proxy
proxy也比较有用,可以在server没法直接通讯的网络里建一个,相当于是个弱化版的server,也必须是linux主机,也需要Mysql数据库,但这个数据库里的数据只是临时存放供proxy传递数据用的,不用备份,容器也不用过多配置,只要能连上server端就行,所以容器只需要开放端口10051出来,有主被动两个模式,一般是用主动由proxy去连接server
docker run --restart=always --name mysql --hostname mysql \ -e MYSQL_ROOT_PASSWORD="123456" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="123456" \ -e MYSQL_DATABASE="zabbix" \ -v /var/lib/docker/volumes/mysql/_data/lib:/var/lib/mysql \ -d mysql:8.0.36 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci
docker run --restart=always --name zabbix-proxy --hostname zabbix-proxy \ --link mysql:mysql \ -e DB_SERVER_HOST="mysql" \ -e MYSQL_USER="zabbix" \ -e MYSQL_DATABASE="zabbix" \ -e MYSQL_PASSWORD="123456" \ -e ZBX_HOSTNAME=zabbix-proxy \ #这个是proxy自己的名字,在server端添加时要一致 -e ZBX_SERVER_HOST=xxx \ #这个是server地址,可以用域名 -e ZBX_TIMEOUT=30 \ -e ZBX_PROXYMODE=0 \ #0是主动模式,1是被动模式 -e ZBX_CACHESIZE=500M \ -e TZ="Asia/Shanghai" \ -p 10051:10051 \ -d zabbix/zabbix-proxy-mysql:alpine-7.0-latest
9. 监控Esxi实体机,模板官方社区里有下载,要将Esxi高级设置里的Config.HostAgent.plugins.solo.enableMob改为True
查看uuid地址:https://esxi-ip/mob/?moid=ha-host&doPath=hardware.systemInfo
然后宏里填写好UUID、IP、用户、密码
{$VMWARE.HV.UUID}=
{$VMWARE.URL}=https://IP地址/sdk
{$VMWARE.USERNAME}=root
{$VMWARE.PASSWORD}=Esxi登陆密码
zabbix-server或者proxy配置文件里要修改监控VMware的选项,在docker里用环境变量的方式添加,否则默认配置是不启动的
ZBX_STARTVMWARECOLLECTORS=6
ZBX_VMWAREFREQUENCY=10
ZBX_VMWAREPERFFREQUENCY=60
ZBX_VMWARECACHESIZE=50M
ZBX_VMWARETIMEOUT=300
10. 华为交换机snmp设置
<S>snmp-agent
<S>snmp-agent sys-info version v2c
<S>snmp-agent community complexity-check disable
<S> snmp-agent community read cipher public
<S>snmp-agent trap enable
<S>snmp-agent protocol source-status all-interface
11.升级版本后zabbix-server或者zabbix-proxy启动日志一直报数据库升级失败
mysql权限不足,需要进入mysql容器的命令行设置
mysql -u root -p
set global log_bin_trust_function_creators = 1;
12.升级后主页显示“数据库中表的字符集或排序规则不受支持”
MYSQL数据库的字符类型有问题,创建容器时需改成
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
对于旧数据库的转换,官方有手册和脚本
注意脚本里的变量,设置自己的数据库名字,默认是zabbix
停止zabbix-server容器,进入mysql容器操作数据库
查询当前设置
mysql> SELECT @@character_set_database, @@collation_database;+--------------------------+----------------------+| @@character_set_database | @@collation_database |+--------------------------+----------------------+| utf8 | utf8_bin |+--------------------------+----------------------+
修改字符集设置
alter database <your DB name> character set utf8mb4 collate utf8mb4_bin;
上传脚本文件utf8mb4_convert.sql到容器内,可以用docker映射的目录/var/lib/mysql
进入容器执行脚本,转换现有表的字符集,之后删除存储过程
SET @ZABBIX_DATABASE = '<your DB name>';If MariaDB → set innodb_strict_mode = OFF; CALL zbx_convert_utf8();If MariaDB → set innodb_strict_mode = ON; drop procedure zbx_convert_utf8;
再补充一个ubantu24部署的时候升级问题,以7.0为例,官网的命令不全,要先释放dpkg,否则会一直显示已安装最新版
rm -Rf /etc/apt/sources.list.d/zabbix.list dpkg -P zabbix-release wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest+ubuntu24.04_all.deb dpkg -i zabbix-release_latest+ubuntu24.04_all.deb apt-get update apt install --only-upgrade 'zabbix*'