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

如何编写Prometheus ServiceMonitor抓取K8s节点本地服务指标

报错根因

你的配置触发校验失败有两个核心问题:

  • ServiceMonitor资源的spec.selector是必填字段,作用是匹配需要抓取的目标Service,你原配置缺失该字段直接触发了校验拦截
  • endpoints配置里的port字段不支持直接填写端口号,必须填写对应Service中定义的端口名称

额外注意:你的lustre-exporter是直接运行在节点宿主机上,并非集群内Pod承载的服务,不能直接通过常规Service自动关联后端,需要手动配置Endpoints指向节点上的服务地址,否则Prometheus无法找到实际抓取目标。

可直接套用的配置方案

第一步:创建Service和关联Endpoints

因为服务跑在宿主机,需要手动创建Endpoints绑定节点地址:

apiVersion: v1
kind: Service
metadata:
  name: lustre-exporter
  namespace: team-monitoring
  labels:
    app: lustre-exporter
spec:
  ports:
  - name: metrics
    port: 9169
    targetPort: 9169
---
apiVersion: v1
kind: Endpoints
metadata:
  name: lustre-exporter
  namespace: team-monitoring
subsets:
  - addresses:
    - ip: <替换为运行lustre-exporter的节点内网IP>
    ports:
    - name: metrics
      port: 9169

第二步:创建修正后的ServiceMonitor

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: lustre-exporter
  namespace: team-monitoring
  labels:
    # 若你的Prometheus是通过kube-prometheus部署,需补充对应release标签保证配置能被Prometheus识别,按实际部署的匹配规则调整即可
    release: kube-prometheus-stack
spec:
  endpoints:
    - path: /metrics
      port: metrics
      interval: 30s
  selector:
    matchLabels:
      app: lustre-exporter
  namespaceSelector:
    matchNames:
    - team-monitoring
排障提示

配置提交后如果抓取失败,优先检查两项:

  • 节点宿主机的防火墙、安全组是否放开9169端口,允许集群内Prometheus所在Pod网段访问
  • 集群中Prometheus使用的服务账号是否拥有team-monitoring命名空间下Service、Endpoints、ServiceMonitor资源的读取权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:06:34