可观测性是什么-全面的初学者指南

如果您想了解什么是可观测性、它的重要性、它的好处和它的组件,本指南适合您。

什么是可观测性?

可观察性的字面意思是可观察的状态。

在 IT 界,可观测性被定义为根据其生成的输出数据(例如日志、指标和跟踪)测量系统当前状态的能力

可观测性是什么-全面的初学者指南_第1张图片

Opentelemetry 网站以一种很好的方式描述了可观测性。

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

opentelemetry.io

询问有关该系统的问题意味着收集有关系统如何执行和行为的信息和见解的能力。

让我们看一个实际的例子。

想象一下,您正在管理一个电子商务网站,其中包含许多微服务,例如前端服务,产品服务,购物车服务,订单服务,支付服务等。

网站突然开始缓慢加载。

如果没有可观测性,您可能需要挖掘代码、数据库响应时间、API 延迟、第三方服务延迟,并手动检查各种组件以找到问题。

但是,有了可观测性工具,您可以“提出问题”,例如:

  1. 网站在过去一小时内的平均响应时间是多少?
  2. 错误率是否有任何峰值?
  3. 哪个特定服务或组件的响应时间最长?
  4. 数据库查询响应时间如何?
  5. 是否有特定类型的请求或事务出现延迟?
  6. 速度变慢是在所有用户之间一致还是特定于某个区域?

这些问题可以通过应用程序日志、指标和跟踪提供的数据来回答。

  1. 日志记录库记录应用程序中发生的事件。
  2. 指标提供有关系统运行的数字数据(如响应时间、请求数等)。使用库对应用程序进行检测,以发出指标
  3. 跟踪使用 OpenTelemetry 或 APM(应用程序性能监控)代理等库跟踪请求通过分布式系统中的各种服务的旅程。

通过分析这些数据,您可以确定,例如,速度变慢是由于特定服务响应时间过长,可能是由于最近的代码更改或负载增加。这样可以更快、更有效地解决问题。

现在你可能会想,这听起来像是典型的监控。但事实并非如此。让我们了解监控和可观测性之间的区别。

可观测性与监控之间的区别

对于DevOps引擎人员或刚刚开始进入SRE的人来说,彻底了解可观测性与监控之间的区别非常重要。

以下是DORA关于可观测性和监控的研究。

监控是一种工具或技术解决方案,允许团队监视和了解其系统的状态。监控基于收集预定义的指标或日志集。

可观测性是一种工具或技术解决方案,允许团队主动调试他们的系统。可观测性基于探索未预先定义的属性和模式。

devops-research.com

监视是关于密切关注已知问题和应用程序/系统指标。

它涉及为特定指标(如 CPU 使用率、内存使用率、响应时间、数据库查询执行时间、4xx、5xx 错误率等)和其他记录在案的监控 KPI 设置警报和阈值,以便在出现问题时通知团队。

因此,监控的重点是根据预定义的指标和日志跟踪系统的状态和运行状况。

例如,当服务器的CPU使用率超过80%或API响应时间超过2秒时,监控工具会发出告警。

另一方面,可观察性更进一步。

它是关于通过查看其输出(如日志、指标和跟踪)来了解应用程序和系统的内部状态。这不仅要知道什么时候出错,还要了解为什么会出错。

可观测性的关键焦点是更具探索性和调查性,允许您就应用程序行为提出任意问题,并诊断您没有预料到的问题。

例如,当网站开始意外变慢时,您可以使用可观测性工具来分析数据模式、跟踪请求和查看日志,以确定最近的代码部署是否导致了内存泄漏,从而导致响应时间变慢。

简单地说,监控会告诉您系统出现故障,而可观测性可帮助您找出系统出现故障的原因。

现在我们已经对可观测性有了全面的了解,让我们看一下关键的可观测性概念。

可观测性概念

以下是可观测性的三大支柱。

  1. Metrics
  2. Logs
  3. Traces

可观测性是什么-全面的初学者指南_第2张图片

Logs

日志记录了应用程序中的事件。日志条目通常包含有关所发生事件的信息,包括时间戳、事件描述、严重性级别,有时还包括用户 ID 或会话 ID 等其他上下文。

2023-11-20 10:15:32 INFO  UserService: Starting getUserById for userId=12345
2023-11-20 10:15:32 DEBUG UserService: Fetching user data from database for userId=12345
2023-11-20 10:15:33 INFO  UserService: User data retrieved successfully for userId=12345
2023-11-20 10:15:34 WARN  UserService: User 12345 has outdated profile information
2023-11-20 10:15:35 ERROR UserService: Failed to send notification email to userId=12345, [email protected]
2023-11-20 10:15:35 INFO  UserService: getUserById completed for userId=12345

