21 扩展

概述

尽管 Zabbix 提供了丰富的功能,但总有扩展额外功能的空间。
扩展是一种方便的方法,可以在不修改 Zabbix 源代码的情况下修改和增强其监控能力。

您可以使用内置的扩展选项(主动式 监控项、用户参数等),或者使用或创建自定义扩展(可加载模块、插件等)来扩展 Zabbix 功能。

本节概述了所有可用于扩展 Zabbix 的选项,并提供了相关参考链接。

使用自定义命令进行数据采集

Trapper 监控项

Trapper items 是一种 监控项,它接受传入的数据,而不是主动查询数据。
Trapper 监控项 可用于将特定数据发送到 Zabbix server 或 proxy,例如,在长时间运行的用户脚本场景中发送周期性的可用性和性能数据。
使用 Zabbix sender 工具或 Zabbix sender protocol,可以将数据发送到 Zabbix server 或 proxy。
此外,也可以使用 history.push 的 API 方法将数据发送到 Zabbix server。

外部检查

一个 external check 是用于通过运行可执行文件(例如,一个 shell script 或二进制文件)来执行检查的 监控项。

外部检查由 Zabbix server 或 proxy 执行(当 主机 被 proxy 监控时),并且不需要在被监控的 主机 上运行一个 agent。

用户参数

一个 user parameter 是一个用户定义的命令(与一个用户定义的键相关联),当执行时,可以从 主机 中检索所需的数据,其中 Zabbix agent 正在运行。
用户参数对于配置 Zabbix 中未预定义的 agent 或 agent 2 监控项 非常有用。

system.run[] Zabbix agent items

system.run[] Zabbix agent item 是用户定义命令(与预定义的键 system.run[] 关联, 例如 system.run[myscript.sh])的 监控项,该命令可以在运行 Zabbix agent 的 主机 上执行。

注意:默认情况下 system.run[] 监控项 是禁用的,如果需要使用, 必须手动启用(allowed)并在 Zabbix agent 或 agent 2 的配置 file 中进行定义(AllowKey 配置参数)。

在 监控项 中定义的用户命令,例如外部检查、用户参数和 system.run[] Zabbix agent 监控项,是从用于 run Zabbix 组件的 OS 用户执行的。
为了 execute 这些命令,该用户必须具有必要的权限。

HTTP agent 监控项

HTTP agent 监控项 是一种用于通过 HTTP/HTTPS 执行数据请求的 监控项。 HTTP agent 监控项 对于向 HTTP 端点发送请求很有用,例如从诸如 ElasticsearchOpenWeatherMap 的服务中检索数据,检查 Zabbix API 或 Apache 或 nginx 网络服务器的状态等。 启用捕获功能的 HTTP agent 监控项 还可以作为 trapper 监控项 使用。

脚本 监控项

一个 script item 是用于执行用户定义的 JavaScript 代码以通过 HTTP/HTTPS 检索数据的 监控项。当 HTTP agent 监控项 提供的功能不足时,脚本 监控项 将非常有用。 例如,在需要多步骤或复杂逻辑的高要求数据收集场景中, 可以配置一个脚本 监控项 来进行 HTTP 调用,然后处理接收到的数据, 再将转换后的值传递给第二个 HTTP 调用。

HTTP agent 监控项 和脚本 监控项 受 Zabbix server 和 proxy 支持, 且不需要在被监控的 主机 上运行 agent。

高级扩展

可加载模块

Loadable modules,用C语言编写,是一种多功能且注重性能的扩展Zabbix组件(服务器、proxy、agent)功能的方式, 适用于UNIX平台。可加载模块本质上是一个共享库,由Zabbix守护进程使用,并在启动时加载。 该库应包含某些特定函数,以便Zabbix进程可以识别出该file确实是一个它可以加载并使用的模块。

