1
1
---
2
- title : Traces
2
+ title : 链路(Trace)
3
3
weight : 1
4
4
description : 请求通过应用程序的路径。
5
+ default_lang_commit : f6af710a28eb8e4cd4306f0a807ac6c6220bbc76
5
6
---
6
7
7
8
** Traces** 为我们提供了向应用程序发出请求时会发生什么的总览图。无论您的应用程序是具有单个数据库的整体式应用程序还是复杂的服务网格,trace 对于了解请求在应用程序中的完整“路径”至关重要。
@@ -41,7 +42,7 @@ description: 请求通过应用程序的路径。
41
42
}
42
43
```
43
44
44
- 这是根 span ,表示整个操作的开始和结束。请注意,它有一个 ` trace_id ` 字段指示 trace,但没有 ` parent_id ` 。这就是您知道它是根 span 的方式。
45
+ 这是根 Span ,表示整个操作的开始和结束。请注意,它有一个 ` trace_id ` 字段指示 trace,但没有 ` parent_id ` 。这就是您知道它是根 Span 的方式。
45
46
46
47
` hello-greetings ` span:
47
48
@@ -77,7 +78,7 @@ description: 请求通过应用程序的路径。
77
78
}
78
79
```
79
80
80
- 此 span 封装了特定任务,例如说问候,其父级是 ` hello ` span 。请注意,它与根 span 共享相同的` trace_id ` ,这表明它是同一 trace 的一部分。此外,它还具有` parent_id ` 与 ` hello ` span 的 ` span_id ` 匹配。
81
+ 此 Span 封装了特定任务,例如说问候,其父级是 ` hello ` Span 。请注意,它与根 Span 共享相同的` trace_id ` ,这表明它是同一 trace 的一部分。此外,它还具有` parent_id ` 与 ` hello ` Span 的 ` span_id ` 匹配。
81
82
82
83
` hello-salutations ` span:
83
84
@@ -106,7 +107,7 @@ description: 请求通过应用程序的路径。
106
107
}
107
108
```
108
109
109
- 此 span 表示此 trace 中的第三个操作,与上一个操作一样,它是 ` hello ` span 的子级。这也使它与 ` hello-greetings ` span 同级。
110
+ 此 Span 表示此 trace 中的第三个操作,与上一个操作一样,它是 ` hello ` Span 的子级。这也使它与 ` hello-greetings ` Span 同级。
110
111
111
112
这三个 JSON 块都共享相同的 ` trace_id ` ,并且 ` parent_id ` field 表示层次结构。这使它成为 Trace!
112
113
@@ -120,7 +121,7 @@ Tracer Provider(有时称为 `TracerProvider`)是 `Trace` 的生产工厂。
120
121
121
122
## Tracer
122
123
123
- Tracer 创建的 span 包含有关给定操作(例如服务中的请求)所发生情况的更多信息。Tracer 是从 Tracer Provider 创建的。
124
+ Tracer 创建的 Span 包含有关给定操作(例如服务中的请求)所发生情况的更多信息。Tracer 是从 Tracer Provider 创建的。
124
125
125
126
## Trace 导出者
126
127
@@ -135,15 +136,15 @@ Context Propagation 是实现 Distributed Tracing 的核心概念。使用上下
135
136
** Span** 表示工作或操作单元。Span 是 Trace 的构建块。在 OpenTelemetry 中,它们包括以下信息:
136
137
137
138
- 名字
138
- - 父 span ID(根 span 为空)
139
+ - 父 Span ID(根 Span 为空)
139
140
- 开始和结束时间戳
140
- - [ 上下文] ( #span-context )
141
+ - [ Span 上下文] ( #span-context )
141
142
- [ 属性] ( #attributes )
142
143
- [ Span 事件] ( #span-events )
143
144
- [ Span 链接] ( #span-links )
144
145
- [ Span 状态] ( #span-status )
145
146
146
- Sample span :
147
+ Span 样例 :
147
148
148
149
``` json
149
150
{
@@ -182,28 +183,28 @@ Sample span:
182
183
}
183
184
```
184
185
185
- Span 可以嵌套,这由父 span ID 的存在来标识:子 span 表示子操作。这允许 span 更准确地捕获应用程序中完成的工作。
186
+ Span 可以嵌套,这由父 Span ID 的存在来标识:子 Span 表示子操作。这允许 Span 更准确地捕获应用程序中完成的工作。
186
187
187
188
### Span 上下文
188
189
189
- Span context 是每个 span 上的不可变对象,其中包含以下内容:
190
+ Span context 是每个 Span 上的不可变对象,其中包含以下内容:
190
191
191
- - 表示 span 所属trace的 Trace ID
192
+ - 表示 Span 所属 trace 的 Trace ID
192
193
- Span 的 Span ID
193
194
- Trace Flags,一种二进制编码,包含有关 trace 的信息
194
195
- Trace State,可以携带供应商特定 trace 信息的键值对列表
195
196
196
- Span 上下文是 span 的一部分,它与 span 一起序列化和传播[ 分布式上下文] ( #context-propagation ) 和[ 包袱] ( ../baggage ) 。
197
+ Span 上下文是 Span 的一部分,它与 Span 一起序列化和传播[ 分布式上下文] ( #context-propagation ) 和[ 包袱] ( ../baggage ) 。
197
198
198
199
由于 Span Context 包含 trace ID,因此在创建 [ Span 链接] ( #span-links ) 。
199
200
200
201
### 属性
201
202
202
203
属性是包含元数据的键值对,您可以使用这些元数据对 Span 进行注释,以携带有关它正在跟踪的操作的信息。
203
204
204
- 例如,如果 span trace 将商品添加到电子商务系统中用户购物车的操作 ,则可以捕获用户的 ID、要添加到购物车的商品的 ID 以及购物车 ID。
205
+ 例如,如果 Span 跟踪了将商品添加到电子商务系统中用户购物车的操作 ,则可以捕获用户的 ID、要添加到购物车的商品的 ID 以及购物车 ID。
205
206
206
- 您可以在创建 span 期间或之后向 span 添加属性。最好在创建范围时添加属性,以使属性可用于 SDK 采样。如果必须在 span 创建后添加值,请使用该值更新 span 。
207
+ 您可以在创建 Span 期间或之后向 Span 添加属性。最好在创建范围时添加属性,以使属性可用于 SDK 采样。如果必须在 Span 创建后添加值,请使用该值更新 Span 。
207
208
208
209
属性具有每种语言 SDK 实现的以下规则:
209
210
@@ -225,72 +226,72 @@ Span 最适合用于第一种情况,因为它是具有开始和结束的操作
225
226
226
227
Span Event 最适合用于跟踪第二种情况,因为它表示有意义的单一时间点。
227
228
228
- #### 何时使用 span 事件与 span 属性
229
+ #### 何时使用 Span 事件与 Span 属性
229
230
230
- 由于 span 事件也包含属性,因此何时使用事件而不是属性的问题可能并不总是有明显的答案。为了做出明智的决定,请考虑特定时间戳是否有意义。
231
+ 由于 Span 事件也包含属性,因此何时使用事件而不是属性的问题可能并不总是有明显的答案。为了做出明智的决定,请考虑特定时间戳是否有意义。
231
232
232
- 例如,当您使用 span 跟踪操作并且操作完成时,您可能希望将操作中的数据添加到您的遥测数据中。
233
+ 例如,当您使用 Span 跟踪操作并且操作完成时,您可能希望将操作中的数据添加到您的遥测数据中。
233
234
234
- - 如果操作完成的时间戳有意义或相关,请将数据附加到 span 事件。
235
- - 如果时间戳没有意义,请将数据附加为 span 属性。
235
+ - 如果操作完成的时间戳有意义或相关,请将数据附加到 Span 事件。
236
+ - 如果时间戳没有意义,请将数据附加为 Span 属性。
236
237
237
238
### Span 链接
238
239
239
240
链接的存在以便您可以将一个 Span 与一个或多个 Span 相关联,从而暗示因果关系。例如,假设我们有一个分布式系统,其中某些操作由 trace 跟踪。
240
241
241
242
为了响应其中一些操作,其他操作将排队等待执行,但其执行是异步的。我们也可以通过 trace 来跟踪这个后续操作。
242
243
243
- 我们希望将后续操作的 trace 与第一个 trace 相关联,但无法预测后续操作何时开始。我们需要关联这两个 trace,因此我们将使用 span 链接。
244
+ 我们希望将后续操作的 trace 与第一个 trace 相关联,但无法预测后续操作何时开始。我们需要关联这两个 trace,因此我们将使用 Span 链接。
244
245
245
246
您可以将第一个 trace 的最后一个 Span 链接到第二个 trace 中的第一个 Span。现在,它们彼此之间有因果关系。
246
247
247
- 链接是可选的,但可以将跟踪 span 彼此关联起来。
248
+ 链接是可选的,但可以将跟踪 Span 彼此关联起来。
248
249
249
250
有关 Span 链接的更多信息,请参阅[ 链接] ( /docs/specs/otel/trace/api/#link ) 。
250
251
251
252
### Span 状态
252
253
253
- 每个 span 都有一个状态。三个可能的值是:
254
+ 每个 Span 都有一个状态。三个可能的值是:
254
255
255
256
- ` Unset `
256
257
- ` Error `
257
258
- ` Ok `
258
259
259
260
默认值为 ` Unset ` 。Span 状态为 Unset 表示它跟踪的操作已成功完成,没有错误。
260
261
261
- 当 span 状态为 ` Error ` 时,这意味着它跟踪的操作中发生了一些错误。例如,这可能是由于处理请求的服务器上的 HTTP 500 错误造成的。
262
+ 当 Span 状态为 ` Error ` 时,这意味着它跟踪的操作中发生了一些错误。例如,这可能是由于处理请求的服务器上的 HTTP 500 错误造成的。
262
263
263
- 当 span 状态为 ` Ok ` (正常) 时,这意味着应用程序开发人员已将该 span 显式标记为无错误。虽然这不直观,但当已知 span 已完成且没有错误时,不需要将 span 状态设置为 ` Ok,因为 ` ` Unset ` ` 涵盖了这一点。Ok ` 的作用是表示对用户显式设置的 span 状态的明确“最终调用”。这在开发人员希望除了 “successful” 之外没有其他 span 解释的情况下非常有用。
264
+ 当 Span 状态为 ` Ok ` (正常) 时,这意味着应用程序开发人员已将该 Span 显式标记为无错误。虽然这不直观,但当已知 Span 已完成且没有错误时,不需要将 Span 状态设置为 ` Ok,因为 ` ` Unset ` ` 涵盖了这一点。Ok ` 的作用是表示对用户显式设置的 Span 状态的明确“最终调用”。这在开发人员希望除了 “successful” 之外没有其他 Span 解释的情况下非常有用。
264
265
265
- 重申一下:` Unset ` 表示一个 span 完成且没有错误。还行 表示开发人员何时明确将 Span 标记为成功。在大多数 情况下,无需将 span 显式标记为 ` Ok ` 。
266
+ 重申一下:` Unset ` 表示一个 Span 完成且没有错误。还行 表示开发人员何时明确将 Span 显式标记为 ` Ok ` 。
266
267
267
268
### Span 类型
268
269
269
- 创建 span 时,它是 ` Client ` 、` Server ` 、` Internal ` 、` Producer ` 或 ` Consumer ` 之一。这种 span 类型为跟踪后端提供了有关如何组装 trace 的提示。根据 OpenTelemetry 规范,服务器 span 的父级通常是远程客户端 span ,而 client span 的子级通常是服务器 span 。同样,使用者 span 的父级始终是生产者,而生产者 span 的子级始终是使用者。如果未提供,则假定 span 类型为 internal。
270
+ 创建 Span 时,它是 ` Client ` 、` Server ` 、` Internal ` 、` Producer ` 或 ` Consumer ` 之一。这种 Span 类型为跟踪后端提供了有关如何组装 trace 的提示。根据 OpenTelemetry 规范,服务器 Span 的父级通常是远程客户端 Span ,而 client Span 的子级通常是服务器 Span 。同样,使用者 Span 的父级始终是生产者,而生产者 Span 的子级始终是使用者。如果未提供,则假定 Span 类型为 internal。
270
271
271
272
272
273
有关 SpanKind 的更多信息,请参阅[ SpanKind] ( /docs/specs/otel/trace/api/#spankind ) 。
273
274
274
275
#### Client
275
276
276
- Client span 表示同步传出远程调用,例如传出 HTTP 请求或数据库调用。请注意,在此上下文中, “synchronous” 不是指 ` async/await ` ,而是指它不排队以供以后处理的事实。
277
+ Client Span 表示同步传出远程调用,例如传出 HTTP 请求或数据库调用。请注意,在此上下文中, “synchronous” 不是指 ` async/await ` ,而是指它不排队以供以后处理的事实。
277
278
278
279
#### Server
279
280
280
- Server span 表示同步传入的远程调用,例如传入的 HTTP 请求或远程过程调用。
281
+ Server Span 表示同步传入的远程调用,例如传入的 HTTP 请求或远程过程调用。
281
282
282
283
#### Internal
283
284
284
- Internal span 表示不跨越进程边界的操作。诸如检测函数调用或 Express 中间件之类的操作可能会使用内部 span 。
285
+ Internal Span 表示不跨越进程边界的操作。诸如检测函数调用或 Express 中间件之类的操作可能会使用内部 Span 。
285
286
286
287
#### Producer
287
288
288
- Producer span 表示创建可在以后异步处理的任务。它可以是远程任务,例如插入任务队列的任务,也可以是由事件侦听器处理的本地任务。
289
+ Producer Span 表示创建可在以后异步处理的任务。它可以是远程任务,例如插入任务队列的任务,也可以是由事件侦听器处理的本地任务。
289
290
290
291
#### Consumer
291
292
292
- Consumer span 表示对生产者创建的任务的处理,并且可能在生产者 span 结束很久之后才开始。
293
+ Consumer Span 表示对生产者创建的任务的处理,并且可能在生产者 Span 结束很久之后才开始。
293
294
294
- ## Specification
295
+ ## 规范
295
296
296
297
有关更多信息,请参阅[ traces 规范] ( /docs/specs/otel/overview/#tracing-signal ) 。
0 commit comments