Docker部署OpenTelemetry Collector对接GCP时遇ADC项目未找到错误
解决OpenTelemetry Collector发送数据到GCP时的"no project found with application default credentials"错误
核心原因
你的ADC(应用默认凭证)要么未关联正确的GCP项目ID,要么OpenTelemetry的Stackdriver Exporter无法从凭证中自动读取项目信息。
具体解决办法
1. 显式指定GCP项目ID(最直接有效)
有两种方式可以指定:
方式一:在docker-compose中添加环境变量
在environment块里增加GOOGLE_CLOUD_PROJECT变量,替换为你的GCP项目ID:environment: - GOOGLE_APPLICATION_CREDENTIALS=/etc/otel/key.json - GOOGLE_CLOUD_PROJECT=your-gcp-project-id方式二:在OpenTelemetry配置文件中直接指定项目
在exporters下的stackdriver配置里添加project字段:exporters: stackdriver: project: "your-gcp-project-id" logs: default_log_name: "your-log-name" # 其他metrics/tracing相关配置这种方式优先级最高,会覆盖环境变量里的项目设置。
2. 确保ADC凭证关联正确的项目
执行以下步骤更新你的ADC凭证:
- 本地终端设置默认GCP项目:
gcloud config set project your-gcp-project-id - 重新生成ADC凭证:
gcloud auth application-default login - 重启docker-compose容器,进入容器检查凭证内容确认
project_id字段正确:docker exec -it monitoring-collector cat /etc/otel/key.json
3. 验证账号权限
确保生成ADC凭证的Google账号拥有以下必要权限:
- 写入指标:
roles/monitoring.metricWriter - 写入日志:
roles/logging.logWriter - 写入追踪数据:
roles/cloudtrace.agent
可在GCP控制台的IAM与管理员页面给该账号添加这些角色。
4. 检查容器配置正确性
- 确认
volumes里的凭证挂载路径正确,容器内/etc/otel/key.json存在且内容完整。 - 确认
GOOGLE_APPLICATION_CREDENTIALS环境变量指向的路径与挂载路径完全一致,无拼写错误。
内容的提问来源于stack exchange,提问作者RiddleMeThisXD
相关产品推荐
相关产品推荐

