GKE中Prometheus Operator采集Memorystore Redis指标配置问题排查
配置问题排查及修复方案
核心问题1:ServiceMonitor标签匹配规则错误
你当前的ServiceMonitor配置的spec.selector.matchLabels为app: redis-ext,但你定义的Service本身没有配置这个标签,导致ServiceMonitor无法匹配到对应的Service,无法生成采集配置。
修复方案二选一:
- 给
Service添加匹配标签,修改后的Service配置如下:
apiVersion: v1 kind: Service metadata: name: redis-external-exporter namespace: monitoring labels: # 新增匹配标签 app: redis-ext annotations: prometheus.io/scrape: 'true' prometheus.io/port: "9121" spec: ports: - name: redis-ext port: 9121 protocol: TCP targetPort: 9121 selector: app: redis-exporter
- 直接修改
ServiceMonitor的匹配规则,匹配Service已有的元数据(例如匹配Service的名称)
问题2:命名空间不一致
你的Service部署在monitoring命名空间下,Deployment必须也部署在同一个monitoring命名空间下,否则Service的选择器无法跨命名空间匹配到对应的Pod,会导致Service没有后端端点。
可以执行命令kubectl get endpoints -n monitoring redis-external-exporter验证,正常返回结果中会显示redis_exporter的Pod IP,如果返回空就说明Deployment没有部署在monitoring命名空间。
问题3:Prometheus实例未配置匹配ServiceMonitor的规则
你的ServiceMonitor配置了prometheus-instance: clusterwide标签,需要确认Prometheus CRD实例的spec.serviceMonitorSelector配置了对应匹配规则,示例如下:
apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: clusterwide spec: serviceMonitorSelector: matchLabels: prometheus-instance: clusterwide # 要和ServiceMonitor的标签对应 # 其余配置省略
如果匹配规则为空或者不匹配,Prometheus不会加载你创建的ServiceMonitor配置。
建议优化项(非必须)
你在Deployment的Pod注解、Service注解中配置的prometheus.io/scrape: "true"等参数,是给Prometheus原生基于注解的服务发现使用的,使用Prometheus Operator的ServiceMonitor时这些注解不会生效,可以直接删除避免配置混淆。
配置修改完成后可以访问Prometheus UI的/targets页面,查看对应的redis采集目标是否正常上线即可。
内容的提问来源于stack exchange,提问作者Zuri Rodriguez
相关产品推荐
相关产品推荐

