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
相关产品推荐
相关产品推荐

