zabbix☞容器搭建

阅读量: zyh 2020-08-30 20:27:54
Categories: > Tags:

创建网络

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

https://hub.docker.com/r/zabbix/zabbix-server-mysql

安装 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
  1. 默认安装完之后,容器内缺少一些开发环境,这会导致我们的告警脚本执行失败,比如我是用 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
    
  2. alertscripts 目录需要有 other 可执行权限

    chmod o+w /export/docker-data-zbserver/alertscripts
    

    因为 zabbix_server 在执行告警脚本的时候,用的是普通用户

zabbix-server-web

https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql

# 安装字体
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不可达

image-20200901172913999

其原因是我们还没创建agent

需要注意的是,因为默认zabbix server的主机配置项监听的是 127.0.0.1:10050, 并且主机名配置的是

zabbix server. 这和我们本文档有一些冲突,所以需要修改一些配置。

  1. 修改主机配置中的 hostname 为 agent 容器中的环境变量 ZBX_HOSTNAME。这里我们为 zabbix_server
  2. 修改主机配置中的监听地址为 zabbix_server,且监听方式为 dns

最终修改完如下:

image-20200901175159400

节点自动注册规则

需配合agent配置,实现节点agent启动后,自动配置server端。

image-20220406143143263

zabbix-agent

https://hub.docker.com/r/zabbix/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

其它配置变量详见上面官方文档