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

本文介绍如何在Grafana中优化流量bps的监控图表,通过使用Prometheus查询和Grafana模板变量实现展示前10位流量的时间序列,并确保曲线连贯。文章详细解释了设置方法和步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

获取流量 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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值