You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Grafana结合InfluxDB可视化Prometheus类型Summary指标

在Grafana+InfluxDB中可视化Prometheus风格Summary指标的平均响应时间

需求说明

需要计算指定时间间隔(如1分钟)内HTTP客户端的平均响应时间,逻辑为时间窗口内的总响应耗时(sum增量)除以请求总数(count增量),对应PromQL的rate(http_client_response_time_millis_sum[1m]) / rate(http_client_response_time_millis_count[1m])。

指标结构说明

导入InfluxDB后,数据结构如下:

  • Measurement名称:http_client_response_time_millis
  • 字段:sum(累积总响应耗时,单位毫秒)、count(累积请求总数)
  • 标签:http_client_method、http_client_url、http_client_response_status_code

InfluxQL查询语句

SELECT 
  (derivative(last("sum"), 1m) / derivative(last("count"), 1m)) AS "avg_response_time_millis"
FROM "http_client_response_time_millis"
WHERE 
  $timeFilter
GROUP BY 
  time(1m), 
  "http_client_method", 
  "http_client_url", 
  "http_client_response_status_code"

查询逻辑解释

  1. derivative(last("sum"), 1m):计算每个1分钟窗口内sum字段的增量(即该窗口内的总响应耗时),last()用于取窗口内累积值的最后一个点,保证增量计算的准确性。
  2. derivative(last("count"), 1m):同理,计算每个1分钟窗口内的请求总数增量。
  3. 除法运算:将总耗时增量除以请求数增量,得到该窗口内的平均响应时间,别名avg_response_time_millis便于Grafana展示。
  4. GROUP BY:按1分钟时间窗口和所有标签维度分组,保留请求方法、URL、状态码的维度信息。
  5. $timeFilter:Grafana内置变量,自动适配面板选择的时间范围,无需手动指定时间区间。

自定义过滤示例

如果需要只展示GET请求、特定URL或状态码的平均响应时间,可在WHERE子句中添加过滤条件:

SELECT 
  (derivative(last("sum"), 1m) / derivative(last("count"), 1m)) AS "avg_response_time_millis"
FROM "http_client_response_time_millis"
WHERE 
  $timeFilter
  AND "http_client_method" = 'GET'
  AND "http_client_response_status_code" = '200'
GROUP BY 
  time(1m), 
  "http_client_url"

内容的提问来源于stack exchange,提问作者oddbjorn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:10:03