# 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)。