11 升级说明 7.0.0

这些说明适用于从 Zabbix 6.4.x 升级到 Zabbix 7.0.0。

所有说明分为:

  • 重大更改 - 可能会破坏现有安装的更改以及与升级过程相关的其他关键信息
  • 其他 - 描述 Zabbix 功能变化的所有其他信息

另请参见:

  • 升级程序 获取所有关于从 Zabbix 6.4.0 之前的版本升级的相关信息;
  • 升级 HA 集群 获取关于升级 高可用性 (HA) 集群中的server 的说明。

升级过程

为了在 MySQL/MariaDB 上完成 Zabbix server 的成功升级,如果启用了二进制日志记录、没有超级用户权限并且 MySQL 配置文件中未设置 log_bin_trust_function_creators = 1,您可能需要在 MySQL 中设置 GLOBAL log_bin_trust_function_creators = 1

使用 MySQL 控制台设置该变量,运行:

mysql> SET GLOBAL log_bin_trust_function_creators = 1;

升级成功完成后,可以禁用此选项:

mysql> SET GLOBAL log_bin_trust_function_creators = 0;

重大变化

升级至 7.0.1 后 TimescaleDB 服务器崩溃

从 Zabbix 7.0.0 升级到 7.0.1(或更高版本)并使用 TimescaleDB 会导致服务器崩溃。 此问题是由 Zabbix 7.0 中审计日志表压缩作业问题的变通方法引起的,该方法不可逆地改变了审计日志表的压缩策略。

请参阅 已知问题 以了解手动修复审计日志表的详细信息。

如果您尚未升级到 Zabbix 7.0.0,请注意,从 7.0 之前的 Zabbix 版本升级到 7.0.1 不应存在此类问题。 有关升级说明,请参阅 升级 TimescaleDB 架构

升级至 7.0.5 后 PostgreSQL/TimescaleDB 数据库恢复错误

使用 pg_restore 恢复在 Zabbix 7.0.0-7.0.4 中创建的 PostgreSQL 或 TimescaleDB 备份将导致 base36_decode 函数缺失的错误,从而导致恢复失败。 此错误在使用 pg_dump 创建备份时发生。

请参阅 已知问题 以了解在 创建备份前 手动修复此问题的详细信息。

如果您尚未升级至 Zabbix 7.0.0,需要注意的是,从 7.0 之前的 Zabbix 版本升级至 7.0.5 不应存在此类问题。 有关升级说明,请参阅 升级 TimescaleDB 架构

历史函数参数中反斜杠的转义

在历史函数的字符串参数中,已添加了对反斜杠的正确转义。

由于从Zabbix 7.0之前的版本升级时会额外添加反斜杠,这会导致参数变长,如果参数长度超过255个字符的最大数据大小限制,可能会导致触发器函数损坏。

为了避免这个问题,建议在升级前手动将过长的参数移至用户宏中。

请注意,自Zabbix 7.0.11版本起,已为从Zabbix 7.0之前的版本升级时添加了对结果参数长度的额外检查。如果结果长度超过最大大小限制,这些参数不会被升级,同时在日志中打印警告,要求用户手动修复列出的参数。

另请参阅与转义相关的升级问题

最低要求的 PHP 版本

最低要求的 PHP 版本已从 7.4.0 提升至 8.0.0。

Windows agent 配置文件的默认位置

Zabbix agent 在 Windows 上查找配置文件的默认位置已更改。现在,agent 会在agent 二进制文件 zabbix_agentd.exe 所在的目录中查找配置文件(而不是之前的 C:\zabbix_agentd.conf)。

Windows 上的 Zabbix agent 2 以前已经在二进制文件 zabbix_agent2.exe 所在的目录中查找默认配置文件。然而,在新版本中,agent2 期望配置文件名为 zabbix_agent2.conf(而不是 zabbix_agent2.win.conf)。

另请参阅:在 Windows 上安装 Zabbix agent

agent 2 插件配置中允许空值

现在,在 Zabbix agent 2 的插件相关配置参数中允许空值。

不再支持 TimescaleDB 1.x

TimescaleDB 1.x 的支持已移除

TimescaleDB上的双精度数据类型

在升级到Zabbix 7.0.0之前,如果使用TimescaleDB并启用了压缩,则需要手动升级TimescaleDB以使用双精度数据类型。 可以通过系统信息前端部分或Zabbix服务器日志中的警告来判断TimescaleDB是否未使用双精度数据类型: "数据库尚未升级以使用双精度值。在未来的版本中,将移除对旧数值类型的支持。"

更多信息,请参阅升级到扩展范围的数值

审核日志转换为TimescaleDB上的超表

在新安装中,auditlog表已转换为TimescaleDB上的超表,以从时间上的自动分区(默认为7天)和更佳性能中获益。