开发人员负责登录代码。由于大多数软件库和语言都具有内置功能,因此日志易于实现。以下是不同类型日志格式的几个示例。

  1. 纯文本:以人类可读文本记录的最简单形式。
  2. 结构化:以机器可读格式(JSON、XML 等)构建的日志条目
  3. 二进制格式:以二进制格式存储的日志(Protobuf 日志、MySQL 二进制日志、Systemd 日志等)
  4. 自定义格式:满足特定的项目要求。

Metrics

指标是以在一段时间间隔内测量的数字表示的数据。

例如,prometheus 中的node_memory_MemAvailable_bytes指标显示可用内存量(以字节为单位)。http_request_duration_seconds指标跟踪 HTTP 请求的持续时间。

以下是 Prometheus 导出器生成的指标示例。

http_requests_total{method="post",code="200"} 1027
http_requests_total{method="post",code="400"} 3
http_request_duration_seconds_bucket{le="+Inf"} 134091
http_request_duration_seconds_sum 52123
http_request_duration_seconds_count 134091
node_memory_MemAvailable_bytes 2.147483648e+09
node_cpu_seconds_total{mode="user"} 9123.42

指标在可观测性方面发挥着关键作用。通过指标,您可以一目了然地了解系统状态和随时间的变化,并帮助您发现不同时间系统行为的趋势和模式。

Traces & Spans

“追踪”和“跨度”是主要用于分布式跟踪的术语。

分布式追踪是一种用于跟踪和监视通过分布式系统的请求流的方法,尤其是在微服务体系结构中。

让我们看一个使用微服务构建的电子商务应用程序示例。

当用户下订单时,请求会通过多个服务传输:它首先到达订单处理服务,然后与库存、付款和用户帐户服务进行通信。

分布式跟踪将跨所有这些服务跟踪此请求。

在这里,Trace 表示单个订单请求通过系统的整个旅程。每个跟踪都由多个跨度组成,其中每个 Span 表示跟踪中的特定操作或进程。

跨度可以是对微服务、数据库查询或任何其他离散工作单元的调用。

可观测性是什么-全面的初学者指南_第3张图片

通过分析痕迹,开发人员可以识别瓶颈,了解不同组件对系统性能的影响,并解决问题。

像 Jaeger 或 Zipkin 这样的开源分布式跟踪工具可以将跨度序列显示为时间线,从而更容易理解请求的流和延迟。

可观测性如何工作?

可观测性平台通过将嵌入到应用程序和基础结构组件中的现有检测集成,并提供向这些组件添加检测的工具,持续识别和收集性能遥测数据。

大多数平台收集指标、跟踪和日志。然后,将它们实时连接起来,为 DevOps 团队、站点可靠性工程 (SRE) 团队和 IT 人员提供全面的上下文信息,包括每个事件的内容、位置和原因,这些事件可以指示、促成或用于解决应用程序性能问题。

为什么可观测性很重要?

借助可观测性,在高度分布式系统上工作的跨职能团队,尤其是在企业环境中,可以更快、更有效地对精确查询做出反应。

人们可以确定是什么降低了应用程序的性能,并在它影响整体性能或导致市中心之前努力修复它。

可观测性的好处不仅限于 IT 用例。当您收集和检查可观测性数据时,您可以了解数字服务对组织的影响。通过此访问权限,可以监视用户体验 SLO 的结果,检查软件版本是否满足业务目标,并根据最重要的内容确定业务选择的优先级。

根据 Observe State of Observability 报告,91% 的组织表示他们目前正在实践可观测性。然而,只有 11% 的组织认为他们的整个环境目前是可观察的

可观测性是什么-全面的初学者指南_第4张图片

可观测性有哪些好处

可观测性为最终用户、企业和 IT 团队提供了显著的优势。以下是显著的好处以及可观测性的重要性

  1. 应用程序性能监控:完整的端到端可观测性使企业能够更快地识别性能问题,即使是云原生和微服务架构带来的问题。使用先进的可观测性解决方案可以自动执行更多任务,这将提高运营和应用团队的生产力和创造力。
  2. DevSecOps 和 SRE:可观测性是应用程序和支持它的基础设施的基本特征,而不仅仅是实现创新工具的结果。软件的设计者和开发人员必须使其易于观察。然后,在软件交付生命周期中,DevSecOps 和 SRE 团队可以使用和理解可观察数据,以创建更强大、更安全、更具弹性的应用。
  3. 监视基础架构、云和 Kubernetes:使用可观测性的几个好处之一是它有助于基础结构监控。它使基础设施和运营(I&O)团队能够利用可观测性解决方案提供的改进上下文来增加应用程序的正常运行时间和性能,减少识别和修复问题所需的时间,检测云延迟问题并优化资源利用率,以改善其Kubernetes环境和现代云架构的管理。
  4. 最终用户体验:积极的用户体验可以提高企业的声誉和收入,使其具有竞争优势。公司可以通过在最终用户发现问题之前识别和解决问题并在提出要求之前实施改进来提高客户满意度和保留率。

