如果您想了解什么是可观测性、它的重要性、它的好处和它的组件,本指南适合您。
可观察性的字面意思是可观察的状态。
在 IT 界,可观测性被定义为根据其生成的输出数据(例如日志、指标和跟踪)测量系统当前状态的能力。
Opentelemetry 网站以一种很好的方式描述了可观测性。
可观测性让我们从外部理解一个系统,让我们在不了解其内部工作原理的情况下提出有关该系统的问题。此外,它使我们能够轻松地排除和处理新问题(即“未知的未知数”),并帮助我们回答“为什么会发生这种情况”的问题。
opentelemetry.io
询问有关该系统的问题意味着收集有关系统如何执行和行为的信息和见解的能力。
让我们看一个实际的例子。
想象一下,您正在管理一个电子商务网站,其中包含许多微服务,例如前端服务,产品服务,购物车服务,订单服务,支付服务等。
网站突然开始缓慢加载。
如果没有可观测性,您可能需要挖掘代码、数据库响应时间、API 延迟、第三方服务延迟,并手动检查各种组件以找到问题。
但是,有了可观测性工具,您可以“提出问题”,例如:
这些问题可以通过应用程序日志、指标和跟踪提供的数据来回答。
通过分析这些数据,您可以确定,例如,速度变慢是由于特定服务响应时间过长,可能是由于最近的代码更改或负载增加。这样可以更快、更有效地解决问题。
现在你可能会想,这听起来像是典型的监控。但事实并非如此。让我们了解监控和可观测性之间的区别。
对于DevOps引擎人员或刚刚开始进入SRE的人来说,彻底了解可观测性与监控之间的区别非常重要。
以下是DORA关于可观测性和监控的研究。
监控是一种工具或技术解决方案,允许团队监视和了解其系统的状态。监控基于收集预定义的指标或日志集。
devops-research.com
可观测性是一种工具或技术解决方案,允许团队主动调试他们的系统。可观测性基于探索未预先定义的属性和模式。
监视是关于密切关注已知问题和应用程序/系统指标。
它涉及为特定指标(如 CPU 使用率、内存使用率、响应时间、数据库查询执行时间、4xx、5xx 错误率等)和其他记录在案的监控 KPI 设置警报和阈值,以便在出现问题时通知团队。
因此,监控的重点是根据预定义的指标和日志跟踪系统的状态和运行状况。
例如,当服务器的CPU使用率超过80%或API响应时间超过2秒时,监控工具会发出告警。
另一方面,可观察性更进一步。
它是关于通过查看其输出(如日志、指标和跟踪)来了解应用程序和系统的内部状态。这不仅要知道什么时候出错,还要了解为什么会出错。
可观测性的关键焦点是更具探索性和调查性,允许您就应用程序行为提出任意问题,并诊断您没有预料到的问题。
例如,当网站开始意外变慢时,您可以使用可观测性工具来分析数据模式、跟踪请求和查看日志,以确定最近的代码部署是否导致了内存泄漏,从而导致响应时间变慢。
简单地说,监控会告诉您系统出现故障,而可观测性可帮助您找出系统出现故障的原因。
现在我们已经对可观测性有了全面的了解,让我们看一下关键的可观测性概念。
以下是可观测性的三大支柱。
日志记录了应用程序中的事件。日志条目通常包含有关所发生事件的信息,包括时间戳、事件描述、严重性级别,有时还包括用户 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
开发人员负责登录代码。由于大多数软件库和语言都具有内置功能,因此日志易于实现。以下是不同类型日志格式的几个示例。
指标是以在一段时间间隔内测量的数字表示的数据。
例如,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
指标在可观测性方面发挥着关键作用。通过指标,您可以一目了然地了解系统状态和随时间的变化,并帮助您发现不同时间系统行为的趋势和模式。
“追踪”和“跨度”是主要用于分布式跟踪的术语。
分布式追踪是一种用于跟踪和监视通过分布式系统的请求流的方法,尤其是在微服务体系结构中。
让我们看一个使用微服务构建的电子商务应用程序示例。
当用户下订单时,请求会通过多个服务传输:它首先到达订单处理服务,然后与库存、付款和用户帐户服务进行通信。
分布式跟踪将跨所有这些服务跟踪此请求。
在这里,Trace 表示单个订单请求通过系统的整个旅程。每个跟踪都由多个跨度组成,其中每个 Span 表示跟踪中的特定操作或进程。
跨度可以是对微服务、数据库查询或任何其他离散工作单元的调用。
通过分析痕迹,开发人员可以识别瓶颈,了解不同组件对系统性能的影响,并解决问题。
像 Jaeger 或 Zipkin 这样的开源分布式跟踪工具可以将跨度序列显示为时间线,从而更容易理解请求的流和延迟。
可观测性平台通过将嵌入到应用程序和基础结构组件中的现有检测集成,并提供向这些组件添加检测的工具,持续识别和收集性能遥测数据。
大多数平台收集指标、跟踪和日志。然后,将它们实时连接起来,为 DevOps 团队、站点可靠性工程 (SRE) 团队和 IT 人员提供全面的上下文信息,包括每个事件的内容、位置和原因,这些事件可以指示、促成或用于解决应用程序性能问题。
借助可观测性,在高度分布式系统上工作的跨职能团队,尤其是在企业环境中,可以更快、更有效地对精确查询做出反应。
人们可以确定是什么降低了应用程序的性能,并在它影响整体性能或导致市中心之前努力修复它。
可观测性的好处不仅限于 IT 用例。当您收集和检查可观测性数据时,您可以了解数字服务对组织的影响。通过此访问权限,可以监视用户体验 SLO 的结果,检查软件版本是否满足业务目标,并根据最重要的内容确定业务选择的优先级。
根据 Observe State of Observability 报告,91% 的组织表示他们目前正在实践可观测性。然而,只有 11% 的组织认为他们的整个环境目前是可观察的
可观测性为最终用户、企业和 IT 团队提供了显著的优势。以下是显著的好处以及可观测性的重要性:
尽管可观测性一直很困难,但云的复杂性和变化的加速使得企业必须解决这一问题。当涉及微服务和容器化应用程序时,云系统会生成更高的遥测数据。此外,它们生成的遥测数据比团队过去必须破译的要全面得多。
关于可观测性,组织经常遇到以下困难:
在DevOps中,可观测性是必不可少的。它在DevOps过程中起着至关重要的作用,因为它允许团队
为了实现可观测性,您的系统和应用程序必须配备适当的设备来收集必要的遥测数据。您可以通过创建自己的工具、利用开源软件或购买营利性可观测性解决方案来创建可观测系统。
以下是有关如何开始使用 Observability 的几个步骤:
可观测性系统需要适合其预期平台。如果没有这一点,它可能会发展成一个繁琐的系统,推高运营成本,或者不起眼,几乎没有可见性。因此,计划还必须指定和命名组织设计必须实现的主要查询。
如果没有这个方向,可观测性就有可能变成一个由相互冲突的问题组成的混乱网络,可能无法提供预期的连贯一致的用户体验和支持。