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

如何用Prometheus统计特定客户端的应用请求?是否需自定义指标?

统计特定客户端HTTP请求数的Prometheus实现方案

1. 先看现有指标是否可用

Prometheus生态中常见的Web框架/反向代理配套监控组件(如Spring Boot Actuator、Nginx Exporter)通常会导出http_requests_total这类请求计数指标,部分会自带客户端相关标签:

  • Nginx Exporter的nginx_http_requests_total默认带remote_addr(客户端IP)、user_agent标签
  • Spring Boot Actuator的http_requests_total支持通过配置添加自定义请求头作为标签

但如果你的客户端标识是业务自定义内容(比如请求体字段、非标准请求头),默认指标大概率不会自动提取这类信息,需要进一步处理。

2. 无需自定义指标的快速方案

多数框架和exporter支持扩展标签提取,不用写代码就能满足需求:

  • 反向代理层配置:以Nginx为例,先修改日志格式包含客户端标识(比如请求头X-Client-Name),再让Nginx Exporter解析该日志将标识转为指标标签:
    http {
      log_format prometheus '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" "$http_x_client_name"';
      access_log /var/log/nginx/access.log prometheus;
    }
    
  • Web框架配置:比如Spring Boot,只需添加配置项,就能让Actuator自动把指定请求头转为指标标签:
    management.metrics.tags.http.request.header.X-Client-ID=client_id
    
    之后http_requests_total指标就会带上client_id标签,对应请求头X-Client-ID的值。

3. 自定义指标的场景与实现

如果客户端标识存在于请求体、或者框架/exporter不支持自动提取,就需要手动实现自定义计数器:

  • 核心逻辑:在请求处理流程中提取客户端标识,用Prometheus对应语言的SDK创建带client标签的计数器,每次请求时递增对应标签的计数。
  • Go语言示例:
    import "github.com/prometheus/client_golang/prometheus"
    
    var clientRequests = prometheus.NewCounterVec(
      prometheus.CounterOpts{
        Name: "app_http_client_requests_total",
        Help: "Total HTTP requests grouped by client identifier",
      },
      []string{"client"},
    )
    
    func init() {
      prometheus.MustRegister(clientRequests)
    }
    
    func yourRequestHandler(w http.ResponseWriter, r *http.Request) {
      // 从请求体/自定义位置提取客户端标识
      clientID := getClientIDFromRequest(r)
      // 递增对应客户端的请求计数
      clientRequests.WithLabelValues(clientID).Inc()
      // 业务逻辑处理...
    }
    

4. 最终查询示例

不管用哪种方式,都可以用PromQL过滤统计目标客户端的请求数据:

  • 统计客户端client-A的总请求数:
    sum(http_requests_total{client="client-A"})
    
  • 统计客户端client-A最近5分钟的请求速率:
    rate(http_requests_total{client="client-A"}[5m])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:25:02