0

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

查看日志(特别是request_log),我可以看到几个有趣的 ID,例如每个请求的trace_id和。request_id

几个问题:

  • 它们有何不同?它们是独一无二的吗?
  • 如何在应用程序代码中获取它们(针对当前请求)?我想将它们记录到不同的 Stackdriver 数据集并能够关联数据
4

3 回答 3

1

在请求处理程序中,您可以访问标头并X-Cloud-Trace-ContextHttpServletRequest

@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")
  }
}
于 2018-06-29T18:45:10.400 回答
0

您可以在使用标头进行 HTTP 调用时设置跟踪 IDX-Cloud-Trace-Context,而请求 ID 是 GCP 必须唯一标识每个请求的方式。

所有请求都有一个 ID,而只有一些请求有跟踪。只有被跟踪的请求会将其信息发送到 Stackdriver Trace API。

至于第二个问题,我不太明白,因为 Stackdriver Trace API 会返回所有被跟踪请求的信息,包括请求 ID。Stackdriver Logging APi 将返回每个请求的完整日志,这意味着如果对它们进行跟踪,您将同时收到请求 ID 和跟踪 ID。无需关联这两个字段,因为您将始终将它们放在一起(如果两者都存在)。

于 2018-06-20T08:27:48.407 回答
0

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

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

RequestID 是一个唯一标识符,它是全球唯一的。另一方面,TraceID 对 Stackdriver Trace 来说是唯一的——在此处阅读更多信息

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

于 2018-07-03T19:02:04.007 回答