如何从代码中获取跟踪 ID?

How to get trace ID from code?

我是 运行 Java 在 Google App Engine 标准环境上的应用程序。

查看日志(特别是 request_log),我可以看到一些有趣的 ID,例如每个请求的 trace_idrequest_id

几个问题:

您可以 set a trace ID when you're doing the HTTP call 使用 X-Cloud-Trace-Context header,而请求 ID 是 GCP 必须唯一标识每个请求的方式。

所有请求都有ID,只有部分请求有痕迹。只有被跟踪的请求才会将它们的信息发送到 Stackdriver Trace API.

关于第二个问题,我不是很理解,因为Stackdriver Trace API 会return 跟踪请求的所有信息,包括请求ID。 Stackdriver Logging APi 将 return 每个请求的完整日志,这意味着如果它们被跟踪,您将收到请求 ID 和跟踪 ID。无需将这两个字段相关联,因为您总是会将它们放在一起(如果两者都存在)。

在请求处理程序中,您可以访问 headers 并从 HttpServletRequest

中提取 X-Cloud-Trace-Context
@WebServlet(name = "requests", description = "Requests: Trivial request", urlPatterns = "/requests")
public class RequestsServlet extends HttpServlet {
  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    req.getHeader("X-Cloud-Trace-Context")
  }
}

TraceID 只是对 App Engine 应用程序的特定请求的跟踪标识符,而 RequestID 是请求的全局唯一标识符。 Stackdriver 日志的 RequestID 取决于请求的开始时间。同时,TraceID 将关联的 Stackdriver 跟踪标识为特定请求日志条目 See here

您可以在 Link 中找到有关用于特定 Stackdriver 请求日志的术语的详细信息。

RequestID 是一个唯一标识符,它是全球唯一的。另一方面,TraceID 是 Stackdriver Trace 独有的 — read more here.

借助 Stackdriver Trace API,您可以使用包 google.devtools.cloudtrace.v1 中的 GetTraceRequest 方法来 retrieve 跟踪 ID 和请求 ID。