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

在Kubernetes中部署Prometheus后如何抓取Django应用的监控指标

问题排查与解决步骤

1. 修正Prometheus抓取配置的目标地址

你当前Prometheus ConfigMap中my-app任务的target配置为localhost:8000,这个地址指向的是Prometheus Pod自身,无法跨命名空间访问到default命名空间下的Django服务。

K8S集群内部跨命名空间访问Service的标准域名格式为<服务名>.<命名空间>.svc.cluster.local:<端口号>,你的Django Service端口为80,所以将对应配置修改为:

- job_name: my-app
  metrics_path: /metrics
  static_configs:
    - targets:
      - my_app.default.svc.cluster.local:80

修改后需重启Prometheus Pod加载新配置。

2. 对齐Django侧的端口链路配置

你当前Deployment暴露的containerPort为80、Service的targetPort为80,但给出的gunicorn启动命令中未指定绑定参数,gunicorn默认监听127.0.0.1:8000,会导致集群流量无法进入应用进程。
你可以二选一修改:

  • 方案1:修改supervisord的gunicorn启动命令,添加绑定参数:
    command=gunicorn --bind 0.0.0.0:80 --reload --timeout 200000 --workers=5 --limit-request-line 0 --limit-request-fields 32768 --limit-request-field_size 0 --chdir /code/ my_app.wsgi
    
  • 方案2:保持gunicorn默认配置,将Deployment的containerPort改为8000,同时将Service的targetPort改为8000。

3. 无需单独暴露多worker端口

django_prometheus内置了多worker指标聚合逻辑,只要应用的/metrics端点可正常访问,会自动汇总所有gunicorn worker的指标,完全不需要单独暴露8000-8005端口,也不需要针对每个worker做单独的抓取配置。

可选:使用K8S服务发现自动抓取(更易维护)

如果后续需要添加更多监控目标,静态配置的维护成本较高,可以改用K8S服务发现能力实现自动抓取:

  1. 给Django Service添加监控注解:
    apiVersion: v1
    kind: Service
    metadata:
      name: my_app
      namespace: default
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "80"
        prometheus.io/path: "/metrics"
    spec:
      # 其余原有配置保持不变
    
  2. 在Prometheus的scrape_configs中添加通用抓取任务,可替换原来的静态my-app任务:
    - job_name: 'kubernetes-service-endpoints'
      kubernetes_sd_configs:
      - role: endpoints
      relabel_configs:
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
        action: keep
        regex: true
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
        action: replace
        target_label: __metrics_path__
        regex: (.+)
      - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
        action: replace
        target_label: __address__
        regex: ([^:]+)(?::\d+)?;(\d+)
        replacement: $1:$2
    

配置修改完成后,可以通过Prometheus UI的Status -> Targets页面查看my-app任务的状态,状态为UP即代表抓取正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:15:03