Prometheus与GCE服务通信异常问题求助
解决Prometheus v2.42.0 GCE服务发现失败问题
问题背景
- 环境:Debian服务器,Prometheus从v2.24.1升级至v2.42.0
- 现象:沿用原有
prometheus.yml配置后,仅GCE服务发现功能失效,其余功能正常 - 已配置:应用默认凭证存放于
$HOME/.config/gcloud/application_default_credentials.json - GCE服务发现配置片段:
- job_name: cloud honor_labels: true gce_sd_configs: - project: 'dynamic-mystery-xxxxx' port: 80 zone: 'us-west1-b' filter: '(status="RUNNING")' refresh_interval: 5s relabel_configs: - source_labels: ['__meta_gce_public_ip'] regex: (.*) replacement: '${1}:80' target_label: '__address__' - source_labels: ['__meta_gce_instance_name'] target_label: 'name'
- 错误日志(截断):
caller=manager.go:317 level=error component="discovery manager scrape" msg="Cannot create service discovery" err="error setting up communication with GCE service: google>
解决步骤
1. 确保Prometheus进程能读取凭证文件
Prometheus通常以prometheus系统用户运行,默认无法访问当前用户$HOME下的凭证:
- 复制凭证到Prometheus可访问的路径:
cp $HOME/.config/gcloud/application_default_credentials.json /var/lib/prometheus/gce-credentials.json - 修改文件权限:
chown prometheus:prometheus /var/lib/prometheus/gce-credentials.json chmod 600 /var/lib/prometheus/gce-credentials.json - 在
gce_sd_configs中显式指定凭证路径:gce_sd_configs: - project: 'dynamic-mystery-xxxxx' port: 80 zone: 'us-west1-b' filter: '(status="RUNNING")' refresh_interval: 5s credentials_file: '/var/lib/prometheus/gce-credentials.json'
2. 验证凭证有效性
用gcloud工具测试凭证能否正常访问GCE资源:
# 检查凭证是否能生成访问令牌 gcloud auth application-default print-access-token # 检查能否列出目标项目的实例 gcloud compute instances list --project dynamic-mystery-xxxxx --zone us-west1-b
若命令失败,重新生成应用默认凭证:
gcloud auth application-default login
生成后再次复制到Prometheus路径并更新权限。
3. 检查账号权限
确保凭证对应的账号拥有GCE实例列表权限:
- 为账号添加
Compute Viewer角色(包含compute.instances.list权限):gcloud projects add-iam-policy-binding dynamic-mystery-xxxxx \ --member="user:YOUR_EMAIL" \ --role="roles/compute.viewer"
4. 获取完整错误日志
当前日志截断,查看完整错误信息以定位根因:
journalctl -u prometheus --since "10 minutes ago" | grep -A 5 "error setting up communication with GCE service"
完整日志可能提示权限不足、凭证过期、API未启用等具体问题。
5. 检查Compute Engine API是否启用
确认目标GCP项目已启用Compute Engine API:
gcloud services list --enabled --project dynamic-mystery-xxxxx | grep compute.googleapis.com
若未启用,执行启用命令:
gcloud services enable compute.googleapis.com --project dynamic-mystery-xxxxx
内容的提问来源于stack exchange,提问作者Gokhan MANKARA
相关产品推荐
相关产品推荐

