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

如何获取Kubernetes中Flask应用多Pod的Prometheus全量指标

问题本质

你现在访问/metrics只能拿到单个Pod的数据,核心原因是请求经过Kubernetes Service时被默认负载均衡规则转发到了某一个后端Pod,不会遍历所有副本返回全量数据,这个现象和两个Pod挂载共享Volume没有关联。

可落地的解决方法
  • 生产环境首选:配置Prometheus的K8s原生服务发现自动抓取所有Pod指标
    不需要修改Flask应用的任何代码,只需要调整Prometheus的抓取配置:在scrape_configs段添加kubernetes_sd_configs,将发现角色设置为pod,通过标签选择器匹配你的Flask应用对应的Pod,再通过relabel规则把Pod的IP作为目标抓取地址。配置生效后Prometheus会自动识别所有匹配的应用副本,逐个请求每个Pod自身的/metrics端点拉取数据,拉回来的指标会自动带上pod、namespace这类标签区分不同实例,不管是查询单实例指标还是聚合全量副本指标都可以直接通过PromQL实现。
    配置前确认两点:一是Prometheus使用的服务账号有集群内Pod、Endpoint资源的读取权限,二是Flask Pod暴露的metrics端口没有被网络策略拦截。
  • 特殊场景可选:部署轻量metrics聚合代理
    如果因为权限等原因没法调整Prometheus的服务发现配置,可以在Flask应用同命名空间部署一个轻量聚合代理,代理启动时自动监听对应Service的后端Endpoint列表,周期性拉取每个后端Pod的/metrics指标,聚合去重后统一暴露一个/metrics端点供调用。这个方案会额外增加运维成本,非必要不选。
  • 临时调试用:绕开Service直接访问单Pod
    如果只是临时排查需要拿到两个Pod的全量指标,不需要改任何配置:可以先执行kubectl get endpoints <你的Flask对应的Service名称>拿到两个Pod的实际IP和端口,直接通过Pod IP访问对应实例的/metrics端口即可;也可以用kubectl port-forward分别转发两个Pod的metrics端口到本地,逐个访问拉取数据。

注意:不要尝试把两个Pod的指标直接写到共享Volume里做聚合,多进程同时写入同一个metrics文件会出现内容覆盖、格式错乱的问题,完全不符合Prometheus的指标抓取规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:57:21