Prometheus Adapter自定义指标异常:FailedDiscoveryCheck问题求助
GKE集群Prometheus自定义指标Adapter故障排查与解决
核心问题
部署Prometheus Custom Metrics Adapter后,所有Pod运行正常,但出现以下异常:
- Adapter日志显示请求Prometheus返回空数据,无可用指标列表
- 访问
/apis/custom.metrics.k8s.io/v1返回404 - APIService
v1.custom.metrics.k8s.io状态为FailedDiscoveryCheck
逐步排查与修复
1. 确认Prometheus指标采集状态
Adapter无法获取数据的核心原因是Prometheus未采集到目标指标,先验证这一点:
- 端口转发Prometheus服务:
kubectl port-forward -n fb-poster svc/prometheus-service 9090:9090 - 查询关键指标:访问
http://localhost:9090/api/v1/query?query=selenium_grid_node_count,若返回空数组:- 检查Selenium Hub导出服务可用性:在任意集群Pod内执行
curl selenium-hub-export-service:9104/metrics,确认能返回指标数据 - 查看Prometheus抓取状态:访问
http://localhost:9090/targets,确认selenium-hubjob状态为UP - 检查Prometheus配置中的scrape target地址、端口是否正确
- 检查Selenium Hub导出服务可用性:在任意集群Pod内执行
2. 修复自定义规则与Adapter配置
当前Adapter配置存在两个关键问题:
- 自定义指标
free_nodes_percentage无kubernetes_namespace/kubernetes_pod_name标签,但Adapter规则强制要求这些标签非空 - 缺少
metricsQuery字段,Adapter无法正确查询指标
修改ConfigMap中的config.yml:
rules: - seriesQuery: 'free_nodes_percentage' resources: # 若指标是命名空间级,调整为实际存在的标签;若为集群级可移除overrides overrides: namespace: {resource: "namespace"} name: matches: "free_nodes_percentage" as: "free_nodes_percentage" metricsQuery: 'free_nodes_percentage'
同时优化自定义规则避免除以0错误:
# custom_rules.yml groups: - name: custom.rules rules: - record: free_nodes_percentage expr: 100 * (selenium_grid_node_count - selenium_grid_session_count) / max(selenium_grid_node_count, 1)
3. 适配Adapter与API版本
你使用的Adapter版本v0.5.0对v1.custom.metrics.k8s.io的支持有限,可先回退到v1beta1验证功能:
# 修改APIService配置 apiVersion: apiregistration.k8s.io/v1 kind: APIService metadata: name: v1beta1.custom.metrics.k8s.io spec: service: name: prometheus-adapter-monitor namespace: fb-poster group: custom.metrics.k8s.io version: v1beta1 insecureSkipTLSVerify: true groupPriorityMinimum: 100 versionPriority: 100
若需使用v1版本,需给Adapter添加启动参数--api-version=custom.metrics.k8s.io/v1
4. 修正防火墙规则错误
之前创建规则时源网段写错,正确命令:
gcloud compute firewall-rules create allow-prometheus-adapter --action ALLOW --direction INGRESS --source-ranges 10.82.128.0/17 --rules tcp:6443 --network default
注:非私有集群中控制平面访问集群服务通常无需额外防火墙规则,此步骤为补充验证。
5. 验证Adapter API端点
端口转发Adapter服务直接测试:
kubectl port-forward -n fb-poster svc/prometheus-adapter-monitor 6443:443 curl -k https://localhost:6443/apis/custom.metrics.k8s.io/v1
若返回指标列表则配置正常,若仍404则回到第一步确认指标采集状态。
内容的提问来源于stack exchange,提问作者Kacper
相关产品推荐
相关产品推荐

