Influxdb 如何获取XDB中Collectd测量的CPU使用率百分比

Influxdb 如何获取XDB中Collectd测量的CPU使用率百分比,influxdb,collectd,Influxdb,Collectd,我通过CollectD5.4.0收集以jiffies为单位测量的cpu使用率,然后将结果存储在XDB0.9.4中。我使用以下查询从XDB获取cpu百分比: SELECT MEAN(value) FROM cpu_value WHERE time >= '' and time <= '' GROUP BY type,type_instance 从cpu_值中选择平均值(值),其中时间>=''和时间自Collectd 5.5以来,您可以获得百分比值,而不是jiffies值: <P

我通过CollectD5.4.0收集以jiffies为单位测量的cpu使用率,然后将结果存储在XDB0.9.4中。我使用以下查询从XDB获取cpu百分比:

SELECT MEAN(value) FROM cpu_value WHERE time >= '' and time <= '' GROUP BY type,type_instance

从cpu_值中选择平均值(值),其中时间>=''和时间自Collectd 5.5以来,您可以获得百分比值,而不是jiffies值:

<Plugin cpu>
  ReportByState = true
  ReportByCpu = true
  ValuesPercentage = true
</Plugin>
如果您可以升级,它可能是最简单的选择。否则,您可以:

  • 使用其他客户端报告统计数据(如statsd、telegraf等)
使用XDB 0.12,您可以在字段之间执行算术运算,如:

SELECT MEAN(usage_system) + MEAN(usage_user) AS cpu_total
FROM cpu

然而,要使用它,您必须从collectd
用户|系统|尼斯| irq
作为
字段
而不是
标签

这是我的查询,我使用百分比单位(在轴选项卡上),但堆栈+百分比(在显示选项卡上)也有意义

SELECT non_negative_derivative(mean("value"), 1s) FROM "cpu_value" WHERE "type_instance" =~ /(idle|system|user|wait)/ AND $timeFilter GROUP BY time($interval), "type_instance" fill(null)

非负导数(1s)可以替换为导数(1s),当值丢失时,我有一些负值

你的问题太模糊了,无法回答,因为我们不知道你期望看到什么样的模式,也不知道你看到了什么。请分享实际输出并告诉我们您希望看到的内容。另外,为什么您有
time>=''并为您的查询计时,请从“cpu值”中选择平均值(“值”),其中“type_instance”=~/user | system | nice | irq/和“type”='percent'和$timeFilter GROUP BY time($interval),“host”,看起来不正确。它将返回用户|系统|尼斯| irq的平均百分比,此时cpu使用率应为它们的总和,这取决于
时间($interval)
和向XDB发送度量的频率。在4核系统上,最大CPU使用率为400%,使用10s度量频率和
$interval=1m
时,使用
总和(值)
可以获得2400%的CPU,这看起来不正确。如果您的
时间($interval)
与度量值收集的频率相同,您可以得到看起来正确的结果。我测试了以下来自grafana dashboard id=4775的查询,结果非常准确:“从“cpu_值”中(“主机”=~/^$host$/和“类型”='percent'和“类型_实例”中选择mean(“值”)*-1+100“=‘idle’)和$timeFilter GROUP BY time($\u interval)fill(null)”。方法是减去空闲时间。
SELECT non_negative_derivative(mean("value"), 1s) FROM "cpu_value" WHERE "type_instance" =~ /(idle|system|user|wait)/ AND $timeFilter GROUP BY time($interval), "type_instance" fill(null)