Zabbix 2.2 API获取处理器负载(1分钟平均)从时间到时间的最小/最大值
我想要获取一个主机在一个月内的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中已经被提出请求。