compose-audit.md 3.9 KB

Zabbix Docker Compose 审计 & 缓存重估说明

主机 10.160.10.213 · Zabbix 7.4.2 · MySQL 8.0.43 · 审计时间 2026-11-04

一、现有 /opt/zabbix/docker-compose.yaml 的问题

# 位置 问题 影响 建议
1 顶部 version: '3' Compose v2 已废弃该字段,会打印 warning 无功能影响,但提示噪音 删除
2 所有 image 未锁版本(zabbix/zabbix-server-mysql、mysql:8.0-oraclelinux9) 实际是 latest/浮动 tag 一旦 docker compose pull 会被动升级(7.4.x→更高),可能不兼容 锁定 ubuntu-7.4.2 / mysql:8.0.43
3 zabbix-server 使用 privileged: true + cap_add: ALL 容器获得近乎宿主机全部能力 严重过度授权;容器内进程若被利用可影响宿主机 改为 cap_add: [NET_RAW, SYS_NICE](仅 ICMP/优先级需要)
4 使用 links:(web 服务) 旧式链接,v2 已不推荐 无功能影响,但与自定义网络重复 删除,改用同一 networks + depends_on
5 depends_on 仅列名字 不等待 MySQL 真正就绪 MySQL 启动慢时 server/web 可能反复重连 用 condition: service_healthy(已配 healthcheck)
6 密码明文硬编码在 compose 且 root/普通用户同密码 弱口令 CobcoIT132,泄露面大 安全风险 用 .env + ${VAR:-默认} 覆盖;建议改强密码
7 未设置时区(TZ/PHP_TZ) 容器默认 UTC Web 显示/报表时间可能不符预期 显式 TZ(默认保留 UTC,可改 Asia/Shanghai)
8 --default-authentication-plugin=mysql_native_password MySQL 8.0.34+ 起该参数已弃用(8.4 移除) 仅 warning,暂无影响 保持现状即可(换 8.4 前需处理)
9 无 stop_grace_period 停容器时默认 10s 强杀 MySQL/Zabbix 可能非正常关闭 mysql 设 1m、server 设 30s
10 healthcheck 无 start_period MySQL 首次初始化较久 可能被误判 unhealthy 增加 start_period: 40s

说明:privileged/cap_add:ALL 的收紧会改变运行参数;若线上有依赖特殊能力的功能(少见),重建后请观察。除此之外其余修改均为等价或增强,可直接替换。

二、缓存重估(关键)

实测(迁移后:187 主机 / 75700 项 / 写入 445 values/s)各缓存真实占用:

缓存 环境变量 原配置 实测占用 结论
配置缓存 ZBX_CACHESIZE 1024M 12.06% ≈ 123M 512M(≈4x 余量)
值缓存 ZBX_VALUECACHESIZE 1024M 1.15% ≈ 12M 128M
趋势缓存 ZBX_TRENDCACHESIZE 1G 0.39% ≈ 4M 64M(原值超配约 250 倍)
历史缓存 ZBX_HISTORYCACHESIZE 128M ≈0.00008% 64M
历史索引 ZBX_HISTORYINDEXCACHESIZE 32M 0.24% ≈ 77K 16M
趋势函数缓存 ZBX_TRENDFUNCTIONCACHESIZE 64M ≈0 16M
  • 三个被加到 1G 的缓存(配置/值/趋势)实际合计只用约 139M,预留 3.3G,属严重超配。
  • 按上表调整后缓存合计约 800M,比原来节省约 2.5G 内存,且都留有 4~10 倍余量。
  • 配置缓存务必不要压过低(会“Cannot allocate shared memory for configuration cache”);512M 对当前 7.5 万项、未来翻倍到 15 万项仍安全。

⚠️ 注意:不要在全量 LLD 迁移/大批发现进行中把配置缓存调小——应在迁移稳定后再切换 compose。本次迁移已完成,可安全切换。

三、其他观察

  • ZBX_STARTSNMPPOLLERS: 30 保留合理:186 台交换机改为“每台 1 次 walk”,实测 SNMP poller 繁忙度仅 2.85%、unreachable 0%,30 个充裕(若追求精简可降到 15)。
  • 磁盘 / 191G 用 73G(39%),MySQL 数据在 /opt/zabbix/zabbix-server/mysql_data,建议定期关注 history 增长(可配 housekeeping)。