从中位数CPU使用率的子查询中选择前10名,并使用Influx显示时间序列数据

时间:2018-12-17 20:47:02

标签: grafana influxdb telegraf

我想在Grafana中创建一个图形面板,其中显示了CPU消耗量最大的前10名,并显示了在选择的任何时间间隔内各自的历史记录。我认为最后一部分很棘手。

到目前为止,我已经拥有了:

SELECT TOP("median_Percent_Processor_Time", 10) as "usage", host FROM (
    SELECT median("Percent_Processor_Time") AS "median_Percent_Processor_Time" FROM "telegraf_monitoring"."autogen"."win_cpu" WHERE time > now() - 5s GROUP BY time(:interval:), "host" FILL(none)
)

这将产生下表:

time                | usage              | host
12/17/18 02:38:36PM | 88.4503173828125   | CNVDWSO202
12/17/18 02:38:36PM | 60.55384826660156  | CNVDSerr01
12/17/18 02:38:36PM | 46.807456970214844 | NVsABAr01
12/17/18 02:38:36PM | 27.402353286743164 | NVDARCH02
12/17/18 02:38:36PM | 21.320478439331055 | NVDABAr05
12/17/18 02:38:36PM | 5.546620845794678  | NVDALMBOE
12/17/18 02:38:36PM | 3.654918909072876  | NVDLeNCXE01
12/17/18 02:38:36PM | 47.08285903930664  | NVDOKTARAD01

该表很有用,但这仅是一个时间点。随后,我需要从那10个主机的win_cpu测量中查询并提取时间序列数据。主机的值是动态的,我无法预测会出现什么,因此,我无法将OR语句串在一起,而据我所见,Influx不支持IN

1 个答案:

答案 0 :(得分:0)

您可以使用OR regexp代替IN=~ /HOST1|HOST2|HOST3/ + GROUP BY host和一个InfluxDB查询将返回所有数据。棘手的部分是Grafana变量,它将具有前10名主机。有了它后,只需在regexp查询中使用高级变量格式-例如=~ /${tophosts:pipe}/