【Prometheus + Grafana】 使用 topk 在 grafana 绘制 前 n 个时间序列

项目场景:

获取流量 bps 前10位的 时间序列


问题描述:

在grafana 中使用 topk(10, bps) 语句,结果得到如图信息,并且可以看到曲线有断层,不连贯。
期望是仅展示前10条,并且曲线是连贯的。

在这里插入图片描述


原因分析:

从Grafana 5.3.0开始,有一个功能允许在一段时间内正确绘制前N个序列的图形。
query_range Prometheus中用于制图的API端点独立评估每个步骤,因此类似的图 topk(10, bps)可以显示10个以上的时间序列。
要显示图形范围内的前10个,您需要先执行查询以确定其中10个label,然后再对其进行图形化。


解决方案:

设置bps,在模板中使用变量,即 Variables

如图所示,query_result(topk(10, bps)) 可以获取10个ipaddr
您可以query_result(topk(10, avg_over_time(bps[${_range_s}s]))) 获取bps在一定时间范围内平均值最高的10个
语句是关键,多值,包括所有和刷新时间段的变化也被设置。
还需要选择 ALL,即 图中的 Selection Options 部分

在这里插入图片描述

使用 bps 变量和prometheus 的正则表达式查询

bps{ipaddr=~"$bps"}

在这里插入图片描述

优化界面

Variables 中 选择了All,那么可以返回到变量定义并将“Hide”设置为“Variable”,以使变量选择不会杂乱您的仪表板顶部。
在这里插入图片描述

根据实际情况,还可以使用诸如 min_over_timemax_over_time 而不是的功能avg_over_time,拓展链接:https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time

猜你喜欢

转载自blog.csdn.net/qq_22227087/article/details/114386594