K8s中配置Prometheus采集Redis指标后无数据,需补充什么配置?
检查Prometheus的ServiceMonitor选择器匹配规则
kube-prometheus-stack默认的Prometheus实例只会选择带有特定标签的ServiceMonitor。执行命令查看Prometheus的配置:kubectl get prometheus kube-prometheus-stack-prometheus -n monitoring -o yaml
找到serviceMonitorSelector字段,确认它的匹配标签是否和你的Redis ServiceMonitor标签一致。如果Redis的ServiceMonitor没有对应的标签,需要给ServiceMonitor添加匹配标签,比如:metadata: labels: release: kube-prometheus-stack # 该标签需与Prometheus的serviceMonitorSelector.matchLabels完全匹配验证ServiceMonitor的Endpoints配置
检查Redis ServiceMonitor的endpoints是否正确指向metrics容器的端口和路径:kubectl get servicemonitor <redis-servicemonitor-name> -n monitoring -o yaml
确认endpoints[0].port是metrics容器暴露的端口名(通常为metrics),path是否为/metrics(Redis exporter默认路径),同时确认namespaceSelector是否包含Redis所在的命名空间,或设置为any: true。确认Redis Metrics Exporter的正常运行
进入Redis Pod的metrics容器,手动访问metrics接口验证数据是否生成:kubectl exec -it <redis-pod-name> -n <redis-namespace> -c metrics -- curl localhost:<metrics-port>/metrics
如果无指标数据返回,说明exporter未正确连接Redis主节点或sentinel实例,需检查metrics容器的连接配置。排查NetworkPolicy或防火墙限制
确认monitoring命名空间的Prometheus Pod可访问Redis所在命名空间的metrics服务端口。若存在NetworkPolicy,需添加允许Prometheus访问Redis metrics端口的规则。验证Prometheus的ServiceMonitor命名空间扫描范围
检查Prometheus的serviceMonitorNamespaceSelector配置,确认它包含Redis ServiceMonitor所在的monitoring命名空间,或设置为any: true,确保Prometheus能扫描到该命名空间下的ServiceMonitor实例。
内容的提问来源于stack exchange,提问作者prosto.vint

