尽管 Zabbix 提供了丰富的功能,但总有扩展额外功能的空间。
扩展是一种方便的方法,可以在不修改 Zabbix 源代码的情况下修改和增强其监控能力。
您可以使用内置的扩展选项(主动式 监控项、用户参数等),或者使用或创建自定义扩展(可加载模块、插件等)来扩展 Zabbix 功能。
本节概述了所有可用于扩展 Zabbix 的选项,并提供了相关参考链接。
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 itemssystem.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/HTTPS 执行数据请求的 监控项。 HTTP agent 监控项 对于向 HTTP 端点发送请求很有用,例如从诸如 Elasticsearch 和 OpenWeatherMap 的服务中检索数据,检查 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包,用于定义结构并实现一个或多个插件接口 (Exporter、Collector、Configurator、Runner、Watcher)。支持两种类型的Zabbix agent 2插件:
请参阅内置列表。
有关编写自己的插件的说明和教程,请参阅Developer center。
一个 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 是一个基于 HTTP 的 API,属于 Zabbix 前端的一部分。 通过 Zabbix API,您可以执行以下任意操作:
Zabbix API 由多种方法组成,这些方法名义上被分组为独立的 API。 每种方法执行特定的任务。 有关可用方法以及 Zabbix API 提供的功能概述, 请参见 Zabbix API Method reference。