我花了整整一天时间,只是看不到自己在做什么错,在其他帖子中也找不到我的问题的答案,所以我寻求帮助。
我有一个已安装prometheus的计算实例,一个服务帐户的角色/查看器已配置为自动发现和工作。
我需要在堆栈驱动器监视指标中添加指标,因此我在实例上添加了堆栈驱动器导出程序,但服务运行仍没有问题,我可以使用普罗米修斯对其发起请求。
服务启动如下:
/usr/local/bin/stackdriver_exporter --google.project-id PROJECTID --monitoring.metrics-type-prefixes \
cloudsql.googleapis.com/,compute.googleapis.com/,vpn.googleapis.com/,loadbalancing.googleapis.com/,storage.googleapis.com/,redis.googleapis.com/
那里似乎没有什么问题,我对项目进行了三重检查,以防万一我视而不见。
我的问题是,我总是会遇到以下错误:
Nov 30 16:15:34 INSTANCENAME stackdriver_exporter[19149]: time="2018-11-30T16:15:34Z" leve
l=error msg="Error while getting Google Stackdriver Monitoring metrics: googleapi: Error 403: Request had
insufficient authentication scopes., forbidden" source="monitoring_collector.go:132"
我想到了角色问题,因此我添加了监视查看器,然后添加了监视管理员,甚至是角色/所有者,但这并没有任何东西。
我还尝试将 GOOGLE_APPLICATION_CREDENTIALS env变量设置为确定帐户,但仍然是相同的错误。
我已检查并启用了 Stackdriver API 和 Stackdriver Monitoring API ,我必须缺少一些东西,但我只是不敢动手,可能会有帮助感谢。
答案 0 :(得分:0)
请注意,在gcloud中,最终权限是服务帐户的角色/权限与实例范围之间的“掩码”。
设置实例作为服务帐户运行时,该服务帐户具有的访问级别取决于授予该实例的访问范围和授予该服务帐户的IAM角色。
因此,如果在没有作用域monitoring viewer
的实例中使用角色为https://www.googleapis.com/auth/monitoring.read
的服务帐户运行此帐户,则将无法读取监视器指标。
1。-用gcloud compute instances describe INSTANCE
检查实例的范围。您会看到类似这样的内容:
- email: 487724816353-compute@developer.gserviceaccount.com
scopes:
- https://www.googleapis.com/auth/monitoring.write
- https://www.googleapis.com/auth/logging.write
- https://www.googleapis.com/auth/devstorage.read_only
您可以在那里看到正确的示波器吗?
2。-如果没有尝试设置所需的范围,请执行以下操作: (您需要为此停止实例)
gcloud compute instances set-service-account INSTANCE \
--service-account SERVICE_ACCOUNT@xxxxxxxx.iam.gserviceaccount.com \
--scopes cloud-platform
3.-按照gcloud最佳做法(https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#best_practices)中的建议,上一条命令允许完全访问实例中的所有APIS。然后,您只需添加角色或将角色删除到服务帐户即可控制最终权限。