[comment]: # ({a3e485f1-e02835c7})
# 3 使用触发器进行问题检测

[comment]: # ({/a3e485f1-e02835c7})

[comment]: # ({a9988a1a-2412d13e})
Zabbix 中的问题检测基于**触发器**。 

触发器用于描述问题条件，使 Zabbix 能够在问题发生时作出响应。

问题检测的完整工作流程如下：

1. 确保您已有一个用于采集数据的[监控项](/manual/config/items)。

2. 为该监控项定义触发器。没有触发器，Zabbix 只会采集数据，但不会对此作出任何响应。

3. 查看检测到的问题：

   -   在 *监控* > *[问题](/manual/web_interface/frontend_sections/monitoring/problems)* 中
   -   在 *问题* [部件](/manual/web_interface/frontend_sections/dashboards/widgets/problems) 中

4. 接收通知、执行远程命令（如果已定义）。

请注意，官方 Zabbix 模板包含预定义的触发器。  
请参阅将模板应用于[监控 Linux](/manual/installation/quick_guides/monitor_linux)的指南。

[comment]: # ({/a9988a1a-2412d13e})

[comment]: # ({61226957-7bb4f85b})
#### 什么是“触发器”？

触发器通过 [trigger expression](/manual/config/triggers/expression/) 来描述*问题条件*。

当问题条件在现实中发生时，触发器就会“触发”（即在 Zabbix 中创建一个问题）。

问题条件可以基于最新值、平均值、发现的字符串以及许多其他 [functions](/manual/config/triggers/expression#functions)。对于返回值的数据类型为二进制或 JSON 的监控项，无法创建触发器。

一个简单的触发器表达式会对括号中指定的数据（通常是数据监控项和时间窗口）计算某个函数（例如表示最大值的 **`max()`**），然后将计算结果与阈值进行比较。

例如：

```default
max(/host/vfs.fs.size[/,free],5m)<10G
``` 

如果在 5 分钟内测得的可用 [disk space](/manual/config/items/itemtypes/zabbix_agent#vfs.fs.size) 始终低于 10 GB，则该触发器会触发。

触发器可以具有以下状态：

|触发器状态|描述|在 Zabbix 中|
|-|-----|----|
|**OK**|触发器表达式计算结果为“0”（或 FALSE）|未创建问题<br>问题已解决（如果之前存在）|
|**Problem**|触发器表达式计算结果为“1”（或 TRUE）|已创建问题|

有时，由于某些原因，触发器表达式无法进行计算。请参见 [Unknown expression state](/manual/config/triggers/expression#unknown-expression-state)。

其他资源：

-   [Trigger examples](/manual/config/triggers/trigger_examples)
-   [Configuring a trigger](/manual/config/triggers/trigger)
-   [Best practices](/manual/config/triggers/best_practices)

[comment]: # ({/61226957-7bb4f85b})

[comment]: # ({3d1f425b-6781ee38})
#### 计算频率

每当 Zabbix 服务器接收到属于表达式一部分的**新值**时，触发器都会重新计算。  
收到新值后，表达式中包含的每个函数都会重新计算（而不仅仅是接收到新值的那个函数）。

此外，如果表达式包含以下任一内容，触发器还会每 30 秒（由历史同步器）重新计算一次：

-   [日期和时间](/manual/config/triggers/expression/time)函数
-   [nodata()](/manual/config/triggers/expression/history#nodata) 函数

仅包含[趋势](/manual/config/triggers/expression/trends)函数的触发器，会按照表达式中最小的时间周期进行一次求值。虽然许多触发器函数使用监控项值的[历史](/manual/config/items/history_and_trends)数据，但趋势函数使用的是趋势数据。

[comment]: # ({/3d1f425b-6781ee38})

