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

Kubernetes中Prometheus监控Flask应用无数据问题求助

问题:Prometheus能识别Flask服务但无数据展示

我正在配置Prometheus监控一个简单的Flask应用,奇怪的是Prometheus的下拉菜单中能显示该服务,但点击后无任何数据展示(截图:无数据展示)。

相关代码与配置文件

app.py

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

app = Flask(__name__)
metrics = PrometheusMetrics(app)

@app.route('/')
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

flask-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flask-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: flask-app
  template:
    metadata:
      labels:
        app: flask-app
    spec:
      containers:
      - name: flask-app
        image: starian/flask-app1
        ports:
        - containerPort: 5000
          name: webapp        

flask-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: flask-app-service
spec:
  selector:
    app: flask-app
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: webapp
  type: LoadBalancer

service-monitor.yaml

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: flask-app
  labels:
    release: prometheus-stack
spec:
  selector:
    matchLabels:
      app: flask-app
  endpoints:
  - port: http
    interval: 5s
    path: /metrics

Dockerfile

FROM python:3.8-slim

WORKDIR /app
COPY . /app

RUN pip install flask
RUN pip install prometheus_flask_exporter

CMD ["python", "app.py"]

已完成的检查

  • Flask应用的/metrics接口可正常访问,能通过curl获取数据
  • 所有相关服务(Flask应用、Kubernetes Deployment/Service、ServiceMonitor)均处于运行状态

可能的问题排查方向

1. ServiceMonitor与Service的标签不匹配

你的ServiceMonitor配置中,spec.selector.matchLabels指定匹配app: flask-app标签,但当前flask-service.yaml的Service元数据中没有这个标签——ServiceMonitor是用来匹配Service的元数据标签,而非Pod的标签。

需要给Service添加对应标签,修正后的flask-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: flask-app-service
  labels:
    app: flask-app  # 新增此标签,让ServiceMonitor能匹配到该Service
spec:
  selector:
    app: flask-app
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: webapp
  type: LoadBalancer

2. Prometheus未正确选择ServiceMonitor

检查Prometheus的CRD配置,确认其serviceMonitorSelector是否包含对release: prometheus-stack标签的匹配。如果Prometheus的选择器未覆盖该标签,会忽略当前的ServiceMonitor。

3. 验证Service的端点连通性

在集群内部通过Service的地址访问/metrics,比如执行命令:

curl flask-app-service:80/metrics

确认通过Service转发后仍能正常获取指标数据,排除Service端口转发异常的问题。

4. 检查Prometheus目标状态

进入Prometheus的Status -> Targets页面,查看是否存在flask-app的采集目标:

  • 如果目标未出现:说明ServiceMonitor未被Prometheus识别,需检查标签匹配或权限配置
  • 如果目标状态为DOWN:进一步排查Prometheus到Service的网络连通性

5. 触发指标生成

部分prometheus_flask_exporter的默认指标需要在应用被访问后才会生成(如请求计数)。可以多次访问Flask应用的/接口,等待Prometheus完成一次采集(配置的interval是5s)后再查看数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:37:17