为了成功升级现有安装,请参阅升级TimescaleDB架构

另请参阅:支持的TimescaleDB版本

为代理创建独立的数据库表

代理记录已从 hosts 表中移出,并现在存储在新的 proxy 表中。

此外,代理的运行数据(如上次访问时间、版本、兼容性)已从 host_rtdata 表中移出,现在存储在新的 proxy_rtdata 表中。

API 中也新增了一个新的 proxy 对象。所有与代理相关的操作都应更新为通过这个新的代理对象进行。

数据库监控项的查询执行超时

根据item超时配置的更改,对于数据库监控项,ODBC登录超时和查询执行超时现在都限制为在item配置表单中设置的超时参数值。

更新的agent/agent2项

  • 当与Zabbix agent 2一起使用时,wmi.getwmi.getall 现在返回一个JSON,其中布尔值被表示为字符串(例如,"RealTimeProtectionEnabled": "True",而不是之前返回的 "RealTimeProtectionEnabled": true),以匹配这些项在Zabbix agent上的输出格式;
  • oracle.ts.stats 新增了一个conname参数,用于指定目标容器名称。返回数据的JSON格式已更新。当在键参数中未指定tablespacetypeconname时,返回的数据将包含一个额外的JSON级别,其中包含容器名称,允许区分不同的容器。
  • 不能再配置不带name参数的net.dns.*项。虽然name参数一直被列为强制的,但如果省略,它以前会解析为一个默认值(zabbix.com),但现在不再是这样。

有关不会破坏兼容性的监控项更改列表,请参阅Zabbix 7.0.0的新功能

在Zabbix高可用性中使用SNMP traps

现在,Zabbix在高可用性设置中切换活动节点时可以从正确位置读取SNMP trap文件。

但是,为了使此功能正常工作,需要将所有bash、perl和SNMPTT脚本中的时间格式更新为"%Y-%m-%dT%H:%M:%S%z"(例如2024-01-10T11:56:14+0300)。

增加了仪表盘小部件的最大尺寸和数量

所有小部件的默认宽度已增加了3倍。请注意,如果您使用自定义小部件,可能需要更新manifest.json文件的相应参数(例如,在配置自定义时钟小部件时,width需要从4更改为12)。

现在,一个小部件的宽度最多可以达到72列(之前为24列),高度可以为1至64行(之前为2至32行)。因此,仪表板现在可以横向容纳多达72个小部件。

监控项历史和纯文本小部件

全新的 监控项历史 仪表盘小部件已取代了 纯文本 小部件,提供了多项改进。

与仅以纯文本形式显示最新监控项数据的 纯文本 小部件不同,监控项历史 小部件支持多种显示选项,适用于多种监控项类型(数值、字符、日志、文本和二进制)。 例如,它可以显示进度条或指示器,为二进制数据类型显示图像(对于 浏览器监控项 非常有用),以及突出显示文本值(对于 日志文件监控 非常有用)。

升级后,所有先前配置的 纯文本 小部件将自动替换为 监控项历史 小部件,保留相同的配置设置。 但是,任何API脚本 引用 纯文本 小部件的必须手动更新。

升级至 7.0.4 后某些内置宏解析方式的变更

在 Zabbix 7.0.4 中,宏 {HOST.CONN}, {HOST.DNS}, {HOST.IP}, {EVENT.CAUSE.*}, {EVENT.TAGS.*}, 和 {EVENT.SYMPTOMS} 的解析行为已修正,以保持与其他内置宏的一致性。现在,如果在评估它们的值时发生错误,它们将解析为 *UNKNOWN*

由于这一变更,为了确保功能的正确性,需要更新以下集成的媒体类型:iTop, Jira Service Desk, ManageEngine ServiceDesk, SolarWinds Service Desk

这一变更也可能影响使用上述宏的任何自定义脚本或集成。

API变更

查看Zabbix 7.0.0中的API变更列表。

其他

Oracle DB 已废弃

自 Zabbix 7.0 起,对 Oracle 作为后端数据库的支持已经被废弃,并预计在未来版本中将被完全移除。

软件更新检查

现在,新安装和现有安装都默认添加了软件更新检查功能 - Zabbix 前端将与公共 Zabbix 端点通信,以检查更新。

您可以通过在服务器配置中设置 AllowSoftwareUpdateCheck=0 来禁用此检查。

对整数项修剪浮点值

现在,如果接收到一个无符号整数项的浮点值,该值将从小数部分修剪并保存为整数。之前,浮点值会使整数项变为不受支持的。

美国时间格式

当使用默认(en_US)前端语言时,前端中的时间和日期显示现在符合美国标准的时间/日期显示格式。

之前 现在

异步轮询器

升级后,所有代理、HTTP代理和 walk[OID] SNMP 检查将被移动到异步轮询器

在运行时检测 cURL 库功能

