无法在Google云端控制台中获取Stackdriver跟踪信息

我有一些在Container Engine(GKE)中运行的微服务,我试图在Google控制台中获取跟踪信息,但是出现了一些问题。

这是我的清单:

  • 在API Manager中启用Stackdriver Trace API。
  • API Manager仪表板显示99.98%的错误率。
  • GKE拥有权限:
    • Stackdriver跟踪:只写
    • Stackdriver Logging API:只写
    • Stackdriver监控API:完整
    • 服务控制:已启用
  • 日志中没有错误
  • 我使用以下手册来集成Trace API:
    • ASP.NET核心

我错过了什么? 提前致谢。

api管理器错误


更新:我能够通过GKE pod的curl手动查询trace api:

kubectl exec -it POD -- /bin/bash curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google" curl --verbose -d '{"traces": [{"projectId":"xxxx","traceId":"12345678901234567890123456789053","spans":[{"spanId":3,"name":"test"}]}]}' -X PATCH https://cloudtrace.googleapis.com/v1/projects/xxxx/traces -H "Content-Type: application/json" -H "Authorization":"Bearer TOKEN" 

curl输出:

  • 在DNScaching中找不到主机名
  • 尝试173.194.202.95 …
  • 连接到cloudtrace.googleapis.com(173.194.202.95)端口443(#0)
  • 成功设置证书validation位置:
  • CAfile:无CApath:/ etc / ssl / certs
  • SSLv3,TLS握手,客户端hello(1):
  • SSLv3,TLS握手,Server hello(2):
  • SSLv3,TLS握手,CERT(11):
  • SSLv3,TLS握手,服务器密钥交换(12):
  • SSLv3,TLS握手,服务器完成(14):
  • SSLv3,TLS握手,客户端密钥交换(16):
  • SSLv3,TLS更改密码,客户端hello(1):
  • SSLv3,TLS握手,完成(20):
  • SSLv3,TLS更改密码,客户端hello(1):
  • SSLv3,TLS握手,完成(20):
  • SSL连接使用TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
  • 服务器证书:
  • 主题:C = US; ST =加利福尼亚; L =山景; O = Google Inc; CN = *。googleapis.com
  • 开始date:2017-07-05 08:20:33 GMT
  • 有效期至:2017-09-27 08:09:00 GMT
  • subjectAltName:cloudtrace.googleapis.com匹配
  • 发行人:C = US; O = Google Inc; CN = Google互联网pipe理局G2
  • SSL证书validation确定。

    PATCH / v1 / projects / line-b / traces HTTP / 1.1 User-Agent:curl / 7.38.0 Host:cloudtrace.googleapis.com接受: / Content-Type:application / json授权:持票人TOKEN Content-Length:118

  • 上传完全发送:118个字节中的118个<HTTP / 1.1 200 OK <Content-Type:application / json; charset = UTF-8 …

仪表板也已更新:

在这里输入图像说明

您可以直接查看API报告图 ,查看您对google.devtools.cloudtrace.v1.TraceService.PatchTraces的调用失败,并显示403 Forbidden错误。

403当对服务器的请求未被授权时引起禁止。 因此,从Container Engine(GKE)群集到“cloudtrace.PatchTraces”的呼叫未经授权。

这可能是由于您设置了有限的Stackdriver Trace“只写”权限。 另外,确保在创build群集时添加了“trace.append”范围 。


关于Stackdriver中缺less的日志。 一旦为您的集群启用了Stackdriver Logging,您应该可以简单地写入“STDOUT”和“STDERR”。 Fluentd应该照顾发送这个到Stackdriver和输出应该在日志查看器下的“GKE容器”下拉列表中可用。

或者,您可以使用Stackdriver Logging Client Library直接写入Stackdriver,就像使用Stackdriver Trace API一样。 您还应该设置日志严重性以便在日志查看器中更轻松地进行筛选,以查找特定的错误日志(如您所看到的403)。