创建网络
docker network create -d bridge zbnet
mysql
mkdir -p /export/docker-data-mysql/{config,logs,data}
docker run --name mysql57 \
-p 3306:3306 \
--network zbnet \
--restart=always \
--mount 'type=bind,src=/export/docker-data-mysql/config,dst=/etc/mysql' \
--mount 'type=bind,src=/export/docker-data-mysql/logs,dst=/var/log/mysql' \
--mount 'type=bind,src=/export/docker-data-mysql/data,dst=/var/lib/mysql' \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
zabbix-server
安装 centos + server + mysql 版本
默认,环境变量 MYSQL_USER
and MYSQL_PASSWORD
are zabbix
, zabbix
.
mkdir -p /export/docker-data-zbserver/alertscripts
docker volume create zabbixServerEtc
docker run --name=zabbix_server \
-p 10051:10051 \
--network zbnet \
--restart=always \
--mount 'type=volume,src=zabbixServerEtc,dst=/etc/zabbix' \
--mount 'type=bind,src=/export/docker-data-zbserver/alertscripts,dst=/usr/lib/zabbix/alertscripts' \
-e DB_SERVER_HOST="mysql57" \
-e MYSQL_DATABASE="zabbixserver" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="123456" \
-d zabbix/zabbix-server-mysql:centos-latest
-
默认安装完之后,容器内缺少一些开发环境,这会导致我们的告警脚本执行失败,比如我是用 python3 写的微信告警,而环境里没有。因此需要额外加装。
docker logs -f zabbix_server # 可以看到如下错误 203:20200831:030724.713 Failed to execute command "/usr/lib/zabbix/alertscripts/wechat.py 'it' '自动注册: xxx-use-001-10-240-128-100' '主机名: xxx-use-001-10-240-128-100 主机ip: xxx 代理端口: 10050'": env: 'python3': No such file or directory
# 安装 python3 和模块 docker exec -it -u root zabbix_server yum install python3 docker exec -it -u root zabbix_server pip3 install requests configparser
-
alertscripts 目录需要有 other 可执行权限
chmod o+w /export/docker-data-zbserver/alertscripts
因为 zabbix_server 在执行告警脚本的时候,用的是普通用户
zabbix-server-web
# 安装字体
yum install google-noto-sans-simplified-chinese-fonts.noarch -y
docker run --name zabbix_web \
-p 80:8080 \
-p 443:8443 \
--restart=always \
--network zbnet \
--mount 'type=bind,src=/usr/share/fonts/google-noto/NotoSansSC-Regular.otf,dst=/usr/share/zabbix/assets/fonts/DejaVuSans.ttf' \
-e DB_SERVER_HOST="mysql57" \
-e MYSQL_DATABASE="zabbixserver" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="123456" \
-e ZBX_SERVER_HOST="zabbix_server" \
-e PHP_TZ="Asia/Shanghai" \
-d zabbix/zabbix-web-nginx-mysql:latest
http://ip 即可
初始账户密码是 Admin/zabbix
到这里,你就可以访问zabbix了,不过这时候你会发现zabbix提示agent不可达
其原因是我们还没创建agent
需要注意的是,因为默认zabbix server的主机配置项监听的是 127.0.0.1:10050, 并且主机名配置的是
zabbix server
. 这和我们本文档有一些冲突,所以需要修改一些配置。
- 修改主机配置中的 hostname 为 agent 容器中的环境变量 ZBX_HOSTNAME。这里我们为 zabbix_server
- 修改主机配置中的监听地址为 zabbix_server,且监听方式为 dns
最终修改完如下:
节点自动注册规则
需配合agent配置,实现节点agent启动后,自动配置server端。
zabbix-agent
docker volume create zbAgentEtc
docker run --name zabbix_agent \
--network=container:zabbix_server \
--mount 'type=volume,src=zbAgentEtc,dst=/etc/zabbix/zabbix_agentd.d' \
-e ZBX_DEBUGLEVEL="3" \
-e ZBX_HOSTNAME="zabbix_server" \
-e ZBX_SERVER_HOST="zabbix_server" \
-d zabbix/zabbix-agent:latest
这里 zabbix_agent 采用网络模式为容器模式,并加入到 zabbix_server 容器中,以便于 zabbix_server 可以找到 zabbix_agent
其它配置变量详见上面官方文档