可观测性面临哪些挑战?

尽管可观测性一直很困难,但云的复杂性和变化的加速使得企业必须解决这一问题。当涉及微服务和容器化应用程序时,云系统会生成更高的遥测数据。此外,它们生成的遥测数据比团队过去必须破译的要全面得多。

关于可观测性,组织经常遇到以下困难:

  1. 数据孤岛:由于存在多个代理、不同的数据源和孤岛监控工具,因此很难理解应用程序、各种云和数字渠道(包括 Web、移动和 IoT)之间的相互依赖关系。
  2. 数量、速度、种类和复杂性:在不断发展的现代云基础设施(如 AWS、Azure 和 Google Cloud Platform)中,每个组件生成的大量原始数据几乎不可能找到答案 (GCP)。Kubernetes 和容器快速启动和关闭的能力也证明了这一点。
  3. 缺乏前期制作:尽管在预生产中进行了负载测试,但开发人员仍然缺乏在将代码推送到生产环境之前观察或理解真实用户如何影响应用和基础结构的方法。
  4. 浪费时间进行故障排除:引入来自应用程序、运营、基础架构、开发和数字体验的团队进行故障排除并尝试查明问题的根源。因此,宝贵的时间被浪费在进行有根据的猜测和试图理解遥测上。

可观测性与DevOps有何关系?

在DevOps中,可观测性是必不可少的。它在DevOps过程中起着至关重要的作用,因为它允许团队

  1. 实时检测问题。
  2. 使用可观测性工具进行调试,以跟踪根本原因。
  3. 性能优化
  4. 软件和基础设施的持续改进

如何开始使用可观测性?

为了实现可观测性,您的系统和应用程序必须配备适当的设备来收集必要的遥测数据。您可以通过创建自己的工具、利用开源软件或购买营利性可观测性解决方案来创建可观测系统。

以下是有关如何开始使用 Observability 的几个步骤:

  1. 确定您的业务目标:通过减少基础设施支出、支持增长容量规划或增强关键业务 KPI(如平均恢复时间),强大的可观测性配置有助于增加底线收入。通过为支持人员提供额外的上下文数据,它可以提高透明度,甚至创造积极的客户体验。但是,每个目标的可观测性配置可能非常不同。在确定主要业务目标后,创建可观测性策略以实现这些目标。
  2. 专注于正确的指标: 精心设计的可观察性方法不是在问题出现时做出反应,而是能够预测可能的错误或故障的开始,然后确定其根本原因的位置。追求透明度涉及多个数据收集和分析过程以及其他监控和测试技术。
  3. 事件日志: 对于架构和开发团队来说,事件日志提供了有关分布式系统可观测性的重要数据源。专为事件日志记录而设计的工具(如 Prometheus、Middleware 和 Splunk)可捕获和存储事件。这些事件可能包括成功完成申请过程、重大系统故障、意外停机或导致过载的流量涌入。由于它为开发人员提供了重要的取证信息,以发现有缺陷的组件或有问题的组件交互,因此这对于调试和错误处理尤为重要。
  4. 访问的数据可视化:当团队成功收集可观测性数据时,必须将其压缩为可用且可共享的格式。这通常是通过使用各种工具对数据进行可视化表示来实现的。从那里,团队成员可以与从事该计划的其他团队传播或共享该信息。
  5. 选择合适的可观测性平台: 在选择合适的可观测性平台时,请考虑以下因素;

    – 该工具是免费的吗?
    – 该工具是否使用开源代理?
    – 好用吗?
    – 我是否具备充分发挥该工具潜力的技术知识?
    – 该工具可以处理的数据量是多少?

    回答这些问题和其他特定于业务的问题将帮助您做出明智的决定。

结论

可观测性系统需要适合其预期平台。如果没有这一点,它可能会发展成一个繁琐的系统,推高运营成本,或者不起眼,几乎没有可见性。因此,计划还必须指定和命名组织设计必须实现的主要查询。

如果没有这个方向,可观测性就有可能变成一个由相互冲突的问题组成的混乱网络,可能无法提供预期的连贯一致的用户体验和支持。

你可能感兴趣的:(可观测性,性能优化)