Zabbix 2.2 API获取处理器负载(1分钟平均)从时间到时间的最小/最大值

1 投票
2 回答
3188 浏览
提问于 2025-04-18 16:20

我想要获取一个主机在一个月内的CPU使用情况的平均值和最大值(每个核心每分钟的平均值)。我可以在 Zabbix 的网页界面上看到 CPU load 的图表。

我查看了 pyzabbix 的示例和 zabbix 的API文档,但我还是不知道怎么从指定的时间段获取平均值和最大值的CPU使用情况。

举个例子,当我调用:

history = zapi.history.get(itemids=[item_id],
        time_from=time_from,
        time_till=time_till,
        output='extend',
        limit='5000',
        history=0,
    )

我会得到在我使用的时间范围内每分钟的CPU使用值——我是不是得用这些数据来计算最小值、平均值和最大值呢?

Zabbix是怎么生成这些图表信息的?每次生成图表时,它都要进行这样的计算吗?

谢谢

2 个回答

1

Zabbix服务器会按照模板中设定的频率去获取它的代理的数据,并把这些数据存储在数据库里。当我们点击图表时,它会从数据库中提取这些数据,生成一个图表。你可以在与主机关联的模板中指定输入的数据类型,比如你想要百分比、小数还是整数。你还可以设置图表的时间范围,它会根据这个特定的时间段来计算数据。这些数据都是基于数据库中的值。

1

是的,每当在Zabbix中生成图表时,它会获取指定时间段内的所有历史数据,并计算出最小值、平均值和最大值,然后再绘制图表。

使用Zabbix的前端界面,绘制较长时间段的图表时,负担会小一些,因为这种情况下它会从趋势表中获取数据。例如:

mysql> describe trends;
+-----------+---------------------+------+-----+---------+-------+
| Field     | Type                | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| itemid    | bigint(20) unsigned | NO   | PRI | NULL    |       |
| clock     | int(11)             | NO   | PRI | 0       |       |
| num       | int(11)             | NO   |     | 0       |       |
| value_min | double(16,4)        | NO   |     | 0.0000  |       |
| value_avg | double(16,4)        | NO   |     | 0.0000  |       |
| value_max | double(16,4)        | NO   |     | 0.0000  |       |
+-----------+---------------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

这个表中的每一行对应一个小时,并且会存储这个小时的最小值、平均值和最大值。所以当绘制较长时间段的图表时,前端会从趋势数据中获取信息,这样需要处理的数据就少得多。

不过,遗憾的是,趋势数据似乎无法通过Zabbix的API获取,但这个功能在ZBXNEXT-1193中已经被提出请求。

撰写回答