20. 扩展

概述

尽管 Zabbix 提供了多种功能,但总可以扩展添加更多功能。扩展是一种方便的方式,可以在不更改其源代码的情况下修改和增强 Zabbix 的监控功能。

您可以通过使用内置扩展选项(捕获器监控项、用户参数等)或使用或创建自定义扩展(可加载模块、插件等)来扩展 Zabbix 功能。

本节概述了用于扩展 Zabbix 的所有选项。

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

捕获器监控项

Trapper items捕获器监控项 是接受传入数据而不是查询数据的监控项。捕获器监控项可用于将特定数据发送到 Zabbix server/proxy,例如,在长时间运行的用户脚本的情况下,定期发送可用性和性能数据。您可以使用Zabbix sender命令行实用程序或自己实现基于 JSON 的通信协议.(类似于 Zabbix 发送器中使用的协议)来执行此history.push操作。

外部检查

外部检查 是通过运行可执行文件(例如shell 脚本或二进制文件)来执行检查的监控项。

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

用户参数

用户参数 是用户定义的命令(与用户定义的键相关联),执行后可以从运行 Zabbix agent的主机检索所需的数据。用户参数对于配置 Zabbix 中未预定义的agent或agent2 监控项很有用。

system.run[] Zabbix agent 监控项

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

注意:system.run[]默认情况下,监控项是禁用的,如果使用,则必须启用(允许)并在 Zabbix agent或agent2 配置文件中定义(AllowKey`配置参数)

外部检查、用户参数和 Zabbix agent 监控项等监控项中的用户定义命令system.run[] 均由用于运行 Zabbix 组件的 OS 用户执行。要执行这些命令,此用户必须具有必要的权限。

HTTP agent 监控项

HTTP agent是通过 HTTP/HTTPS 执行数据请求的项。HTTP agent 监控项可用于向 HTTP 端点发送请求以从ElasticsearchOpenWeatherMap等服务检索数据,用于检查 Zabbix API 的状态或 Apache 或 Nginx Web 服务器的状态等。HTTP 代理项(启用了捕获器功能)也可以用作trapper items捕获器监控项

脚本监控项

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

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

高级扩展

可加载模块

可加载模块, 用C语言编写, 是一种多功能且注重性能的选项,用于扩展 UNIX 平台上 Zabbix 组件 (server, proxy, agent)的功能。加载模块基本上是 Zabbix 守护程序使用的共享库,并在启动时加载。该库应包含某些函数,以便 Zabbix 进程可以检测到该文件确实是它可以加载和使用的模块。

可加载模块具有许多优点,包括能够添加新指标或实现任何其他逻辑 (例如,Zabbix 历史数据导出),出色的性能以及开发、使用和共享其提供的功能的选项。它有助于无故障维护,并有助于更轻松地独立于 Zabbix 核心代码库提供新功能。

可加载模块在复杂的监控设置中特别有用。当监控嵌入式系统时,如果有大量监控参数或逻辑复杂或启动时间较长的繁重脚本,用户参数、 system.run[] Zabbix 代理项和外部检查等扩展将对性能产生影响。可加载模块提供了一种在不牺牲性能的情况下扩展 Zabbix 功能的方法。

插件

插件提供了可加载模块(用 C 编写)的替代方案。但是,插件仅是一种扩展 Zabbix agent 2 的方法。

插件是一个Go包,它定义结构并实现一个或多个插件接口(Exporter, Collector, Configurator, Runner, Watcher)。支持两种类型的 Zabbix agent 2 插件:

查看内置插件列表。

有关编写自己的插件的说明和教程,请参阅开发者中心

自定义警报

Webhooks

Webhook是一种 Zabbix媒体类型,它提供了一种将 Zabbix 警报功能扩展到外部软件(例如帮助台系统、聊天或 Messenger )的选项。与脚本项类似,Webhook 可用于使用自定义 JavaScript 代码进行 HTTP 调用,例如,将通知推送到不同的平台(例如 Microsoft Teams、Discord 和 Jira)。它还可以返回一些数据(例如,有关创建的帮助台工单的数据),然后这些数据会显示在 Zabbix 中

现有 webhook 可在 Zabbix Git 代码库中找到。有关自定义 webhook 开发,请参阅Webhook 开发指南.。

警报脚本

警报脚本是一种 Zabbix媒体类型,它提供了创建替代方法(脚本)来处理 Zabbix 警报的选项。如果您对 Zabbix 中现有的发送警报的媒体类型不满意,警报脚本会很有用

前端自定义

自定义主题

可以使用自定义主题来更改 Zabbix 前端的外观。请参阅有关创建和应用您自己的主题的说明

前端模块

前端模块提供了通过添加第三方模块或开发您自己的模块来扩展 Zabbix 前端功能的选项。使用前端模块,您可以添加新的菜单项、它们各自的视图、操作等。

全局脚本

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

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

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

用户定义的命令由运行 Zabbix 组件的 OS 用户执行。要执行这些命令,该用户必须具有必要的权限。

Zabbix API

Zabbix API是基于 HTTP 的 API,是 Zabbix 前端的一部分。使用 Zabbix API,您可以执行以下任何操作:

  • Automate routine tasks.
  • 以编程方式检索和修改 Zabbix 的配置。
  • 导入和导出 Zabbix 配置。
  • 访问 Zabbix 历史和趋势数据。
  • 配置应用程序以与 Zabbix 配合使用。
  • 将 Zabbix 与第三方软件集成。
  • 自动执行日常任务。

see Zabbix API Method reference. Zabbix API 包含多种方法,这些方法名义上被分组到单独的 API 中。每种方法执行特定任务。有关可用方法以及 Zabbix API 提供的功能的概述,请参阅 Zabbix API方法参考