Skip to content

Commit 9762aac

Browse files
zhihalimy-git9windsonsea
authored
[zh] translate the observability primer (#4920)
Co-authored-by: my-git9 <[email protected]> Co-authored-by: Michael <[email protected]>
1 parent fc5004d commit 9762aac

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
---
2+
title: 可观测性入门
3+
description: 可观测性的核心概念
4+
weight: 9
5+
cSpell:ignore: webshop
6+
default_lang_commit: e771c886739c4847b332b74f24b09d2769aab875
7+
---
8+
9+
## 什么是可观测性? {#what-is-observability}
10+
11+
可观测性让你能够从外部理解一个系统,它允许你在不了解系统内部运作的情况下,对该系统提出问题。更重要的是,
12+
它能帮你轻松排查和处理新出现的问题,也就是所谓的"未知的未知"。它还能帮你回答"为什么会发生这种情况?"这样的问题。
13+
14+
要对你的系统提出这些问题,你的应用程序必须进行适当的插桩。也就是说,应用程序代码必须能够发出[信号](/docs/concepts/signals/)
15+
例如[链路](/docs/concepts/signals/traces/)
16+
[指标](/docs/concepts/signals/metrics/)
17+
[日志](/docs/concepts/signals/logs/)。当开发人员不需要添加更多插桩就能排查问题时,
18+
我们就可以说这个应用程序已经完成了适当的插桩,因为他们已经拥有了所需的所有信息。
19+
20+
[OpenTelemetry](/docs/what-is-opentelemetry/)就是一种为应用程序代码进行插桩的机制,它的目的是帮助使系统变得可观测。
21+
22+
## 可靠性和指标
23+
24+
**Telemetry** 指的是系统及其行为发出的数据。这些数据可以是[链路](/docs/concepts/signals/traces/)[指标](/docs/concepts/signals/metrics/)[日志](/docs/concepts/signals/logs/)的形式。
25+
26+
**可靠性** 回答了这个问题:"服务是否在按用户期望的方式运行?"一个系统可能 100% 的时间都在运行,但如果当用户点击"加入购物车"来添加一双黑色鞋子时,系统并不总是能准确地添加黑色鞋子,那么这个系统就可能是****可靠的。
27+
28+
**指标** 是对一段时间内基础设施或应用程序的数值数据的汇总。例如:系统错误率、CPU使用率和特定服务的请求率。要了解更多关于指标以及它们与OpenTelemetry的关系,可查阅[指标](/docs/concepts/signals/metrics/)
29+
30+
**SLI**,即服务水平指标(Service Level Indicator),代表对服务行为的衡量。一个好的SLI应该从用户的角度来衡量你的服务。SLI的一个例子可以是网页加载的速度。
31+
32+
**SLO**,服务水平目标(Service Level Objective)是一种向组织内部或其他团队传达服务可靠性的方法。它通过将具体的技术指标(SLI)与业务目标关联起来,使技术性能变得对业务有意义。例如,"网站页面加载时间(SLI)必须在3秒内,以确保良好的用户体验和提高转化率(业务价值)"。
33+
34+
## 理解分布式链路
35+
36+
分布式链路让你能够观察请求如何在复杂的分布式系统中传播。它提高了应用程序或系统健康状况的可见性,并让你能够调试那些难以在本地重现的行为。对于分布式系统来说,分布式链路是必不可少的,因为这些系统通常存在不确定性问题,或者过于复杂而无法在本地重现。
37+
38+
要理解分布式链路,你需要了解其各个组成部分的角色:日志、span(跨度)和 trace(链路)。
39+
40+
### 日志
41+
42+
**日志** 日志是由服务或其他组件发出的带时间戳的消息。与[链路](#分布式链路)不同,它们不一定与特定的用户请求或事务相关联。在软件中几乎到处都能找到日志。长期以来,开发人员和运维人员一直依靠日志来洞察系统行为。
43+
44+
日志样例:
45+
46+
```text
47+
I, [2021-02-23T13:26:23.505892 #22473] INFO -- : [6459ffe1-ea53-4044-aaa3-bf902868f730] Started GET "/" for ::1 at 2021-02-23 13:26:23 -0800
48+
```
49+
50+
日志虽然有用,但仅靠它们来追踪代码执行还不够,因为日志通常缺乏上下文信息,比如它们是从哪里被调用的。
51+
52+
当日志作为 [span](#spans)(跨度)的一部分,或者与 trace(链路)和 span 关联起来时,它们的价值就会大大增加。
53+
54+
要深入了解日志以及它们与OpenTelemetry的关系,请参阅[日志](/docs/concepts/signals/logs/)章节。
55+
56+
### Spans
57+
58+
**Span**(跨度)是分布式链路中的基本构建块,它代表了一个具体的操作或工作单元。每个 span 都记录了请求中的特定动作,帮助我们了解操作执行过程中发生的详细情况。
59+
60+
一个 span 包含名称、时间相关的数据、[结构化的日志消息](/docs/concepts/signals/traces/#span-events),以及其他[元数据(属性)](/docs/concepts/signals/traces/#attributes),这些信息共同描绘了该操作的完整画面。
61+
62+
### Span 属性
63+
64+
Span 属性是附加在 span 上的额外信息。这些属性为我们提供了更多关于操作上下文的细节。
65+
66+
下面的表格列出了一些 span 属性的例子:
67+
68+
|||
69+
| :-------------------------- | :--------------------------------------------------------------------------------- |
70+
| `http.request.method` | `"GET"` |
71+
| `network.protocol.version` | `"1.1"` |
72+
| `url.path` | `"/webshop/articles/4"` |
73+
| `url.query` | `"?s=1"` |
74+
| `server.address` | `"example.com"` |
75+
| `server.port` | `8080` |
76+
| `url.scheme` | `"https"` |
77+
| `http.route` | `"/webshop/articles/:article_id"` |
78+
| `http.response.status_code` | `200` |
79+
| `client.address` | `"192.0.2.4"` |
80+
| `client.socket.address` | `"192.0.2.5"` (the client goes through a proxy) |
81+
| `user_agent.original` | `"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0"` |
82+
83+
要深入了解 spans 及其与 OpenTelemetry 的关系,请查看 [Spans](/docs/concepts/signals/traces/#spans)
84+
85+
### 分布式链路
86+
87+
**分布式链路**,通常简称为**链路**,记录了请求(无论是来自应用程序还是终端用户)在多服务架构(如微服务和无服务器应用)中传播的路径。
88+
89+
一个链路由一个或多个 span 组成。第一个 span 被称为根 span,它代表了一个请求从开始到结束的全过程。根 span 下的子 span 则提供了请求过程中更详细的上下文信息(或者说,构成了请求的各个步骤)。
90+
91+
如果没有链路,在分布式系统中找出性能问题的根源将会非常具有挑战性。链路通过分解请求在分布式系统中的流转过程,使得调试和理解分布式系统变得不那么令人生畏。
92+
93+
许多可观测性后端会将链路可视化为瀑布图,如下所示:
94+
95+
![链路示例](/img/waterfall-trace.svg '链路瀑布图')
96+
97+
瀑布图清晰地展示了根 span 与其子 span 之间的父子关系。当一个 span 包含另一个 span 时,这种关系就表现为嵌套结构。
98+
99+
想要更深入地了解链路,以及它如何在 OpenTelemetry 中发挥作用,欢迎查阅[链路](/docs/concepts/signals/traces/)

0 commit comments

Comments
 (0)