我在 Google App Engine 标准环境中运行 Java 应用程序。
查看日志(特别是request_log
),我可以看到几个有趣的 ID,例如每个请求的trace_id
和。request_id
几个问题:
- 它们有何不同?它们是独一无二的吗?
- 如何在应用程序代码中获取它们(针对当前请求)?我想将它们记录到不同的 Stackdriver 数据集并能够关联数据
我在 Google App Engine 标准环境中运行 Java 应用程序。
查看日志(特别是request_log
),我可以看到几个有趣的 ID,例如每个请求的trace_id
和。request_id
几个问题:
在请求处理程序中,您可以访问标头并X-Cloud-Trace-Context
从HttpServletRequest
@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")
}
}
您可以在使用标头进行 HTTP 调用时设置跟踪 IDX-Cloud-Trace-Context
,而请求 ID 是 GCP 必须唯一标识每个请求的方式。
所有请求都有一个 ID,而只有一些请求有跟踪。只有被跟踪的请求会将其信息发送到 Stackdriver Trace API。
至于第二个问题,我不太明白,因为 Stackdriver Trace API 会返回所有被跟踪请求的信息,包括请求 ID。Stackdriver Logging APi 将返回每个请求的完整日志,这意味着如果对它们进行跟踪,您将同时收到请求 ID 和跟踪 ID。无需关联这两个字段,因为您将始终将它们放在一起(如果两者都存在)。
TraceID 只是针对您的 App Engine 应用程序的特定请求的跟踪标识符,而 RequestID 是请求的全局唯一标识符。Stackdriver 日志的 RequestID 取决于请求的开始时间。同时,TraceID 将关联的 Stackdriver 跟踪标识到特定请求日志条目,请参见此处。
您可以在链接中找到有关用于特定 Stackdriver 请求日志的术语的详细信息。
RequestID 是一个唯一标识符,它是全球唯一的。另一方面,TraceID 对 Stackdriver Trace 来说是唯一的——在此处阅读更多信息。
借助 Stackdriver Trace API,您可以使用包 google.devtools.cloudtrace.v1 中的 GetTraceRequest 方法来检索跟踪 ID 和请求 ID。