如何获取 InfluxDB 中 Collectd 测量的 CPU 使用百分比
How to get CPU usage percentage measured by Collectd in InfluxDB
我正在收集 cpu 使用 Collectd 5.4.0 以 jiffies 测量的使用情况,然后将结果存储在 InfluxDB 0.9.4 中。我使用以下查询从 InfluxDB 获取 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>
然后你可以这样写查询:
SELECT mean("value") FROM "cpu_value" WHERE
"type_instance" =~ /user|system|nice|irq/
AND "type" = 'percent' AND $timeFilter
GROUP BY time($interval), "host"
如果你能升级它可能是最简单的选择。否则你可以:
- precompute percentage on client
- 使用其他客户端报告统计信息(例如 statsd、telegraf 等)
使用 InfluxDB 0.12,您可以在字段之间执行算术运算,例如:
SELECT MEAN(usage_system) + MEAN(usage_user) AS cpu_total
FROM cpu
然而,要使用它,您必须从 collectd user|system|nice|irq
报告为 FIELDS
而不是 TAGS
。
这是我的查询,我将它与百分比单位(在轴选项卡上)一起使用,但堆栈+百分比(在显示选项卡上)也有意义
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)
non_nagative_derivative(1s) 可以用导数(1s) 代替,当值缺失时我有一些负值。
我正在收集 cpu 使用 Collectd 5.4.0 以 jiffies 测量的使用情况,然后将结果存储在 InfluxDB 0.9.4 中。我使用以下查询从 InfluxDB 获取 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>
然后你可以这样写查询:
SELECT mean("value") FROM "cpu_value" WHERE
"type_instance" =~ /user|system|nice|irq/
AND "type" = 'percent' AND $timeFilter
GROUP BY time($interval), "host"
如果你能升级它可能是最简单的选择。否则你可以:
- precompute percentage on client
- 使用其他客户端报告统计信息(例如 statsd、telegraf 等)
使用 InfluxDB 0.12,您可以在字段之间执行算术运算,例如:
SELECT MEAN(usage_system) + MEAN(usage_user) AS cpu_total
FROM cpu
然而,要使用它,您必须从 collectd user|system|nice|irq
报告为 FIELDS
而不是 TAGS
。
这是我的查询,我将它与百分比单位(在轴选项卡上)一起使用,但堆栈+百分比(在显示选项卡上)也有意义
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)
non_nagative_derivative(1s) 可以用导数(1s) 代替,当值缺失时我有一些负值。