项目场景:
获取流量 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_time
或 max_over_time
而不是的功能avg_over_time
,拓展链接:https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time