Select 来自中位数子查询的前 10 个 CPU 使用和显示 Influx 的时间序列数据

Select top 10 from subquery of median CPU usage and display time series data with Influx

我想在 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)
)

这会产生以下结果 table:

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

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

您可以使用 OR 正则表达式代替 IN=~ /HOST1|HOST2|HOST3/ + GROUP BY host 和一个 InfluxDB 查询将 return 所有数据。棘手的部分是 Grafana 变量,它将包含前 10 个主机。当你拥有它时,只需在正则表达式查询中使用高级变量格式 - 例如 =~ /${tophosts:pipe}/.