可加载模块具有多项优势,包括能够添加新的指标或实现任何其他逻辑(例如,Zabbix 提供历史数据导出回调函数), 高性能,以及开发、使用和共享其提供的功能的灵活性。这有助于无故障维护, 并使新功能的交付更加简便,且独立于Zabbix核心代码库。

可加载模块在复杂的监控设置中尤其有用。当监控嵌入式系统、监控参数数量庞大, 或脚本具有复杂逻辑、启动时间较长时,使用扩展功能(如用户参数、system.run[] Zabbix agent 监控项 和外部检查) 将会影响性能。可加载模块提供了一种在不牺牲性能的前提下扩展Zabbix功能的方式。

插件

Plugins为可加载模块(用C编写)提供了替代方案。 然而,插件仅用于扩展Zabbix agent 2。

插件是一个Go包,用于定义结构并实现一个或多个插件接口 (ExporterCollectorConfiguratorRunnerWatcher)。支持两种类型的Zabbix agent 2插件:

请参阅内置列表。

有关编写自己的插件的说明和教程,请参阅Developer center

告警自定义

Webhooks

一个 webhook 是 Zabbix 的一个 media type ,提供将 Zabbix 告警功能扩展到外部软件(如帮助台系统、聊天工具或消息传递应用)的选项。 与脚本 监控项 类似,webhook 对于使用自定义 JavaScript 代码发起 HTTP 调用非常有用, 例如,将通知推送到不同的平台,如 Microsoft Teams、Discord 和 Jira。 还可以返回一些数据(例如关于已创建的帮助台工单的信息),然后这些数据会在 Zabbix 中显示。

现有的 webhook 可以在 Zabbix 的 Git repository 中找到。 有关自定义 webhook 的开发, 请参阅 Webhook development guidelines

告警脚本

一个 alert script 是 Zabbix 中的一个 media type, 它提供了一个可选方式(脚本),用于处理 Zabbix 警报的 create。 如果您对 Zabbix 中现有的用于发送警报的媒介类型不满意,则警报脚本将非常有用。

前端自定义

自定义主题

可以通过使用自定义主题来更改 Zabbix 前端的视觉外观。有关创建和应用您自己的主题的信息,请参阅instructions

前端模块

Frontend modules 提供了一个选项,用于通过添加第三方模块或开发自己的模块来扩展 Zabbix 前端功能。 使用前端模块,您可以添加新的菜单 监控项、相应的视图、操作等。

全局脚本

一个 global script 是一组用户自定义的命令,可在监控目标 get 上执行(通过 shell (/bin/sh) 解释器)。 根据配置的作用域和用户权限而定。 可以为以下操作配置全局脚本:

全局脚本在许多情况下都非常有用。 例如,如果为动作操作或手动 主机 操作配置了全局脚本,则可以使用全局脚本 自动或手动地 execute remote commands 例如重启应用程序(Web 服务器、中间件、CRM 等) 或者释放磁盘空间(删除旧文件、清理 /tmp 等)。 或者,另一个示例,如果为手动事件操作进行了配置, 您可以使用全局脚本来管理外部系统中的问题工单。

全局脚本可以由 Zabbix server、proxy 或 agent 执行。

用户定义的命令是从用于 run Zabbix 组件的 OS 用户执行的。 要 execute 这些命令,该用户必须具有必要的权限。

Zabbix API

Zabbix API 是一个基于 HTTP 的 API,属于 Zabbix 前端的一部分。 通过 Zabbix API,您可以执行以下任意操作:

  • 以编程方式检索和修改 Zabbix 的配置。
  • 导入和 export Zabbix 配置。
  • 访问 Zabbix 的历史数据和趋势数据。
  • 配置应用程序以与 Zabbix 协同工作。
  • 将 Zabbix 与第三方软件集成。
  • 自动化常规任务。

Zabbix API 由多种方法组成,这些方法名义上被分组为独立的 API。 每种方法执行特定的任务。 有关可用方法以及 Zabbix API 提供的功能概述, 请参见 Zabbix API Method reference