在深入研究OpenTelemetry之前,首先了解一些核心概念很重要。
What is Observability?
Observability 让我们从外部了解一个系统,让我们在不了解其内部工作的情况下提出有关该系统的问题。此外,它允许我们轻松地解决和处理新问题,并帮助我们回答”Why is this happening?“
为了能够向系统提出这些问题,应用程序必须被正确地检测。也就是说,应用程序代码必须发出 traces, metrics, 和 logs 等 signals。当开发人员不需要添加更多的检测来解决问题时,应用程序就会被正确检测,因为他们拥有所需的所有信息。
OpenTelemetry 是插入应用程序代码的机制,有助于使系统 observable。
Reliability & Metrics
Telemetry 是指从系统发出的关于其行为的数据。数据可以以 Traces, Metrics, 和 Logs 的形式出现
Reliability 回答这样一个问题:“服务是否按照用户的期望进行?”一个系统可能会在100%的时间内运行,但如果用户单击“添加到购物车”将一条黑色裤子添加到他们的购物车中,而系统却不断添加一条红色裤子,那么该系统就会被认为是不可靠的。
Metrics 是一段时间内有关您的基础结构或应用程序的数据的聚合 。示例包括:系统错误率、CPU 利用率,给定服务的请求速率。
SLI, 或Service Level Indicator,表示对服务行为的度量。一个好的 SLI 从用户的角度来衡量你的服务。 示例 SLI 可以是网页的加载速度。
SLO 或Service Level Objective,是将可靠性传达给组织/其他团队的方式。这是通过将一个或多个SLI附加到业务价值来实现的
Understanding Distributed Tracing
若要了解分布式跟踪,让我们从一些基础知识开始。
Logs
日志是由服务或其他组件发出的带时间戳的消息。 与 Traces 不同,它们不必与任何特定的用户请求或事务相关联。它们在软件中几乎无处不在,并且在过去开发人员和运营商都非常依赖它来帮助理解系统行为
示例日志:
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
不幸的是,日志对于跟踪代码执行并不是非常有用,因为它们通常缺少上下文信息,例如从何处调用它们。
当它们作为 Span 的一部分包含在内时,会变得更加有用。
Spans
Span 表示工作或操作的单位。它跟踪请求所做的特定操作,描绘执行该操作期间发生的情况。
Span 包含 name、time-related data、 structured log messages, 和 other metadata 以提供有关其跟踪的操作的信息。
以下是Span中出现的信息类型示例:
Span Attributes
key | value |
---|---|
net.transport | IP.TCP |
net.peer.ip | 10.244.0.1 |
net.peer.port | 10243 |
net.host.name | localhost |
http.method | GET |
http.target | /cart |
http.server_name | frontend |
http.route | /cart |
http.scheme | http |
http.host | localhost |
http.flavor | 1.1 |
http.status_code | 200 |
http.user_agent | Mozilla/5.0(Macintosh;Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 |
有关Spans以及它们与OTel的关系的更多信息,请访问 Spans in OpenTelemetry.
Distributed Traces
Distributed Trace(通常称为 Trace),记录请求(由应用程序或最终用户发出)通过多服务架构(如微服务和无服务器应用程序)传播时所采取的路径。
如果不进行跟踪,就很难找出分布式系统中性能问题的原因。
它提高了应用程序或系统运行状况的可见性,并允许我们调试难以在本地重现的行为。跟踪对于分布式系统至关重要,因为分布式系统通常存在不确定性问题或过于复杂而无法在本地再现。
跟踪一个 request 流经分布式系统时发生的情况,使调试和理解分布式系统变得不那么困难。
跟踪由一个或多个 Spans 组成。第一个 Spans 表示 Root Span。 每个 Root Span 表示一个从开始到结束的请求。父级下面的Spans提供了一个更深入的上下文,说明在请求过程中发生了什么(或请求的组成步骤)
许多 Observability 后端将跟踪可视化为瀑布图,这些图表看起来可能像这样:
瀑布图显示了 Root Span 和它的 Child Spans 之间的父子关系。当一个 Span 封装另一个 Span 时,这也表示一个嵌套关系
标签:http,跟踪,Spans,分布式系统,Span,Observability,Primer From: https://www.cnblogs.com/zhouyuguang/p/16938709.html