需要说明的是,此记录仅是本人安装过程的情况,每个人的安装环境不一,过程中可能还需要安装其它的依赖情况,这里说不尽也道不完,还需各位根据情况进行排错。
Zabbix4.0
为什么要写这个标题的原因,是因为我在部署到线上环境的时候,由于种种原因选择了docker部署Zabbix4.0版本的。因为自己没有好好阅读官方的产品手册,所以遇到了不少坑,所以也在这记录下来,希望能帮助到一些后来的朋友。
docker镜像用的是centos-4.0.26版本
拉取
docker pull zabbix/zabbix-server-mysql:centos-4.0.26
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zabbix/zabbix-server-mysql centos-5.0-latest 45a52b35737c 8 days ago 345MB
获取数据库文件和web源码
在官网
下拉
下载Zabbix源码并解压缩
wget https://cdn.zabbix.com/zabbix/sources/stable/4.0/zabbix-4.0.26.tar.gz
tar -xzvf zabbix-4.0.26.tar.gz
解压后得到zabbix-4.0.26文件夹
sql文件在zabbix-4.0.26/database/mysql下,web文件在zabbix-4.0.26/frontends/php下
创建数据库并导入数据
mysql -uroot -p
mysql>create database zabbix character set utf8 collate utf-bin;
mysql>grant all privileges on zabbix.* to 'zabbix'@'%' identified by 'zabbix';
mysql>flush privileges;
mysql>use zabbix;
mysql>source <yourpath>/zabbix-4.0.26/database/mysql/schema.sql;
mysql>source <yourpath>/zabbix-4.0.26/database/mysql/images.sql;
mysql>source <yourpath>/zabbix-4.0.26/database/mysql/data.sql;
mysql>quit;
必须按照schema.sql>images.sql>data.sql导入数据,否则报错。
把web源码拷贝到站点文件夹,参考前一篇文章【记录】Zabbix安装及简单使用(一)
需注意的是配置文件在站点根目录/conf/zabbix.conf.php。
server端部署
- 启动镜像
docker run -d -t \
--name zabbix-server
--hostname zabbix-server
-e DB_SERVER_HOST="your database host" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_DATABASE="zabbix" \
-v /home/zabbix/zabbix_server.conf:/etc/zabbix/zabbix_server.conf \
-v /home/zabbix/logs:/tmp/logs \
-v /home/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
-v /home/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \
-p 10051:10051 \
zabbix/zabbix-server-mysql:centos-4.0.26
-d:后台运行容器
-t:给容器分配一个终端
-e:设置容器的环境变量
-v:挂载文件夹
-p:端口映射 宿主机端口:容器端口
–name:设置容器名称
–hostname:设置容器的主机名
这几个数据库的环境变量是必须设置的,否则容器起不来。zabbix-server docker会根据这几个环境变量写入配置文件的数据库配置,至于还能传入其它的环境变量,大家可以看看官方手册:Zabbix Documentation 4.0 从容器安装
挂载点也是有限制的
查看容器运行情况
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f53c6cd87c67 zabbix/zabbix-server-mysql:centos-4.0.26 "/sbin/tini -- /usr/…" 46 hours ago Up 38 hours 0.0.0.0:10051->10051/tcp zabbix-server
查看容器IP
docker inspect zabbix-server
把web的配置文件相应修改即可访问。
- 存在的一些坑
坑一:
原本的本地上用docker部署5.0版本的时候一切都十分顺利,只要把容器正常启动就可以正常工作,但是部署了4.0后发现ICMP的监控模版不能使用,在web上看报了错
server容器上日志
补充一句,因为zabbix容器的日志类型是不能修改的,即配置文件里的LogType,默认就是console,要查看日志使用命令
dokcer logs zabbix-server -f
这是因为fping的执行权限问题,按照网上的解决步骤是:
docker exec -it zabbix-server bash
chown -R root:root /usr/sbin/fping
chmod 4710 /usr/sbin/fping
chown -R root:root /usr/sbin/fping6
chmod 4710 /usr/sbin/fping6
修改/etc/passwd,允许zabbix使用shell登录,测试fping
vim /etc/passwd
zabbix:x:997:994:Zabbix Monitoring System:/var/lib/zabbix:/bin/bash
su zabbix
fping baidu.com
baidu.com is alive
好的,可以执行说明权限没问题,然而报错并没有消失。
这个问题困扰了我好几天,问了好多人也没发现什么问题。
经过不断的docker stop rm run 之后,还是没有找出问题所在。
就在我快要顶不住了要吐了的时候,一道闪电划过我的脑袋瓜子,我的手不受控制地敲下两行命令
mv /usr/sbin/fping6 /usr/sbin/fping6.bk
ln -s /usr/sbin/fping /usr/sbin/fping6
wrlg,两分钟过后,告警消失了!我又添加了几个测试主机使用ICMP监控,发现已经可以正常使用。
至今我仍然不明白,难道4.0版本默认使用ipv6?因为我是务实的,所以并没有深究下去,如果有大神可以告知一二那就甚好。
坑二:
容器里没有中文环境,是得邮件推送是中文内容乱码而且以bin结尾的附件发送。
需要执行以下命令生成中文环境:
localedef -f UTF-8 -i zh_CN zh_CN.UTF-8
locale -a
C
POSIX
en_US.utf8
zh_CN.utf8
看到有zh_CN.utf8就可以推送中文了