k8s集群配置ServiceMonitor不生效

现象

配置完类型为 ServiceMonitor 的 CRD 并应用后,并未采集到期望的指标数据。

排查

查看 Prometheus Web UI 的 Targets 页面,可以看到 ServiceMonitor 配置的目标服务没有出现在面板中,确认应为配置问题。

检查项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: test-app-monitor
namespace: monitor
labels:
app.kubernetes.io/vendor: kubesphere
spec:
selector:
matchLabels:
app: test-app
namespaceSelector:
matchNames:
- monitor
endpoints:
- path: /metrics
port: http # 需要和service的port名称保持一致

首先需要检查 matchLabels 中的标签是否正确,大多数情况是因为标签无法匹配导致的,可以使用 kubectl get svc -n monitor -l app=test-app 查看是否有对应的服务。

其次,检查 endpoints 中的 path 和 port 是否正确,path 应为 Prometheus 采集的指标路径,port 应为 ServiceMonitor 定义的端口名称,需要和 Service 的 port 名称保持一致。注意 port 参数是要和 service 中配置的 name 保持一致,而不是 targetPort,当初我就是因为这个地方配置错误排查了很久没有发现。


k8s集群配置ServiceMonitor不生效
https://www.wobushi.top/2024/k8s集群配置ServiceMonitor不生效/
作者
Pride Su
发布于
2024年4月29日
许可协议