Grafana中Django面板PromQL查询解析及相关问题咨询
Django Grafana仪表盘问题解答
Q1:是否因为所有数据均生成于最近一天,且查询在整个时间范围取最大值,导致面板无变化?
是的。该查询核心依赖max_over_time和present_over_time函数,二者均基于选中的整个$__range时间范围计算:
max_over_time提取时间范围内指标的最大值(对请求计数类指标而言,最大值等同于该时间段的累计总量)present_over_time统计时间范围内有数据的样本点数量
如果所有数据都集中在最近一天,那么无论选择“最近一天”还是“最近一年”,$__range都包含了全部有效数据,计算结果不会发生变化,因此条形仪表的展示内容也不会改变。
Q2:能否帮忙解析该PromQL查询,它是否返回指定时间范围内最慢的视图?
这个PromQL不是直接返回“最慢的视图”,而是返回延迟超过指定阈值的请求占比最高的前20个(请求方法+视图)组合,具体逻辑拆解如下:
topk(20, (1 - (sum(max_over_time(django_http_requests_latency_seconds_by_view_method_bucket{app=~"^$application$",le="$threshold"}[$__range]) / ignoring(le) max_over_time(django_http_requests_latency_seconds_by_view_method_count{app=~"^$application$"}[$__range])) by (method, view) / count(present_over_time(django_http_requests_latency_seconds_by_view_method_count{app=~"^$application$"}[$__range])) by (method, view))) > 0.0099)
基础指标计算
max_over_time(django_http_requests_latency_seconds_by_view_method_bucket{...}[$__range]):获取时间范围内,延迟≤$threshold的请求累计数最大值(即该时间段内所有延迟达标请求的总量)max_over_time(django_http_requests_latency_seconds_by_view_method_count{...}[$__range]):获取时间范围内,对应视图+方法的总请求数最大值(即该时间段内的总请求总量)- 两者相除(
ignoring(le)忽略桶的阈值标签),得到单段时间内延迟≤阈值的请求占比
聚合与平均处理
sum(...) by (method, view):聚合同一视图+方法下的占比数据count(present_over_time(...)) by (method, view):统计该视图+方法在时间范围内有数据的样本点数量- 两者相除,得到时间范围内延迟≤阈值的请求占比平均值
最终筛选与排序
1 - 平均值:计算出延迟超过阈值的请求占比> 0.0099:筛选出占比超过0.99%的视图+方法组合topk(20, ...):取占比最高的前20个组合
Q3:面板标题栏中的“>1s”是什么含义?
表示该面板统计的是延迟超过1秒的请求相关数据,对应PromQL中的$threshold变量被设置为1s,标题直接展示当前面板关注的延迟阈值,方便快速识别统计核心维度。
内容的提问来源于stack exchange,提问作者MsA
相关产品推荐
相关产品推荐

