【问题标题】:How to get trace ID from code?如何从代码中获取跟踪 ID?
【发布时间】:2018-06-20 08:16:58
【问题描述】:

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

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

几个问题:

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

【问题讨论】:

    标签: java google-app-engine stackdriver google-cloud-logging


    【解决方案1】:

    在请求处理程序中,您可以访问标头并从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")
      }
    }
    

    【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 对不起,如果我不清楚。我想从我的 Web 应用程序中记录其他数据(到不同的 Stackdriver 数据集),并想在代码中以编程方式获取当前请求的请求 ID 和跟踪 ID
    • 是的,我不明白你的意思。我知道Go 有办法确定获取请求 ID(这是我使用的语言),所以我假设 Java 应该可以使用相同的选项。
    【解决方案3】:

    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 方法将跟踪 ID 和请求 ID 发送到 retrieve

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      相关资源
      最近更新 更多