Skip to main content

可观察性入门

1. 什么是可观察性?

可观测性使我们能够从外部理解一个系统,让我们在不了解其内部工作原理的情况下询问有关该系统的问题。此外,它还允许我们轻松地解决和处理新问题(即“未知”),并帮助我们回答“为什么会发生这种情况?”的问题。

为了能够向系统询问这些问题,应用程序必须被正确地仪表化。也就是说,应用程序代码必须发出如跟踪、指标和日志等信号。当开发人员不需要添加更多的仪表来解决问题时,应用程序就被正确地仪表化了,因为他们拥有了所有他们需要的信息。

info

常见的日志是可观察性的一种体现

2. 可靠性&指标

  • Telemetry :遥测(telemetry)指的是系统发出的有关其行为的数据。这些数据可以以跟踪、指标和日志等形式呈现。

  • Reliability :可靠性回答了这个问题:“服务是否正在执行用户所期望的操作?”一个系统可能一直处于运行状态,但如果当用户单击“添加到购物车”以添加一条黑色长裤到其购物车时,系统不断地添加一条红色长裤,那么该系统就被认为是不可靠的。

  • Metrics :指标是关于基础设施或应用程序的数值数据在一段时间内的聚合。例如:系统错误率、CPU利用率、给定服务的请求速率等。

  • SLI:服务水平指标(SLI)是服务行为的衡量标准。一个好的SLI从用户的角度衡量您的服务。一个例子是网页加载的速度。

  • SLO:服务水平目标(SLO)是向组织/其他团队传达可靠性的手段。这是通过将一个或多个SLIs附加到业务价值上来实现的。

3. 了解分布式跟踪(Distributed Tracing)

首先了解一下分布式追踪的几个基本概念。

3.1 Logs

日志是由服务或其他组件发出的带有时间戳的消息。不像跟踪一样,它们不一定与特定的用户请求或交易相关联。它们几乎存在于软件的任何地方,在过去,开发人员和运维人员都非常依赖它们来帮助他们理解系统的行为。

[2021-02-23T13:26:23.505892 #22473]  INFO -- : [6459ffe1-ea53-4044-aaa3-bf902868f730] mxsm-------------

日志也是我们平时开发中接触到最多的。

3.2 Spans

跨度(Span)代表一项工作或操作。它跟踪请求执行的特定操作,描绘了该操作执行期间发生的情况。

一个跨度包含名称、与时间相关的数据、结构化日志消息和其他元数据(即属性),以提供有关跟踪操作的信息。

3.3分布式跟踪(Distributed Traces)

分布式跟踪,更常被称为跟踪(Trace),记录了由应用程序或最终用户发起的请求在多服务架构(如微服务和无服务器应用程序)中传播的路径。

如果没有跟踪,很难定位分布式系统中性能问题的原因。它提高了我们的应用程序或系统健康状况的可见性,并让我们调试本地难以复制的行为。对于常常出现非确定性问题或太复杂以至于无法在本地复制的分布式系统来说,跟踪是必不可少的。

跟踪通过分解请求在分布式系统中流动时发生的事情,使调试和理解分布式系统变得不那么令人生畏。

跟踪由一个或多个跨度(Span)组成。第一个跨度代表根跨度(Root Span)。每个根跨度代表一个请求从开始到结束的过程。在父级下面的跨度提供了有关请求期间发生的详细上下文(或组成请求的步骤)。

许多可观测性后端将跟踪可视化为瀑布图,可能如下所示:

trace-list

note

图片来自skywalking的官网Demo网站的一个请求。

瀑布图展示了根Span和其子Span之间的父子关系。当一个Span封装另一个Span时,这也表示一个嵌套关系。

4. 总结

可观察性是指在云原生应用程序中,使用适当的工具和技术对应用程序进行监控、日志记录、跟踪、度量和分析,以获得对应用程序的深入了解。云原生应用程序通常是分布式的、可伸缩的、容错的,因此需要特殊的可观察性工具来确保这些应用程序的正常运行和维护。Cloud Native的可观察性的目标是帮助开发人员和运维人员更好地理解和优化应用程序,提高应用程序的可靠性、性能和安全性。为了实现这个目标,云原生应用程序通常使用日志记录、指标收集、分布式跟踪、事件处理和可视化等工具和技术来监控和分析应用程序。