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

K8s集群中router-api与my-api的请求数及响应时间Prometheus查询

业务应用请求指标统计方案

你列出的所有request_duration_seconds_sum相关指标,全是Kubernetes集群核心组件(比如apiserver、coredns、etcd)或者Prometheus自身的请求耗时数据,和你的router-api、my-api这两个业务应用完全无关,没法用来统计它们的请求情况。

要实现你的需求,核心是让业务应用自己暴露符合Prometheus规范的HTTP请求指标,具体步骤和查询方式如下:

一、先让业务应用暴露指标

有两种可行方式:

  • 代码集成:在router-api和my-api的代码里引入Prometheus客户端库(不同语言对应不同库,比如Go用prometheus/client_golang,Java用micrometer-registry-prometheus),主动生成并暴露http_requests_total(请求计数)、http_request_duration_seconds(请求耗时直方图)这类标准指标,一般会在应用的某个端口(比如:9090/metrics)提供指标接口。
  • Sidecar代理:如果没法改应用代码,就给每个应用的Pod加个Sidecar容器(比如Envoy、OpenTelemetry Collector),让代理接管应用的所有入站/出站请求,由代理自动生成并暴露HTTP请求指标。

二、请求数据的PromQL查询

等应用正确暴露指标后,用以下查询就能得到你要的数据:

1. 请求数量统计

  • router-api的请求QPS(5分钟滑动窗口):
    sum(rate(http_requests_total{job="router-api"}[5m])) by (job)
    
  • my-api的请求QPS(5分钟滑动窗口):
    sum(rate(http_requests_total{job="my-api"}[5m])) by (job)
    
    注:job标签要和你Prometheus配置里抓取这两个应用的任务名对应,也可以用namespace、pod等标签来精准过滤。

2. 单请求平均响应时间

平均响应时间通过「总耗时/请求次数」计算,对应指标就是你之前了解的http_request_duration_seconds_sum和http_request_duration_seconds_count:

  • router-api的平均响应时间:
    sum(rate(http_request_duration_seconds_sum{job="router-api"}[5m])) by (job) 
    / 
    sum(rate(http_request_duration_seconds_count{job="router-api"}[5m])) by (job)
    
  • my-api的平均响应时间:
    sum(rate(http_request_duration_seconds_sum{job="my-api"}[5m])) by (job) 
    / 
    sum(rate(http_request_duration_seconds_count{job="my-api"}[5m])) by (job)
    

三、补充说明

如果你的router-api用了Ingress-Nginx,可以开启Ingress控制器的Prometheus指标抓取,这样能统计到公网到router-api的入口请求数据,但这只能覆盖外部请求,没法统计router-api调用my-api的内部请求,以及my-api自身的处理耗时,所以最靠谱的还是给两个业务应用本身加指标暴露。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:52:46