[comment]: # ({85991cf3-4f969495})
# 19 扩展

[comment]: # ({/85991cf3-4f969495})

[comment]: # ({99ac2a08-574b73cc})
#### 概述

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

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

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

[comment]: # ({/99ac2a08-574b73cc})

[comment]: # ({506e8c98-7b2875dd})
#### 使用自定义命令进行数据收集

[comment]: # ({/506e8c98-7b2875dd})

[comment]: # ({d1691dc9-2d4c92f9})
##### 捕获器监控项

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

[comment]: # ({/d1691dc9-2d4c92f9})

[comment]: # ({e7b67f3a-327d4393})
##### 外部检查

[外部检查](/manual/config/items/itemtypes/external) 是通过运行可执行文件（例如shell 脚本或二进制文件）来执行检查的监控项。

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

[comment]: # ({/e7b67f3a-327d4393})

[comment]: # ({e86032a0-ce750625})
##### 用户参数

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

[comment]: # ({/e86032a0-ce750625})

[comment]: # ({7929dcdd-014456ed})
##### `system.run[]` Zabbix agent 监控项

`system.run[]` Zabbix [agent 监控项](/manual/config/items/itemtypes/zabbix_agent#system.run)
是一个用于用户自定义命令的监控项（与预定义键 `system.run[]` 关联，
例如 `system.run[myscript.sh]`），可在运行 Zabbix agent 的主机上执行。 

注意：`system.run[]` 监控项默认处于禁用状态，如需使用，
必须在 Zabbix agent 或 agent 2 配置文件中启用（[允许](/manual/config/items/restrict_checks)）并进行定义
（`AllowKey` 配置参数）。

[comment]: # ({/7929dcdd-014456ed})

[comment]: # ({2550c7b3-8ef20381})
::: noteimportant
外部检查、用户参数和 Zabbix agent 监控项等监控项中的用户定义命令`system.run[]` 均由用于运行 Zabbix 组件的 OS 用户执行。要执行这些命令，此用户必须具有必要的权限。
:::

[comment]: # ({/2550c7b3-8ef20381})

[comment]: # ({f4f740a1-9530d8d5})
##### HTTP agent 监控项

[HTTP agent](/manual/config/items/itemtypes/http)是通过 HTTP/HTTPS 执行数据请求的项。HTTP agent 监控项可用于向 HTTP 端点发送请求以从*Elasticsearch* 和 *OpenWeatherMap*等服务检索数据，用于检查 Zabbix API 的状态或 Apache 或 Nginx Web 服务器的状态等。HTTP 代理项（启用了捕获器功能）也可以用作[trapper items捕获器监控项](#trapper-items)。

[comment]: # ({/f4f740a1-9530d8d5})

[comment]: # ({a5135d6d-f6b462b1})
##### 脚本监控项

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

[comment]: # ({/a5135d6d-f6b462b1})

[comment]: # ({60de34fb-fc37db31})
::: notetip
Zabbix server和proxy支持 HTTP agent和脚本监控项，并且不需要在被监控的主机上运行agent。
:::

[comment]: # ({/60de34fb-fc37db31})

[comment]: # ({8a85d13d-37a255c2})
#### 高级扩展

[comment]: # ({/8a85d13d-37a255c2})

[comment]: # ({037daafe-45ac5b61})
##### 可加载模块

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

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

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

[comment]: # ({/037daafe-45ac5b61})

[comment]: # ({80ccd6be-c3a7defc})
##### 插件

插件扩展了 Zabbix agent 2 的监控能力。  
它们使用 Go 编程语言编写，为可加载模块（使用 C 编写）提供了一种替代方案。

您也可以为 Zabbix agent 2 开发自己的插件（独立数据采集器）。请参见 [开发者中心](/devel/plugins)。

[comment]: # ({/80ccd6be-c3a7defc})

[comment]: # ({1ab5311c-d554dcca})
#### 自定义警报

[comment]: # ({/1ab5311c-d554dcca})

[comment]: # ({0fa1d1af-4957b4ed})
##### Webhooks

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

现有 webhook 可在 Zabbix [Git 代码库](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media)中找到。有关自定义 webhook 开发，请参阅[Webhook 开发指南](https://www.zabbix.com/documentation/guidelines/en/webhooks).。

[comment]: # ({/0fa1d1af-4957b4ed})

[comment]: # ({fde4aa0a-1ff47b17})
##### 警报脚本

[警报脚本](/manual/config/notifications/media/script)是一种 Zabbix[媒体类型](/manual/config/notifications/media)，它提供了创建替代方法（脚本）来处理 Zabbix 警报的选项。如果您对 Zabbix 中现有的发送警报的媒体类型不满意，警报脚本会很有用

[comment]: # ({/fde4aa0a-1ff47b17})

[comment]: # ({8d0a3d44-6a53c965})
#### 前端自定义

[comment]: # ({/8d0a3d44-6a53c965})

[comment]: # ({fd4967cb-e59962d6})
##### 自定义主题

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

[comment]: # ({/fd4967cb-e59962d6})

[comment]: # ({850d0b20-a1752bc3})
##### 前端模块

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

[comment]: # ({/850d0b20-a1752bc3})

[comment]: # ({a2988159-485cf185})
#### 全局脚本

[全局脚本](/manual/web_interface/frontend_sections/alerts/scripts)是用户定义的一组命令，可根据配置的范围和用户权限在监控目标上执行（通过 shell (/bin/sh) 解释器）。可以配置全局脚本以执行以下操作：

-   动作 [操作](/manual/config/notifications/action/operation)
-   [手动主机动作](/manual/web_interface/menu/host_menu#overview)
-   [手动事件动作](/manual/web_interface/menu/event_menu#content)


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

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

[comment]: # ({/a2988159-485cf185})

[comment]: # ({29547248-44d06965})
::: noteimportant
用户定义的命令由运行 Zabbix 组件的 OS 用户执行。要执行这些命令，该用户必须具有必要的权限。
:::

[comment]: # ({/29547248-44d06965})

[comment]: # ({fb93634c-ee438455})
#### Zabbix API

[Zabbix API](/manual/api)是基于 HTTP 的 API，是 Zabbix 前端的一部分。使用 Zabbix API，您可以执行以下任何操作：

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

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

[comment]: # ({/fb93634c-ee438455})
