文章目录
- 项目场景:
- 问题描述:
- 原因分析:
- 解决方案:
-
- 设置bps,在模板中使用变量,即 Variables
- 使用 bps 变量和prometheus 的正则表达式查询
- 优化界面
项目场景:
获取流量 bps 前10位的 时间序列
问题描述:
在grafana 中使用
topk(10, bps)
语句,结果得到如图信息,并且可以看到曲线有断层,不连贯。
期望是仅展示前10条,并且曲线是连贯的。
原因分析:
从Grafana 5.3.0开始,有一个功能允许在一段时间内正确绘制前N个序列的图形。Prometheus中用于制图的API端点独立评估每个步骤,因此类似的图
query_range
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