我在容器引擎(GKE)中运行了一些微服务,并且我正尝试在 Google 控制台中获取跟踪信息,但出现了问题。
以下是我的清单:
- Stackdriver Trace API 已在 API 管理器中启用。
- API 管理器仪表板显示错误率为 99.98%。
- GKE 具有以下权限:
- Stackdriver Trace:只写
- Stackdriver Logging API:只写
- Stackdriver 监控 API:完整版
- 服务控制:已启用
- 日志中没有错误
- 我使用了以下手册来集成Trace API:
我是否遗漏了什么?提前致谢。
更新:我能够通过 GKE pod 中的 curl 手动查询跟踪 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"
卷曲输出:
- DNS 缓存中未找到主机名
- 尝试 173.194.202.95...
- 已连接到 cloudtrace.googleapis.com (173.194.202.95) 端口 443 (#0)
- 成功设置证书验证位置:
- CAfile:无 CApath:/etc/ssl/certs
- SSLv3、TLS 握手、客户端问候 (1):
- SSLv3、TLS 握手、服务器 hello (2):
- SSLv3、TLS 握手、CERT(11):
- SSLv3、TLS 握手、服务器密钥交换(12):
- SSLv3,TLS 握手,服务器完成(14):
- SSLv3、TLS 握手、客户端密钥交换(16):
- SSLv3、TLS 更改密码、客户端问候 (1):
- SSLv3,TLS 握手,已完成(20):
- SSLv3、TLS 更改密码、客户端问候 (1):
- SSLv3,TLS 握手,已完成(20):
- 使用 TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 的 SSL 连接
- 服务器证书:
- 主题:C=美国;ST=加利福尼亚;L=山景城;O=Google Inc;CN=*.googleapis.com
- 开始日期: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 Internet Authority G2
- SSL 证书验证成功。
PATCH /v1/projects/line-b/traces HTTP/1.1 用户代理:curl/7.38.0 主机:cloudtrace.googleapis.com 接受:/ 内容类型:application/json 授权:Bearer TOKEN 内容长度:118
- 上传已完全发送:118 个字节(共 118 个字节)<HTTP/1.1 200 OK<Content-Type:application/json;charset=UTF-8...
仪表板也更新了:
答案1
您可以直接查看API 报告图表发现您的调用google.devtools.cloudtrace.v1.TraceService.PatchTraces
因错误而失败403 Forbidden
。
当对服务器的请求未获得授权时,将导致 403 Forbidden。因此,您从容器引擎 (GKE) 集群对“cloudtrace.PatchTraces”的调用未获得授权。
这可能是由于您设置的 Stackdriver Trace“只写”权限有限。此外,请确保添加了‘trace.append’ 范围创建集群时。
关于 Stackdriver 中缺少的日志。一旦为您的集群启用了 Stackdriver Logging,您应该能够简单地写入“STDOUT”和“STDERR”。Fluentd 应该负责将其发送到 Stackdriver,并且输出应该在日志查看器在“GKE 容器”下拉菜单下。
或者你也可以使用Stackdriver 日志客户端库直接写入 Stackdriver,就像使用 Stackdriver Trace API 一样。您还应该设置日志严重性使日志查看器中的过滤更容易找到特定的错误日志(例如您看到的 403)。