Cloud Trace 和 Cloud Service Mesh
Cloud Trace 是一个分布式跟踪系统,该系统可从应用中收集延迟数据并近乎实时地显示这些数据。它可让您通过分布式系统跟踪示例请求、观察网络调用,并对系统进行端到端分析。
可以在以下平台上安装的 Cloud Service Mesh 使用 Cloud Trace:
- GKE on Google Cloud
- 本地 GKE Enterprise 集群(如果您通过 Cloud Service Mesh 证书授权机构
请注意,Cloud Trace 默认处于停用状态。启用 Cloud Service Mesh 后 Google Cloud 控制台中的各个页面提供了指向 Cloud Trace 页面。如需详细了解价格信息,请参阅 Cloud Trace 价格页面。
启用 Cloud Trace
本部分介绍如何启用 Cloud Trace。
代管式
本部分介绍如何在托管式 Cloud Service Mesh 上启用 Cloud Trace。
运行以下命令:
cat <<EOF | kubectl apply -f - apiVersion: v1 data: mesh: |- defaultConfig: tracing: stackdriver: {} kind: ConfigMap metadata: name: istio-release-channel namespace: istio-system EOF
其中,release-channel 是您的发布渠道(
asm-managed
、asm-managed-stable
或asm-managed-rapid
)。运行以下命令以查看 configmap:
kubectl get configmap istio-release-channel -n istio-system -o yaml
如需验证 Cloud Trace 是否已启用,请确保
mesh:
部分中显示以下行:... apiVersion: v1 data: mesh: | .... defaultConfig: tracing: stackdriver:{} ...
重启代理。
请注意,跟踪器配置是代理引导加载程序的一部分 因此每个 Pod 都需要重启并重新注入 跟踪器更新。例如,您可以使用以下命令重启属于某个部署的 pod:
kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME
集群内
本部分介绍如何在集群内 Cloud Service Mesh 上启用 Cloud Trace。
如需启用 Cloud Trace,请使用以下叠加文件重新部署客户管理的控制平面。如需详细了解叠加文件,请参阅关于叠加文件。
默认
运行以下命令以启用 Cloud Trace:
./asmcli install \
OTHER_FLAGS \
--option cloud-trace
此命令会应用以下叠加文件,以使用默认选项启用跟踪功能。请注意,默认采样率为 1%。如果您要覆盖默认值,则必须改用 --custom-overlay
。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
values:
global:
proxy:
tracer: stackdriver
如需查看选项列表,请参阅 anthos-service-mesh
软件包。
自定义
您可以通过指定 tracing.sampling
值来覆盖默认值。值必须在 0.0 到 100.0 的范围内,且精确率为 0.01。例如,如需跟踪每 10,000 个请求中的 5 个,请使用 0.05。
以下示例展示了 100% 的采样率(仅用于演示或问题排查目的)。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
defaultConfig:
tracing:
sampling: 100
values:
global:
proxy:
tracer: stackdriver
运行以下命令以启用 Cloud Trace:
./asmcli install \
OTHER_FLAGS \
--custom_overlay PATH_TO_FILE
请注意,跟踪器配置是代理引导配置的一部分,因此 pod 需要重启并重新注入才能获取跟踪器更新。使用以下命令重启属于某个部署的 pod:
kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME
跟踪上下文传播
虽然 Sidecar 代理可以自动发送跟踪记录 span,但它们需要一些提示来将整个跟踪记录关联在一起。应用需要传播适当的 HTTP 标头,以便在代理发送 span 信息时,span 可以正确地关联到单个跟踪记录中。
为此,应用需要从传入请求中收集相应标头并将其传播到任何传出请求:Cloud Service Mesh Stackdriver 跟踪配置将接受以下任意一种标头格式,并 传播以下所有格式:
- B3(
x-b3-traceid
、x-b3-spanid
、x-b3parentspanid
、x-b3-sampled
、x-b3-flags
) - W3C TraceContext (
traceparent
) - Google Cloud Trace (
x-cloud-trace-context
) - gRPC TraceBin (
grpc-trace-bin
)
这意味着您的应用可以使用其中任何一种格式来传播跟踪上下文,生成跟踪记录,并设置为适当的 Stackdriver。
示例
以下是原始请求带有 traceparent
标头的示例 HTTP-Get 请求。请注意代理添加的其他跟踪记录上下文标头。
$ kubectl exec -it sleep-557747455f-n6flv -- curl "httpbin:8000/anything?freeform=" -H "accept: application/json" -H "Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01" -vv
* Trying 10.12.3.52:8000...
* Connected to httpbin (10.12.3.52) port 8000 (#0)
> GET /anything?freeform= HTTP/1.1
> Host: httpbin:8000
> User-Agent: curl/7.80.0-DEV
> accept: application/json
> Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< server: envoy
< date: Wed, 10 Nov 2021 20:36:04 GMT
< content-type: application/json
< content-length: 1032
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 5
<
{
"args": {
"freeform": ""
},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "application/json",
"Grpc-Trace-Bin": "AAB1Q9FeCeXWGAHU90zeEmm4AaDHmGRtdM7wAgE",
"Host": "httpbin:8000",
"Traceparent": "00-7543d15e09e5d61801d4f74cde1269b8-a0c798646d74cef0-01",
"User-Agent": "curl/7.80.0-DEV",
"X-B3-Sampled": "1",
"X-B3-Spanid": "a0c798646d74cef0",
"X-B3-Traceid": "7543d15e09e5d61801d4f74cde1269b8",
"X-Cloud-Trace-Context": "7543d15e09e5d61801d4f74cde1269b8/11585396123534413552;o=1",
"X-Envoy-Attempt-Count": "1",
"X-Forwarded-Client-Cert": "<REDACTED>"
},
"json": null,
"method": "GET",
"origin": "127.0.0.6",
"url": "http://httpbin:8000/anything?freeform="
}
请注意,在返回的请求标头集中,存在完整的跟踪上下文标头集。
如需查看更多传播标头的示例,请参阅跟踪上下文传播。
使用自定义 ID 从客户端创建跟踪记录
如要从具有自定义 ID 的客户端创建跟踪记录,请使用 curl
命令创建包含外部客户端的请求,并强制其显示跟踪记录。例如:
curl $URL --header "x-client-trace-id: 105445aa7843bc8bf206b12000100000"
如需详细了解 x-client-trace-id
,请参阅 Envoy 文档。
访问跟踪记录
查看服务的跟踪记录示例
如需查看应用中服务的跟踪记录采样,请按以下步骤操作:
前往 Google Cloud 控制台中的 Cloud Service Mesh 页面。
在服务下,选择要检查的服务的名称。
以下屏幕截图显示了
frontend
Service 的示例。在请求跟踪记录下,点击任何跟踪记录可查看详细信息。
以下屏幕截图显示了跟踪请求子面板的示例。
查看所有跟踪记录
如需查看 Service 的所有跟踪记录,请按照以下步骤操作:
前往 Google Cloud 控制台中的 Cloud Service Mesh 页面。
在服务下,选择要检查的服务的名称。
转到指标页面。
从时间范围下拉菜单中指定一个时间范围,或使用时间轴设置自定义范围。
点击查看跟踪记录。
Cloud Service Mesh 中的服务跟踪记录包含以下信息:
- 网格中不同服务之间的请求延迟时间。
- HTTP 请求属性,包括 ID、网址、大小、延迟时间和协议。
- 服务名称、命名空间和网格 ID(分别作为
istio.canonical_service
、istio.namespace
和istio.mesh_id
标签的一部分)。