Elastic 參數

Trace ID, Transaction, 和 Span 的关系

  • Trace ID:
  • 定义:Trace ID 是一个唯一标识符,用于关联同一请求在不同服务中的所有 transaction 和 span。
  • 用途:通过 trace ID,可以追踪一个请求在整个系统中的流转过程,跨多个服务和操作。

  • Transaction:

  • 定义:Transaction 代表一个完整的请求或任务的执行过程,包括所有相关的操作和步骤。
  • 用途:记录整个请求的开始和结束时间,以及请求过程中发生的所有操作。
  • 关系:一个 trace ID 可以包含多个 transaction,每个 transaction 代表一个服务中的请求处理。

  • Span:

  • 定义:Span 代表 transaction 中的一个具体操作或步骤,例如数据库查询或外部 API 调用。
  • 用途:记录每个具体操作的开始和结束时间,以及操作的详细信息。
  • 关系:一个 transaction 可以包含多个 span,形成一个完整的链路追踪图。

生成方式

  1. 生成 Trace ID
  2. 当一个请求进入系统时,生成一个唯一的 trace ID,并将其传递给所有后续的服务调用。

  3. 传递 Trace ID

  4. 在每个服务之间传递 trace ID,通常通过 HTTP 请求头(例如 traceparent)来实现。

  5. 记录 Transaction 和 Span

  6. 在每个服务中记录 trace ID 以及相关的 transaction 和 span 信息。
  7. Transaction 记录整个请求的处理过程,Span 记录具体的操作步骤。

  8. 查询 Trace ID

  9. 在 Kibana 中使用 trace ID 查询相关的 transaction 和 span,以查看整个请求的链路追踪。 当请求由线程处理时,trace IDtransactionspan 的使用方式基本保持不变,但需要注意以下几点:

舉例

  1. Trace ID
  2. 生成和传递:Trace ID 仍然在请求进入系统时生成,并在各个线程之间传递。确保每个线程处理的操作都包含相同的 Trace ID,以便关联同一请求的所有操作。

  3. Transaction

  4. 记录:每个线程处理的请求部分会记录为一个 transaction。即使请求在不同线程中处理,所有 transaction 仍然会共享相同的 Trace ID。
  5. 线程安全:确保 transaction 的记录是线程安全的,避免多个线程同时写入相同的数据。

  6. Span

  7. 记录:每个线程中的具体操作记录为 span。span 记录的方式与单线程环境相同,但需要确保每个 span 关联到正确的 transaction。
  8. 父子关系:在多线程环境中,span 的父子关系可能会更加复杂,需要确保每个 span 正确地关联到其父 transaction 或父 span。

示例

假设一个请求进入系统后,由多个线程处理不同的操作:

  1. 生成 Trace ID:请求进入系统时生成一个 Trace ID,例如 trace-id-12345
  2. 传递 Trace ID:Trace ID 通过 HTTP 请求头或其他方式传递给各个线程。
  3. 记录 Transaction:每个线程处理的请求部分记录为一个 transaction,例如:
  4. 线程 A 处理的部分记录为 transaction-A,包含 trace-id-12345
  5. 线程 B 处理的部分记录为 transaction-B,包含 trace-id-12345
  6. 记录 Span:每个线程中的具体操作记录为 span,例如:
  7. 线程 A 中的操作记录为 span-A1span-A2,关联到 transaction-A
  8. 线程 B 中的操作记录为 span-B1span-B2,关联到 transaction-B