使用Docker部署Zabbix Proxy
2016-03-25 by dongnan
开始之前
zabbix proxy 用于代替 zabbix server 检索客户端的数据,然后把数据汇报给 zabbix server,
并且在一定程度上分担了 zabbix server的压力,zabbix proxy 非常简便地实现了集中式、分布式监控。
使用场景:
- 监控远程区域设备。
- 监控本地网络不稳定区域。
- 当 zabbix监控成千上万的设备时,使用它来减轻server端的压力。
- agent无法对外提供公网端口,- zabbix proxy选择主动模式向- zabbix server推送数据。
目标
- 使用 docker部署zabbix proxy。
- 配置 zabbix proxy与zabbix server通信。
- 配置 zabbix server通过zabbix proxy监控zabbix agent。
部署
数据库
同 zabbix server 一样,zabbix proxy依赖 mysql 数据库,所以需要先部署一个 mysql 容器:
# 执行命令
docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbix_proxy" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="ywwd.net" \
      -e MYSQL_ROOT_PASSWORD="ywwd.net" \
      -v /data/container/mysql:/var/lib/mysql \
      -v /etc/localtime:/etc/localtime:ro \
      --restart=always \
      -d mysql:5.7 \
      --character-set-server=utf8 --collation-server=utf8_general_ci --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
zabbix-proxy
接下来创建 zabbix-proxy 容器。
# 执行命令
docker run --name zabbix-proxy-mysql \
           -e DB_SERVER_HOST="mysql-server" \
           -e MYSQL_DATABASE="zabbix_proxy" \
           -e MYSQL_USER="zabbix" \
           -e MYSQL_PASSWORD="ywwd.net" \
           -e ZBX_HOSTNAME="office-proxy.xyc.it" \
           -e ZBX_SERVER_HOST=YourZabbixServerIP \
           -e ZBX_TIMEOUT="30" \
           -e ZBX_CONFIGFREQUENCY="300" \
           -e ZBX_DATASENDERFREQUENCY=3 \
           --link mysql-server:mysql \
           -p 10051:10051 --restart=always \
           -v /etc/localtime:/etc/localtime:ro \
           -d zabbix/zabbix-proxy-mysql:latest
注意,ZBX_HOSTNAME 变量,配置时需要使用它。
配置
首先在 zabbix server 页面添加代理, Administration -> Proies -> Create proxy。

注意 Proxy name 一定要与创建的 zabbix-proxy 容器中定义的 ZBX_HOSTNAME="YourZabbixPorxyName" 环境变量相同,
否则 zabbix server 拒绝与其通信。
另外 Proxy mode 选择 Active 主动模式,也就是前面提到某些环境下即使没有公网端口也可以主动提交数据到 zabbix server。

最后添加 zabbix-agent, 添加 zabbix-agent 时选择 创建的 proxy 即可,例如:
