[comment]: # translation:outdated

[comment]: # ({b8c65ad1-b8c65ad1})
# 7 计算型 监控项

[comment]: # ({/b8c65ad1-b8c65ad1})

[comment]: # ({43ebe58c-43ebe58c})
#### 概述

通过计算型监控项，可以基于其他监控项的值create计算。

计算可使用以下两种方式：

-   单个监控项的独立值
-   用于聚合多个监控项的复杂筛选器（参见

    [aggregate
    calculations](/manual/config/items/itemtypes/calculated/aggregate)
    for details)

因此，计算型监控项是一种创建虚拟数据源的方式。所有计算仅由Zabbix server执行。这些值会根据使用的算术表达式定期计算。

结果数据会像其他监控项一样存储在Zabbix数据库中；历史和趋势值都会被存储，并可生成图表。

::: noteclassic
如果计算结果为float值，且计算型监控项的信息类型为*数值型（无符号）*，则该值会被截断为integer。

:::

计算型监控项与触发器[expressions](/manual/config/triggers/expression)共享语法。在计算型监控项中允许与字符串进行比较。计算型监控项可以像其他任何监控项类型一样被宏或其他实体引用。

要使用计算型监控项，请选择**计算型**作为监控项类型。

[comment]: # ({/43ebe58c-43ebe58c})

[comment]: # ({a60a7526-ddc35784})
#### 可配置字段

**键**是唯一的监控项标识符（每个主机）。您可以使用支持的符号create任何键名。

计算定义应输入在**公式**字段中。公式与键之间实际上没有关联。键参数不会以任何方式在公式中使用。

简单公式的语法如下：

    function(/host/key,<parameter1>,<parameter2>,...)

其中：

|     |     |
|--|--------|
| *函数* | [supported functions](/manual/appendix/functions)之一：last、min、max、avg、count等 |
| *主机* | 用于计算的监控项的主机。<br>当前主机可以省略（例如`function(//key,parameter,...)`中所示）。 |
| *键* | 用于计算的监控项的键。 |
| *参数* | 函数所需的参数（如有）。 |

::: noteimportant
[User macros](/manual/config/macros/user_macros)
在公式中如果用于引用函数参数、监控项过滤器参数或常量时会被展开。用户宏在引用函数、主机名、监控项键、监控项键参数或运算符时不会被展开。

:::

更复杂的公式可以使用函数、运算符和括号的组合。您可以使用触发器表达式中支持的所有函数和[运算符](/manual/config/triggers/expression#运算符)。逻辑和运算符优先级完全相同。

与触发器表达式不同，Zabbix根据监控项的update间隔处理计算型监控项，而不是在接收到新值时处理。

计算型监控项公式中历史函数引用的所有监控项必须存在并正在收集数据。此外，如果更改被引用监控项的监控项键，必须手动update使用该键的所有公式。

计算型监控项在以下情况下可能变为不支持状态：

- 被引用的监控项
    - 未找到
    - 已禁用
    - 属于已禁用的主机
    - 不受支持（nodata()函数和[运算符](/manual/config/triggers/expression#运算符)处理未知值的情况除外）
- 无数据可用于计算函数
- 除以零
- 使用了错误的语法

[comment]: # ({/a60a7526-ddc35784})

[comment]: # ({82c22f4f-82c22f4f})
#### 使用示例

[comment]: # ({/82c22f4f-82c22f4f})

[comment]: # ({426ab71a-426ab71a})
##### 示例1

计算'/'分区剩余磁盘空间百分比

使用**last**函数:

    100*last(//vfs.fs.size[/,free])/last(//vfs.fs.size[/,total])

Zabbix将获取磁盘剩余空间和总空间的最新值
并根据给定公式计算百分比

[comment]: # ({/426ab71a-426ab71a})

[comment]: # ({77bcdfd9-77bcdfd9})
##### 示例2

计算10分钟内处理值的数量平均值
Zabbix

使用函数 **avg**：

    avg(/Zabbix Server/zabbix[wcache,values],10m)

请注意，大量使用具有长时间周期的计算型监控项可能会
影响Zabbix server的性能

[comment]: # ({/77bcdfd9-77bcdfd9})

[comment]: # ({5d068733-5d068733})
##### 示例3

计算eth0接口的总带宽

两个函数之和:

    
last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes])

[comment]: # ({/5d068733-5d068733})

[comment]: # ({f8b53af1-f8b53af1})
##### 示例4

计算入站流量的百分比。

更复杂的表达式：

    100*last(//net.if.in[eth0,bytes])/(last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes]))

另请参阅：[使用示例](/manual/config/items/itemtypes/calculated/aggregate#使用示例)

[comment]: # ({/f8b53af1-f8b53af1})