以前,Zabbix server、proxy或agent的 cURL 库功能是在构建时检测的。如果 cURL 功能被升级,为了利用它们,必须重新编译相应的 Zabbix 组件。

现在,只需重新启动即可使升级后的 cURL 库功能在 Zabbix 中生效,不再需要重新编译。这对于 Zabbix server、proxy或agent都是如此。

另外:

  • 最低要求的构建时 cURL 版本已提高到 7.19.1;
  • 在构建时,Zabbix 只检查 cURL 库是否可用(如果请求),并满足版本要求;
  • 当发生运行时 cURL 库错误时,将添加正在使用的版本(例如,“cURL 库不支持 SSL/TLS(使用版本 7.88.1)”);
  • 当启动 Zabbix server并记录 SMTP 认证时,将写入正在使用的 cURL 库的 SMTP 认证的可用性。

监控项超时配置更改

升级后,所有支持的监控项类型的全局超时将根据服务器配置文件中的 Timeout 参数值设置。 如果配置了proxy,则默认情况下,它将使用服务器的全局超时设置。

当使用升级后的server(版本为 7.0.0 或更新版本)与较旧的proxy或agent时,proxy或agent将像以前一样工作:

  • proxy将使用proxy配置文件中的 Timeout 参数;
  • agent将使用agent配置文件中的 Timeout 参数。

已从ModbusMQTT插件的配置文件中删除了超时参数。 现在可以使用监控项配置表单设置请求执行超时。

浏览器监控项

Zabbix 新增了一种新的监控项类型 - 浏览器监控项,可以使用浏览器监控复杂的网站和 Web 应用程序。 浏览器监控项允许执行用户定义的 JavaScript 代码,模拟浏览器相关操作,如点击、输入文本、浏览网页等。

此外,此功能还增加了以下更改:

网络发现中的并发性

新版本中重新设计了网络发现过程,允许在服务检查之间实现并发性。 新增了一个发现管理器进程以及可配置数量的发现工作线程(或线程)。发现管理器进程处理发现规则,并为每个规则创建一个带有任务(服务检查)的发现作业。服务检查由发现工作线程接收并执行。

StartDiscoverers 参数现在确定了用于发现的总可用发现工作线程数。 StartDiscoverers 的默认值从 1 提高到 5,并且范围从 0-250 提高到 0-1000。从之前 Zabbix 版本中的 discoverer 进程已被删除。

此外,现在可以在前端配置每个规则的可用工作线程数。此参数为可选参数。 在升级过程中,它将被设置为前面 Zabbix 版本中的 "One"。

图标替换为字体

前端中的所有图标都已从图标图像表单切换为字体。

最新数据筛选器

监控最新数据中,默认情况下,如果未设置筛选器,则不再显示子筛选器和数据。 但请注意,以前使用仅子筛选器设置的保存的筛选器不受影响。 在这种情况下,子筛选器将保持可见,并且即使没有设置主筛选器,数据也将显示出来。

配置参数

以下几个配置参数的默认值已更改:

这些更改不会影响已显式设置了这些参数的现有安装。

聚合计算

多个聚合函数已经更新。现在:

  • 聚合函数现在也支持非数值类型进行计算。这可能在例如使用countcount_foreach函数时有用。
  • countcount_foreach聚合函数支持可选参数operatorpattern,可以用于细化监控项过滤,仅计算符合给定条件的值。
  • 所有foreach函数不再在计数中包括不受支持的监控项。
  • 函数last_foreach,以前配置为忽略时间周期参数,现在接受它作为一个可选参数。

旧的数值(浮点)类型已删除

自Zabbix 5.0起,数值(浮点)数据类型支持大约15位数的精度,范围大约从-1.79E+308到1.79E+308。 旧的数值类型虽已禁用但仍受支持。到了Zabbix 6.4,它被标记为已废弃,并且从Zabbix 7.0开始,它已被完全移除。

如果您的安装尚未升级以使用扩展范围的数值,则在报表系统信息中会显示以下警告: "数据库历史表已升级:否。对旧的数值类型的支持已废弃。请升级到扩展范围的数值。"

在升级到Zabbix 7.0时,以下数据库会自动升级:

  • MySQL
  • PostgreSQL/TimescaleDB(无压缩)
  • Oracle

但是,对于Oracle、旧版MySQL以及大型安装,建议在升级到Zabbix 7.0之前手动升级数据类型。

对于TimescaleDB带压缩的数据库,必须手动升级。

有关升级详情,请参阅升级到扩展范围的数值

设置 Windows agent 服务启动类型

已添加设置 Zabbix agent/agent 2 Windows 服务启动类型的选项 (-S --startup-type)。 此选项允许配置 agent/agent 2 服务在 Windows 启动时自动启动 (automatic)、在自动启动的服务完成启动后启动 (delayed)、由用户或应用程序手动启动 (manual) 或完全禁用服务 (disabled)。

