从 CPU 使用率中位数的子查询中选择前 10 名,并使用 Influx 显示时间序列数据
Posted
技术标签:
【中文标题】从 CPU 使用率中位数的子查询中选择前 10 名,并使用 Influx 显示时间序列数据【英文标题】:Select top 10 from subquery of median CPU usage and display time series data with Influx 【发布时间】:2019-05-18 06:21:34 【问题描述】:我想在 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】:您可以使用 OR 正则表达式代替 IN
。 =~ /HOST1|HOST2|HOST3/
+ GROUP BY host
和一个 InfluxDB 查询将返回所有数据。棘手的部分是 Grafana 变量,它将包含前 10 个主机。当你拥有它时,只需在正则表达式查询中使用高级变量格式 - 例如=~ /$tophosts:pipe/
。
【讨论】:
以上是关于从 CPU 使用率中位数的子查询中选择前 10 名,并使用 Influx 显示时间序列数据的主要内容,如果未能解决你的问题,请参考以下文章