问题排查

本页面包含 Trace 的问题排查信息。

Trace 界面中没有任何数据

如果预计会显示跟踪数据,却无法在 Google Cloud 项目中查看任何跟踪记录,请尝试执行以下步骤:

  1. 在 Google Cloud 控制台的导航面板中,选择 API 和服务,点击启用 API 和服务,然后启用 Cloud Trace API:

    转到 Cloud Trace API 设置

  2. 如果系统显示 API 已启用,则表示此 API 已经启用。如未显示,请点击启用按钮。

  3. 在工具栏中,点击 导航菜单,然后选择 API 和服务。如果 Cloud Trace API 行没有列出 Requests 列、Errors 列或其他列的任何数值,则表示没有任何跟踪请求到达您的 Google Cloud 项目。检查您的应用和代理,确保它们已配置为将跟踪记录发送到正确的项目。

  4. 如需查看有关 API 用量的详细信息,请点击 Cloud Trace API,然后选择指标标签页。

    如需缩小错误来源的范围,请使用凭据方法过滤条件,并查看您的选择对错误(按 API 方法)图表的影响:

    • 如果所有写入操作都失败,请确保您的服务账号有权访问 Cloud Trace Agent 角色。此角色包含 cloudtrace.traces.patch 权限。如需了解详情,请参阅 Cloud Trace IAM 角色

    • 如果读取失败,请确保您有权访问此 Google Cloud 项目的 Cloud Trace User 角色。如需查看此角色的完整权限列表,请参阅 Cloud Trace IAM 角色

将 Go 应用更新为使用 OpenTelemetry 后,没有跟踪记录数据

您的应用依赖客户端库来捕获跟踪记录,并且在更新应用以使用 OpenTelemetry 后,您不会再看到 Cloud Trace 数据。

由于某些适用于 Go 的 Google 客户端库已与 OpenCensus 集成,因此您必须使用 OpenCensus Bridge。如需详细了解网桥解决的问题,请参阅 OpenCensus Bridge

如需了解 Go 版 Google 客户端库的更新,请参阅问题 4237

已部署的应用没有轨迹数据

您已使用 OpenTelemetry 部署了应用并对其进行插桩 (instrument) 处理以收集轨迹数据,但系统未收集轨迹数据。

对于根服务,请尝试更新环境变量,以便 OpenTelemetry 使用采样率为 0.5traceidratio 采样器:

export OTEL_TRACES_SAMPLER="traceidratio"
export OTEL_TRACES_SAMPLER_ARG="0.5"

对于所有其他服务,请勿设置 OTEL_TRACES_SAMPLER 环境变量,以使用默认采样器 parentbased_always_on。默认设置意味着 span 的采样决策将继承自其父 span(如果存在此类 span)。如果父 span 不存在,则对 span 进行采样。

除非您的应用始终对每个 span 进行采样,否则一般来说不可能强制对请求进行端到端跟踪,因为端到端请求中的每个组件都会做出自己的采样决策。不过,您可以通过向轨迹标头添加一个 sampled 标志并将其设置为 true 来影响该决定。此设置用于提示子组件对请求进行采样。如需详细了解跟踪记录标头,请参阅上下文传播协议

跟踪记录中缺少 span ID 消息

您的跟踪记录包含“缺少 span ID”消息。

在分布式跟踪系统中,存在不完整的跟踪记录。如果采样 span 包含对尚未收到的另一个 span 的引用,则跟踪记录不完整。出现未解析的引用可能由以下原因引起:

  • 引用的 span 未进行抽样。
  • 引用的 span 已采样,但尚未被 Cloud Trace 接收,或者该 span 已收到但未存储。

当您查看不完整的跟踪记录时,Cloud Trace 会在跟踪记录详细信息窗格中显示“缺少 span ID”消息。

如果您一直看到“缺少 span ID”消息,请尝试以下操作:

  • 对于您管理的组件,当此字段存在时,请确保这些组件遵循并传播标头的 sampled 标志标志。此设置用于提示子组件对请求进行采样。如需详细了解跟踪记录标头,请参阅上下文传播协议

    Google Cloud 服务通常会遵循此提示。但是,它们也会限制写入轨迹数据的速率。

  • 如果您使用的是 Anthos Service Mesh,请务必遵循传播这些配置的跟踪上下文的指南。如需查看 Anthos Service Mesh 指南,请参阅跟踪上下文传播