在执行 从 MSI 安装 Windows agent 时,如果未在 STARTUPTYPE 命令行参数 中另行指定,Windows Server 2008/Vista 及更高版本的默认启动类型现在为 delayed。 这提高了 Zabbix agent/agent 2 Windows 服务的可靠性和性能,特别是在系统重启期间。

模板

有关新模板和现有模板的更改,请参阅模板更改

数据库相关文件的新目录结构

从软件包安装Zabbix并准备数据库模式时,数据库相关文件的位置已更改,以更好地对应源代码中的文件结构:

  • 基础初始化文件schema.sqldata.sqlimages.sql)位于数据库目录的根目录。
  • 可选文件/补丁用于升级数据库表位于option-patches目录。
  • 数据库扩展和附加组件现在是子目录,以扩展名命名,并位于相应的数据库目录中。
  • TimescaleDB特定更改:
    • 简称tsdb已被timescaledb替换。
    • option-patches目录包括with-compressionwithout-compression子目录; 这些包含可选文件/补丁用于升级数据库表取决于TimescaleDB压缩设置。
    • TimescaleDB的hypertable模式创建文件已移动到database/postgresql/timescaledb/schema.sql

此外,请注意以下更改:

  • 所有history_pk_*.sql文件已重命名为history_upgrade_*.sql,并添加了一个trends_upgrade.sql文件以改进数据库升级脚本。
  • double.sql文件已被删除,因为旧的数值(浮点)值类型已被移除。

下面是MySQL和PostgreSQL数据库的先前和当前目录结构的比较。

# 以前:                                         # 当前:
       
       database                                            database
       ├── mysql                                           ├── mysql
       │  ├── data.sql                                     │  ├── option-patches
       │  ├── double.sql                                   │  │  └── history_upgrade_prepare.sql
       │  ├── history_pk_prepare.sql                       │  ├── data.sql
       │  ├── images.sql                                   │  ├── images.sql
       │  └── schema.sql                                   │  └── schema.sql
       │                                                   │
       │                                                   │
       ├── postgresql                                      ├── postgresql
       │  ├── tsdb_history_pk_upgrade_no_compression       │  ├── option-patches
       │  │  ├── history_pk.sql                            │  │  └── history_upgrade_prepare.sql
       │  │  ├── history_pk_log.sql                        │  ├── timescaledb
       │  │  ├── history_pk_str.sql                        │  │  ├── option-patches
       │  │  ├── history_pk_text.sql                       │  │  │  ├── with-compression
       │  │  └── history_pk_uint.sql                       │  │  │  │  ├── history_upgrade.sql
       │  ├── tsdb_history_pk_upgrade_with_compression     │  │  │  │  ├── history_upgrade_log.sql
       │  │  ├── history_pk.sql                            │  │  │  │  ├── history_upgrade_str.sql
       │  │  ├── history_pk_log.sql                        │  │  │  │  ├── history_upgrade_text.sql
       │  │  ├── history_pk_str.sql                        │  │  │  │  ├── history_upgrade_uint.sql
       │  │  ├── history_pk_text.sql                       │  │  │  │  └── trends_upgrade.sql
       │  │  └── history_pk_uint.sql                       │  │  │  └── without-compression
       │  ├── data.sql                                     │  │  │     ├── history_upgrade.sql
       │  ├── double.sql                                   │  │  │     ├── history_upgrade_log.sql
       │  ├── history_pk_prepare.sql                       │  │  │     ├── history_upgrade_str.sql
       │  ├── images.sql                                   │  │  │     ├── history_upgrade_text.sql
       │  ├── schema.sql                                   │  │  │     ├── history_upgrade_uint.sql
       │  └── timescaledb.sql                              │  │  │     └── trends_upgrade.sql
       │                                                   │  │  └── schema.sql
       │                                                   │  ├── data.sql
       │                                                   │  ├── images.sql
       │  └── ...                                          │  └── schema.sql
       └── ...

如果您的脚本中包含对先前目录结构或文件的引用,请更新您的脚本。

JSON协议用于被动agent检查

已实现基于JSON的协议用于被动agent检查

为了与旧版agent保持兼容,已添加回退到旧版纯文本协议的功能。如果agent返回"ZBX_NOTSUPPORTED",Zabbix将缓存接口为旧协议,并通过仅发送纯文本item键来重试检查。

Zabbix get现在可以使用新的选项-P --protocol <value>运行,其中"value"可以是:

  • auto - 使用JSON协议连接,回退并使用纯文本协议重试(默认);
  • json - 使用JSON协议键连接;
  • plaintext - 使用纯文本协议连接,其中仅发送item键。

如果item键不受支持,Zabbix get现在将返回退出代码1,而不是0