Zabbix 8.0 升级踩点:Allow list 空着从「放行」变「全禁」,HTTP 模板默认校验 TLS
Zabbix 8.0.0 于 2026-11-05 发布,接在 7.4.0 之后。下面是 7.4.x → 8.0.0 的升级说明,重点在破坏性变更,而不是新功能列表。
- Release Notes:
- What's new:
- 升级步骤:
- 项目仓库:
8.0 大致加了什么
主要三条线。APM:基于 OpenTelemetry,接收应用或 OTel collector 通过 OTLP/gRPC 送来的 traces / metrics / logs;Zabbix proxy 负责接收并写入数据源,proxy 配置里多了 APM 标签页;在 Administration > Data source 指定遥测数据源(ClickHouse),在 APM 菜单查看;触发器与图表里用新的 telemetry query item type 取数。相关参数和 item:
- Zabbix server:
TelemetryProvider、StartTelemetryQueryPollers - Zabbix proxy:
TelemetryProvider、StartTelemetryQueryPollers、StartAPMCollector、APMListenIP、APMListenPort、APMTLSCAFile、APMTLSCertFile、APMTLSKeyFile - Zabbix frontend:
$TELEMETRY_PROVIDERS[] - Zabbix proxy 编译选项:
--with-apm - 监控遥测采集的内部 item:
zabbix[apm,]
另外两条:ClickHouse 成为新的历史数据后端(官方给的说法是 10x 性能提升、更省空间);Complex event processing(CEP)关联引擎,支持事件去重、抑制、丢弃、根因分析和 JavaScript 可编程逻辑。再零散一些的还有 JSON 数据类型、SAML 默认开启签名、API 默认关闭。
下面按后果分三类:起不来的、权限变空的、模板静默失效的。
一、升级后服务直接起不来
数据库版本门槛
| 数据库 | 原最低版本 | 8.0 最低版本 |
|---|---|---|
| MySQL / Percona | 8.0.30 | 8.4.0 |
| MariaDB | 10.5.00 | 10.11.00 |
| PostgreSQL | 13.0 | 15.0 |
| TimescaleDB | 2.13.0 | 2.20.0 |
| Elasticsearch | 7.0.0 | 8.0.0 |
Elasticsearch 低于 8.0.0 时 Zabbix server 直接不启动,且不能用 AllowUnsupportedDBVersions 覆盖。也就是说,升级 Zabbix server 之前必须先把 ES 升上去,顺序不能反。
其它硬门槛
- PHP 最低版本从 8.0.0 抬到 8.2.0。
- Logback 最低版本从 1.5.16 抬到 1.5.25(Java gateway 相关)。
- 不再支持 1.6 之前的 Zabbix agent:server/proxy 的 trapper 移除了旧版 plain-text 与 XML 协议,pre-1.6 agent 无法再上报。
- TimescaleDB + JSON 类型:新的
history_jsonhypertable 必须手动配置,不会自动建。 - MySQL 字符集:如果 Zabbix 的 MySQL 库是用
utf8mb3字符集与utf8mb3_bin排序规则建的,强烈建议升级前转成utf8mb4/utf8mb4_bin,做法见 Repairing Zabbix database character set and collation。
插件侧
- Ceph 插件改为可加载插件(loadable plugin),需要额外的安装步骤,见 Ceph 插件 readme。
- MongoDB 插件改用 MongoDB Go Driver v2,要求 MongoDB 4.2+,不再支持 MongoDB 2.6–4.0。要监控 2.6–4.0 只能用旧版插件,旧版支持 2.6–5.3,可用于 Zabbix agent 2 6.0.0 及以上。
- Oracle 插件配置里的
Plugins.Oracle.CallTimeout不再生效,最长等待时间由 item timeout 决定。 - MongoDB 插件中
tcp://scheme 已弃用,为兼容旧配置保留。
二、权限变空:API 与认证
空 API allow list 的语义反转
这是最容易踩的一条。用户角色里 Allow list 选了、但一个方法都没列,现在表示拒绝所有 API 方法;以前这种空列表会被忽略,等于允许全部方法。
为保留既有访问,升级过程会给所有「选了 Allow list 但没列方法」的角色自动加上 * 通配符。所以升级完不是没事,而是权限暂时被放大成全部——必须去 Users > User roles 复查这些角色:把 * 换成角色实际需要的方法;如果该角色根本不需要 API 访问,就直接取消 Access to API 区块的 Enabled 勾选。
API 默认访问关闭
- 新安装:所有角色的 API 访问默认关闭,包括新建角色与默认用户角色。
- 已有安装:只有新建角色默认关闭。
Host interface API 方法移除
以下方法已移除,升级后会从现有用户角色的 Access to API 列表中消失:
hostinterface.create
hostinterface.update
hostinterface.delete
hostinterface.massadd
hostinterface.massremove
SAML 签名默认开启
SAML 认证(Users > Authentication)里所有签名选项——Messages、Assertions、AuthN requests、Logout requests、Logout responses——现在默认开启。新建 SAML 配置时,除非清掉这些签名选项,否则 SP private key 与 SP certificate 变成必填。已有 SAML 配置不受升级影响。
前端配置变量替换
$ALLOW_HTTP_AUTH 被 zabbix.conf.php 里的 $ZBX_FEATURE_FLAGS['http_auth_enabled'] feature flag 取代。
三、模板与过滤器静默失效
HTTP 类模板与媒体类型的 TLS 校验
连接 HTTPS 端点的模板与媒体类型现在默认校验对端 TLS 证书。影响面很宽:
- 所有云与 API 监控模板,例如
Claude API by HTTP、Cloudflare by HTTP、Kubernetes Cluster by HTTP - 所有 webhook 媒体类型,例如 Slack、Jira、Telegram
自签证书、内部 CA 签发证书、证书链不全的端点,升级后会直接报校验失败。新宏 {$HTTP.TLS.VERIFY} 控制行为:
none:关闭校验peer:只校验证书链与有效期full:全量校验
注意升级 Zabbix 时模板与媒体类型不会被自动升级(避免覆盖你自定义的改动),需按模板升级说明手动升级或手动添加,否则改动不会落到你现有的模板上。
废弃宏移除
| 已移除 | 替代 |
|---|---|
{ACK.DATE} | {EVENT.UPDATE.DATE} |
{ACK.MESSAGE} | {EVENT.UPDATE.MESSAGE} |
{ACK.TIME} | {EVENT.UPDATE.TIME} |
{EVENT.ACK.HISTORY} | {EVENT.UPDATE.HISTORY} |
{HOSTNAME} | {HOST.HOST} |
{IPADDRESS} | {HOST.IP} |
{PROFILE.*} | {INVENTORY.*} |
{TRIGGER.COMMENT} | {TRIGGER.DESCRIPTION} |
{TRIGGER.KEY} | {ITEM.KEY} |
{STATUS} | {TRIGGER.STATUS} |
{USER.ALIAS} | {USER.USERNAME} |
引用旧宏的触发器、动作、消息模板升级后会解析失败或渲染为空,属于不报错但结果不对的那类问题。
自定义主题 / 媒体类型命名冲突
新增三个预定义前端主题 Blue (classic)、Dark (classic)、Dark blue,以及新的 Push notification media type。若你已有名为 blue-classic-theme、dark-classic-theme、dark-blue-theme 的自定义主题,或有名为 Push notification 的媒体类型,升级前先改名。否则:
- 预定义主题会覆盖自定义主题的样式表,而自定义图表颜色仍生效,结果是两套主题混在一起。
- 现有媒体类型保持不变,但新的媒体类型不会被创建。
过滤参数移到 column options
随可自定义表格(customizable tables)功能,以下过滤参数从 filter 标签移到 column options,之前保存的收藏过滤标签会被重置,升级后要手动重配:
- Monitoring > Hosts:Show suppressed problems
- Monitoring > Latest data:Show tags、Tag name、Tag display priority、Show details
- Monitoring > Problems:Show tags、Tag name、Tag display priority、Show operational data、Compact view、Show details、Show timeline、Highlight whole row
其余会静默改变行为的改动
- Kubernetes 模板弃用,由
Kubernetes Cluster by HTTP模板取代;旧模板为兼容已有配置保留。 - 内部 proxy item 限制:
zabbix[proxy,*]与zabbix[proxy group,*]不再支持在被 proxy 或 proxy group 监控的主机上使用。 - UnsafeUserParameters 列表扩展:agent 与 agent 2 的
UnsafeUserParameters列表加入%字符。 - JavaScript 预处理内置方法只读:item 预处理脚本里内置 JS 对象的方法现在只读,之前改过 JS prototype 上内置方法的脚本会出问题。
- 历史存储参数弃用:server 配置文件的
HistoryStorageDateIndex、HistoryStorageURL、HistoryStorageTypes弃用,改用HistoryProvider;frontend 配置文件的$HISTORY弃用,改用$HISTORY_PROVIDERS。两个新参数都能选历史存储提供方:Elasticsearch、ClickHouse 或 SQL(默认)。新旧参数不能同时用。 - HTTP agent item 的 Request body 字段不再校验是否为合法 XML/JSON;选择 XML 作为 Request body 类型也不再需要 libxml2 库。
- 被禁用的链接(Graphs、Dashboards、Web)不再显示在受监控主机列表里。
- JSON 数据类型:item 值支持 JSON 类型;用 Elasticsearch 时,已弃用的
HistoryStorageTypes参数默认值现在包含json。 - New tag filter 表单:All tags 与 Tag list 之间的单选按钮被移除。
- Item values 以 HTML 显示时被隔离在 iframe 中(Item history widget)。
- 维护期状态改名:Approaching → Upcoming。
- 仪表板 slideshow 参数:
slideshow=1将移除,新增slideshow=on开始、slideshow=off停止。 - 全局正则表达式类型改名:Character string included → Contains string;Any character string included → Contains any substring from list;Character string not included → Does not contain string;Result is TRUE → Matches regular expression;Result is FALSE → Does not match regular expression。
升级前检查清单
- 先把 Elasticsearch 升到 8.0.0 以上,再升 Zabbix server(
AllowUnsupportedDBVersions不救这一条) - 核对 MySQL/Percona 8.4.0、MariaDB 10.11.00、PostgreSQL 15.0、TimescaleDB 2.20.0
- MySQL 库若是
utf8mb3/utf8mb3_bin,先转utf8mb4/utf8mb4_bin - PHP ≥ 8.2.0,Logback ≥ 1.5.25
- 清掉 pre-1.6 的 agent
- TimescaleDB 环境手动建
history_jsonhypertable - 三个自定义主题名、
Push notification媒体类型名先改名 - 升级后在 Users > User roles 复查被自动加上
*的角色,收窄或关掉 API 访问 - 检查是否有角色/脚本还在调
hostinterface.* - 新建 SAML 配置前准备好 SP private key 与 SP certificate
- 手动升级 HTTP 类模板与 webhook 媒体类型,自签证书端点设
{$HTTP.TLS.VERIFY}为none或peer - 全量搜一遍
{ACK.*}、{PROFILE.*}、{STATUS}、{TRIGGER.KEY}等已移除宏 - 重配 Monitoring > Hosts / Latest data / Problems 的收藏过滤
- 检查预处理脚本是否改过 JS 内置 prototype 方法
- 历史存储相关配置统一改成
HistoryProvider/$HISTORY_PROVIDERS,删掉旧参数 $ALLOW_HTTP_AUTH迁到$ZBX_FEATURE_FLAGS['http_auth_enabled']