安装prometheus-community helm栈后无法获取default命名空间指标如何解决
问题根因与解决步骤
1. 无法获取default命名空间Pod指标的核心原因
默认安装的kube-prometheus-stack存在两个默认限制:
- Prometheus实例默认配置的
podMonitorNamespaceSelector和serviceMonitorNamespaceSelector仅匹配带release: prometheus标签的命名空间,未打标签的default命名空间下的采集规则不会被Prometheus识别 - 若业务Pod未暴露metrics接口、也没有配置对应的采集规则告知Prometheus需要抓取其指标,自然也无法查询到相关数据
2. 修复命名空间扫描权限
给default命名空间添加匹配标签,让Prometheus可以扫描该命名空间下的采集规则:
kubectl label namespace default release=prometheus
3. 配置业务Pod指标采集
可根据场景二选一:
方案A:注解自动抓取(适合快速测试)
给业务Pod添加以下注解,Prometheus默认通用抓取规则会自动识别:
annotations: prometheus.io/scrape: "true" prometheus.io/port: "<业务Pod暴露metrics的端口号>" prometheus.io/path: "/metrics" # 指标路径不是默认/metrics时才需要配置
方案B:PodMonitor配置(生产环境推荐)
在default命名空间下创建PodMonitor资源,明确指定需要抓取的Pod范围:
apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: business-pod-monitor namespace: default labels: release: prometheus # 需和Prometheus配置的selector匹配 spec: selector: matchLabels: app: <业务Pod的标签值> podMetricsEndpoints: - port: <metrics端口名或者端口号> path: /metrics
4. 配置自定义监控告警规则
通过创建PrometheusRule资源即可添加自定义规则,Prometheus会自动识别带匹配标签的规则资源:
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: business-alert-rules namespace: default labels: release: prometheus # 必须和Prometheus的ruleSelector匹配 spec: groups: - name: business-pod.rules rules: - alert: BusinessPodDown expr: kube_pod_status_phase{namespace="default", phase="Running"} == 0 for: 1m labels: severity: warning annotations: summary: "业务Pod {{ $labels.pod }} 运行异常" description: "default命名空间下的Pod {{ $labels.pod }} 已经1分钟未处于Running状态"
5. 验证配置生效
配置完成后等待1~2分钟,进入Prometheus后台的Status > Configuration和Status > Targets页面,即可看到新增的采集目标和告警规则。
内容的提问来源于stack exchange,提问作者everspader
相关产品推荐
相关产品推荐

