2022 Zabbix中国峰会
2022 Zabbix中国峰会

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;

重大变化

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 双精度数据类型

如果在压缩功能中使用了 TimescaleDB,那么在升级到 Zabbix 7.0.0 之前,有必要手动升级 TimescaleDB 以使用双精度数据类型。您可以通过 系统信息 前端部分的警告或 Zabbix server日志来判断 TimescaleDB 是否未使用双精度数据类型: “数据库尚未升级以使用双精度值。未来版本将删除对旧数值类型的支持。”

更多信息,请参见 旧数值 (浮点) 类型被弃用

TimescaleDB 中的审计日志转换为超表

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

要成功升级现有安装:

  1. 启动 Zabbix 服务器;这将升级现有数据库。
  2. 检查服务器日志文件,确认数据库升级成功;如果成功,请停止 Zabbix 服务器,然后继续下一步。
  3. 运行 postgresql/timescaledb/schema.sql 脚本(自 Zabbix 7.0.0 起,脚本的位置和名称已从 postgresql/timescaledb.sql 更改为 postgresql/timescaledb/schema.sql)。 请注意,如果启动 Zabbix 服务器而没有运行此脚本,将记录一个警告。

另请参见:

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

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

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

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

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

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

网络发现中的并发性

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

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

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

API变更

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

最低要求的 PHP 版本

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

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

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

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

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

新的监控项历史数据仪表板小部件取代了纯文本小部件,提供了几项改进。

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

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

其他

异步轮询器

升级后,所有代理、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 认证的可用性。

Oracle DB 已废弃

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

软件更新检查

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

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

对整数项修剪浮点值

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

美国时间格式

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

之前 现在

图标替换为字体

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

最新数据筛选器

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

配置参数

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

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

聚合计算

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

  • 聚合函数现在还支持非数字类型进行计算。例如,使用 countcount_foreach 函数可能会很有用。
  • countcount_foreach 聚合函数支持可选参数 operatorpattern,可用于微调项目过滤,并仅计算符合给定条件的值。
  • 所有 foreach 函数 不再将不支持的项目计入计数。
  • 函数 last_foreach,先前配置为忽略时间段参数,现在接受它作为可选参数。

放弃旧的数值型(浮点型)数值类型

自 Zabbix 5.0.0 起,数值(浮点型)数据类型支持约 15 位数字的精度,范围约为 -1.79E+308 到 1.79E+308。 这在新安装中默认实现。 对于已在 Zabbix 5.0 之前创建的现有安装进行升级时,将自动应用数据库升级补丁,但不包括 TimescaleDB 与压缩。

对于 Oracle 数据库、旧版本的 MySQL 数据库和大型安装,执行补丁可能需要很长时间。 因此,建议在开始升级之前手动更新数据类型。

此补丁会更改历史记录和趋势表中的数据列,这些表通常包含大量数据,因此完成可能需要一些时间。 由于无法准确预测其所需的时间,并且取决于服务器性能、数据库管理系统配置和版本,建议首先在生产环境之外的环境中测试补丁。 对于默认配置为 MySQL 8.0 和 MariaDB 10.5 的大型表,该补丁因算法高效且以前使用的是相同的双精度类型但具有有限的精度,因此数据本身不需要修改,已知可以立即执行。

请按照 将数据库升级为主键和双精度数据类型 页面上的说明为您的数据库执行补丁(SQL 文件)。

请注意,对于 TimescaleDB,压缩支持 必须在应用此补丁后才能打开。

重要!仅对服务器数据库运行这些脚本。

应用补丁的步骤如下:

  • 停止 Zabbix 服务器。
  • 为您的数据库运行脚本。
  • 再次启动 Zabbix 服务器。

设置Windows代理服务启动类型

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

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

模板

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

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

从二进制包安装 准备导入数据库结构时,数据库相关文件的位置已更改,以更好地对应源中的文件结构:

  • 基础初始化表结构文件 (schema.sql, data.sql, images.sql) 位于数据库目录的根目录下。
  • 可选文件或补丁 升级数据库表 位于 option-patches 目录。
  • 数据库扩展和加载项 现在作为子目录,在相应的数据库目录中,以扩展名命名。
  • TimescaleDB相关变化:
    • tsdb 缩写已经修改为 timescaledb
    • option-patches 目录包含 with-compressionwithout-compression 子目录; 包含可选的文件或补丁,用于 升级数据库表 依赖于 TimescaleDB 压缩 设置
    • TimescaleDB 的超表结构创建文件已移至 database/postgresql/timescaledb/schema.sql.

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

# Previous:                                       # Current:
       
       database                                            database
       ├── mysql                                           ├── mysql
       │  ├── data.sql                                     │  ├── option-patches
       │  ├── double.sql                                   │  │  ├── double.sql
       │  ├── history_pk_prepare.sql                       │  │  └── history_pk_prepare.sql
       │  ├── images.sql                                   │  ├── data.sql
       │  └── schema.sql                                   │  ├── images.sql
       │                                                   │  └── schema.sql
       │                                                   │
       ├── postgresql                                      ├── postgresql
       │  ├── tsdb_history_pk_upgrade_no_compression       │  ├── option-patches
       │  │  ├── history_pk.sql                            │  │  ├── double.sql
       │  │  ├── history_pk_log.sql                        │  │  └── history_pk_prepare.sql
       │  │  ├── history_pk_str.sql                        │  ├── timescaledb
       │  │  ├── history_pk_text.sql                       │  │  ├── option-patches
       │  │  └── history_pk_uint.sql                       │  │  │  ├── with-compression
       │  ├── tsdb_history_pk_upgrade_with_compression     │  │  │  │  ├── history_pk.sql
       │  │  ├── history_pk.sql                            │  │  │  │  ├── history_pk_log.sql
       │  │  ├── history_pk_log.sql                        │  │  │  │  ├── history_pk_str.sql
       │  │  ├── history_pk_str.sql                        │  │  │  │  ├── history_pk_text.sql
       │  │  ├── history_pk_text.sql                       │  │  │  │  ├── history_pk_uint.sql
       │  │  └── history_pk_uint.sql                       │  │  │  │  └── trends_upgrade.sql
       │  ├── data.sql                                     │  │  │  └── without-compression
       │  ├── double.sql                                   │  │  │     ├── history_pk.sql
       │  ├── history_pk_prepare.sql                       │  │  │     ├── history_pk_log.sql
       │  ├── images.sql                                   │  │  │     ├── history_pk_str.sql
       │  ├── schema.sql                                   │  │  │     ├── history_pk_text.sql
       │  └── timescaledb.sql                              │  │  │     ├── history_pk_uint.sql
       │                                                   │  │  │     └── trends_upgrade.sql
       │                                                   │  │  └── schema.sql
       │                                                   │  ├── data.sql
       │                                                   │  ├── images.sql
       │                                                   │  └── schema.sql
       ├── ...                                             ├── ...

如果包含之前的目录结构,请更新脚本。

监控项超时配置更改

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

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

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

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

浏览器监控项

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

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

更新的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)。