跳到主要内容

第 7 章 可观测性简介

概述和学习目标

本章讨论可观测性。我们研究可观察性的目标,通过提供洞察力来帮助团队在影响用户之前主动解决问题,从而提高系统的可靠性和性能。

在复杂软件系统的世界中,可观察性是能够看到此类系统的 “内部”,从而深入了解其运行状况,性能和行为。可观察性超越了简单的监控。这就像拥有x射线视觉,通过三个关键支柱提供多个视角: 指标 (像CPU使用率这样的数字指标),日志 (详细的事件记录),和跟踪 (映射请求如何流过系统)。结合这些观点,可以描绘出一幅清晰的图景。

通过利用与可观察性相关的工具和实践,团队可以快速识别异常,了解依赖关系,并根据实时数据做出明智的决策。这种方法在复杂的分布式系统中尤为重要,在这些系统中,了解不同组件之间的交互可能具有挑战性。可观察性有助于使系统更加透明和可维护,从而增强整体系统弹性和用户满意度。

在本章结束时,您应该能够:

  • 定义可观察性
  • 解释日志、度量和跟踪如何形成可观察性的支柱
  • 探索可观察性如何帮助主动识别和修复问题并提高系统可靠性

什么是可观察性?

可观察性是根据系统的外部输出来理解系统内部状态的能力。这意味着能够根据其产生的信息 (例如日志,度量和跟踪) 来推断系统内部正在发生的事情。

在现代软件开发世界中,可观察性变得越来越重要,在该世界中,系统变得越来越复杂和分布式。使用传统的监控方法,可能很难理解系统内部发生了什么,以及为什么它以某种方式表现出来。可观察性提供了一种克服这一挑战的方法,让我们对系统有了更全面的看法。

可观测性的三大支柱

可观察性的三大支柱构成了全面评估IT基础架构的健康和效率的关键框架,尤其是在基于云的和微服务的生态系统中。通过共同检查这些支柱,您可以对系统的操作,可靠性进行复杂的了解,从而实现有效的问题诊断和性能增强。这确保了用户可靠和简化的体验。

日志

日志是系统内发生的事件的数字记录。这些记录是顺序的和带有时间戳的,提供了详细的,带有时间戳的活动审计跟踪。日志可以包括广泛的数据,从用户访问的简单记录到软件开发人员用来调试问题的详细错误消息。在可观察性的背景下,日志提供了叙述性细节,以补充来自度量的定量数据和来自跟踪的流信息。它们使开发人员和运营团队能够深入研究问题的根本原因,了解随着时间推移的系统行为,并保持卓越的运营。

日志在可观察性策略中起着关键作用,它提供了对导致问题的确切事件顺序的见解,使其对于事件响应和系统优化必不可少。

日志可以分为几种类型,每种类型都服务于组织内的特定目的:

  • 应用程序日志记录在应用程序层内发生的事件,例如用户操作、系统错误或事务。这些日志对于理解应用程序在实际场景中的行为以及识别应用程序级别的问题至关重要。
  • 系统记录操作系统级别的文档事件,包括系统调用、计划任务和来自内核的消息。这些日志有助于诊断与应用程序不直接相关但会影响其性能的硬件和软件问题。
  • 审计日志关注与安全相关的事件,跟踪用户活动和对系统配置的更改。它们对于合规性,安全监视和取证分析至关重要。

指标

在这三大支柱中,指标是定量的心跳,为系统行为提供了可衡量的见解。可观察性中的度量定义为表示给定时间点系统特征的数值。这些范围可以从简单的测量 (如CPU利用率和内存使用率) 到更复杂的聚合 (如请求率、错误计数或事务持续时间)。与提供详细的事件驱动记录或跟踪的日志不同,这些日志映射了通过系统的请求旅程,度量标准提供了系统行为和性能的高级汇总视图。这些可量化的数据对于设置基准、识别趋势以及在超过预定义阈值时触发警报至关重要。

指标可以分为几种类型,每种类型都服务于组织内的特定目的:

  • 系统指标提供了对基础架构的运行状况和性能的洞察,例如CPU负载、内存消耗、磁盘I/O和网络带宽。
  • 应用指标集中在软件层,跟踪应用性能,包括请求延迟、吞吐量、错误率和交易量。
  • 业务指标 (如每日活跃用户、转化率和收入指标) 虽然与系统或应用程序运行状况没有直接关系,但提供了系统性能对业务结果的影响的视图。

了解和监视这些不同类型的度量标准使组织能够对其系统的运行状况,性能以及其运营策略的有效性保持整体视图。度量的收集和分析是可观察性的关键过程。收集涉及从系统的各个部分收集度量数据,这可以通过应用程序内的仪表或利用外部监视工具来促进。收集后,将数据汇总并进行分析,以识别模式,趋势和异常情况。

有效的分析需要使用专门用于时间序列数据处理,可视化和警报的工具和平台。最佳实践包括为警报设置实际的阈值级别,采用异常检测算法以及关联来自不同来源的度量,以全面了解系统行为。

痕迹

痕迹是可观察性的另一个支柱,它充当引导光,照亮系统内用户交互所采取的复杂路径。它们代表跨分布式系统的单个请求或事务的旅程,捕获它所采用的路径并测量其跨各种服务的延迟。通过拥抱它们的力量并战略性地实施它们,您可以更深入地了解系统行为,有效地确定问题并优化无缝的用户体验。请记住,真正可观察性的旅程需要结合指标的定量能力,日志的详细叙述以及痕迹的视觉表示,提供系统内部工作的完整图片,并使您能够构建和管理真正可靠和高效的软件体验。

跟踪通常由几个关键组件组成:

  • 跨度表示跟踪中的单个操作或组件交互,通常包括开始和结束时间,从而允许测量延迟。
  • 跟踪上下文跨流程,网络和服务边界承载跟踪的标识,从而确保正确关联属于单个跟踪的所有跨度。
  • 注释和元数据是附加到span的附加信息,例如用户id,错误消息或其他上下文数据,从而通过有助于分析和调试的详细信息丰富了跟踪。

跟踪可分为几种类型,每种类型可满足不同的监视和诊断需求:

  • 分布式跟踪通过微服务或分布式体系结构跟踪请求的旅程,突出显示服务之间的交互和延迟。
  • 真实用户监控 (RUM) 捕获了与系统的实际用户交互的痕迹,从而提供了对用户体验和性能问题的见解。
  • 合成监视使用模拟请求以受控的方式监视系统性能和可用性,以一致的基线测量来补充真实的用户数据。

通过收集和分析这三种类型的数据,我们可以深入了解系统的工作方式,并识别可能发生的任何问题。

为什么需要可观察性?

可观察性是一个至关重要的DevOps概念,在确保软件应用程序和服务的可靠性、性能和整体成功方面发挥着关键作用。它超越了传统的监控,提供了对系统健康和行为的全面、实时的洞察。以下是DevOps中需要可观察性的几个关键原因。

  • 现代系统的复杂性随着微服务架构、云计算和分布式系统的兴起,应用变得更加复杂。可观察性对于理解和管理这种复杂性至关重要。
  • 更快的事件解决方案可观察性工具可以更快地检测和解决问题。团队可以识别问题,了解其根本原因,并更快地实施解决方案,从而减少停机时间。
  • 改善用户体验通过主动监视和分析系统行为,团队可以通过在用户受到影响之前识别和解决性能问题来增强整体用户体验。
  • 改进的故障排除可观察性可以帮助您快速有效地识别和诊断问题。通过分析日志、度量和跟踪,您可以查明问题的根本原因并采取纠正措施。
  • 增强性能可观察性可以通过识别瓶颈和资源约束来帮助您优化系统的性能。
  • 降低成本通过主动识别和解决问题,可观察性可以帮助您降低停机成本和生产力损失。

可观察性堆栈的组件

可观察性堆栈是工具和技术的集合,这些工具和技术可以协同工作,以提供有关软件系统的运行状况,性能和行为的见解。这些见解可帮助您快速识别和解决问题,优化性能并确保流畅的用户体验。集成良好的可观察性堆栈对于在当今复杂的数字环境中维护高性能和可靠的系统至关重要。它为团队提供了做出明智决策和保持最佳运营效率所需的洞察力。

数据收集

  • 仪器仪表这涉及向应用程序和基础结构添加代码以收集遥测数据,包括指标、日志和跟踪。流行的技术包括OpenTelemetry,Prometheus和ELK Stack (Elasticsearch,Logstash,Kibana)。
  • 代理这些是在您的系统上运行的轻量级程序,并从各种来源 (如应用程序、容器和操作系统) 收集数据。一些流行的代理包括Datadog代理,Fluentd和Telegraf。

数据存储和管理

  • 公制商店这些数据库存储和管理时间序列度量数据,使您可以跟踪和分析历史趋势。热门选择包括普罗米修斯、InfluxDB和TimescaleDB。
  • 日志聚合器这些系统收集、集中和存储来自各种来源的日志数据。流行的选择包括Elasticsearch、Logstash和Graylog。
  • 跟踪存储由于其高容量和复杂的结构,跟踪需要专门的存储解决方案。流行的选项包括Jaeger,Zipkin和Honeycomb。

数据分析和可视化

  • 仪表板和图表这些工具可帮助您以易于理解和分析的方式可视化数据。流行的选项包括Grafana、Kibana和Datadog仪表板。
  • 警报和通知这些系统通过在违反预定义阈值时发送警报来帮助您随时了解关键事件和事件。流行的选择包括Prometheus Alertmanager,PagerDuty和Slack集成。
  • 分析和故障排除工具这些工具可帮助您深入分析数据,以找出问题的根本原因并找到解决方案。流行的选择包括蜂窝,Datadog APM和New Relic APM。

附加组件

  • 服务网格该技术提供了其他可观察性功能,例如分布式跟踪和流量管理。受欢迎的服务网格包括Istio和Linkerd。
  • 混沌工程这种做法涉及有意地将故障注入您的系统,以查看其反应方式,帮助您识别并减轻潜在的弱点。流行的工具包括混沌猴子和Gremlin。

选择正确的组件

您的可观察性堆栈中需要的特定组件将取决于您的特定需求和要求。考虑一些因素,例如系统的规模和复杂性,预算以及团队的技能。

建立可观察性堆栈

有几种方法来构建你的可观察性堆栈:

  • 开源解决方案您可以结合各种开源工具来构建自己的堆栈。这种方法提供了灵活性和成本效益,但需要更多的努力和专业知识。
  • 托管服务云提供商和其他供应商提供的托管可观察性解决方案易于设置和使用,但价格可能更高。
  • 混合方法您可以将开源工具与托管服务相结合,以获得满足您特定需求和预算的量身定制的解决方案。有效的可观察性堆栈对于现代软件开发至关重要。

通过选择正确的组件并采用数据驱动的方法,您可以获得对系统的宝贵见解,提高其性能和可靠性,并提供更好的用户体验。工具示例:

  • 监控工具: 用于收集和聚合数据的系统,例如Prometheus,Grafana或Datadog。
  • 日志记录系统: ELK Stack (Elasticsearch,Logstash,Kibana) 或Splunk等平台,用于收集和分析日志。
  • 跟踪系统: 分布式跟踪工具,如Jaeger、Zipkin或OpenTelemetry,用于跟踪请求在分布式系统中移动时的请求。

DevOps和SRE中的可观察性

可观察性是DevOps (开发和运营) 和SRE (站点可靠性工程) 实践的关键方面,因为它在确保可靠性,性能,以及现代复杂系统的高效运行。以下是可观察性如何集成到DevOps和SRE中。

DevOps中的可观察性:

连续监控:

  • 目的: DevOps强调持续集成、持续交付 (CI/CD) 和持续监控。可观察性已集成到监视阶段,以提供对应用程序运行状况和性能的实时见解。
  • 角色: DevOps团队使用可观察性工具来监视应用程序指标、日志和跟踪,使他们能够快速检测和解决问题。

反馈循环:

  • 目标: DevOps实践涉及缩短反馈循环以促进快速迭代和改进。可观察性通过提供对更改对系统影响的可操作见解来促进这些反馈循环。
  • 角色: 开发人员会收到有关代码更改如何影响系统行为的反馈,帮助他们做出明智的决策和改进。

跨团队协作:

  • 目标: DevOps鼓励开发、运营和其他利益相关者之间的合作。可观察性工具为不同的团队提供了共同的语言和平台,以分享见解并共同解决问题。
  • 角色: 可观察性促进了一种共同责任的文化,开发人员和运营团队在识别和解决问题上进行协作。

基础设施as代码 (IaC):

  • 目标: DevOps促进使用基础架构作为一致和自动化基础架构管理的代码。可观察性已集成到IaC中,以监视和分析基础架构更改的影响。
  • 作用: 可观察性有助于评估基础架构更改的性能和可靠性,确保它们满足运营要求。

现场可靠性工程 (SRE) 中的可观测性

在DevOps和SRE实践中,可观察性不仅仅是监控; 它是关于理解整个系统的行为,从应用程序代码到基础架构,并利用这种理解来确保可靠性、效率、和持续改进。可观察性实践与这些方法的原则紧密一致,支持协作,自动化,并专注于向最终用户提供可靠的服务。

理解服务水平协议 (SLA) 、服务水平目标 (SLO) 和服务水平指标 (SLI) 在云原生技术和可观察性领域至关重要。这些概念对于确保服务达到其性能和可靠性目标至关重要,这对于保持用户满意度和卓越运营至关重要。这些概念不是孤立的元素,而是一个协作框架。通过有效利用sla、slo、sli和可观察性,您可以确保您的软件系统兑现承诺,保持用户信任,并在竞争环境中蓬勃发展。我们将在下一章讨论sla、SLIs和slo。

可观察性方面的挑战

可观察性是管理复杂系统的关键方面,但它也面临着一系列挑战。以下是可观察性方面的一些常见挑战:

1.数据量和开销:

  • 挑战: 现代系统生成大量数据,包括日志、度量和跟踪。管理和分析这些数据量可能是压倒性的,导致存储、处理和相关成本方面的挑战。
  • 解决方案: 实施智能数据采样和聚合技术可以帮助减少数据量,而不会牺牲基本的洞察力。

2.集成复杂度:

  • 挑战: 将各种可观察性工具和平台集成到一个系统中可能会很复杂。不同的工具可能使用不同的格式和标准,从而导致集成挑战。
  • 解决方案: 采用标准格式 (例如用于跟踪的OpenTelemetry),并使用可观察性平台,这些平台易于与通用监视和日志记录工具集成,可以简化流程。

3.缺乏标准化:

  • 挑战: 整个可观察性领域缺乏标准化的实践和格式,这使得实施一致的方法具有挑战性。不同的工具可能会对度量、日志和跟踪使用不同的约定。
  • 解决方案: 诸如OpenTelemetry之类的全行业计划正在努力使可观察性实践标准化。采用这些标准可以提高工具之间的互操作性。

4.复杂的分布式系统:

  • 挑战: 在微服务体系结构和分布式系统中,理解不同组件之间的关系和依赖关系可能会很复杂。跨各种服务和组件跟踪请求可能具有挑战性。
  • 解决方案: 实现分布式跟踪工具和实践,结合定义良好的服务网格,可以帮助可视化和理解通过系统的请求流。

5.安全和隐私问题:

  • 挑战: 收集和存储可观察性数据可能会引起安全性和隐私问题,尤其是在处理敏感信息时。平衡对可见性的需求和数据保护要求至关重要。
  • 解决方案: 实施适当的访问控制、加密和敏感数据的匿名化可以帮助解决安全和隐私问题。

6.警惕疲劳:

  • 挑战: 过多的误报或不相关的警报会导致警报疲劳,操作员不堪重负,可能会开始忽略警报。
  • 解决方案: 微调警报阈值,实施智能警报策略,使用异常检测技术可以帮助减少警报疲劳。

7.工具扩散:

  • 挑战: 可观察性景观有许多工具,每个工具都专门用于特定目的。采用太多的工具会导致工具蔓延,使其管理和维护具有挑战性。
  • 解决方案: 根据特定的用例仔细评估和选择可观察性工具。目标是提供全面覆盖而没有不必要重复的工具。

8.文化阻力:

  • 挑战: 由于缺乏理解、文化障碍或对变化的担忧,一些团队或组织可能面临采用可观察性做法的阻力。
  • 解决方案: 培养协作文化并强调可观察性在更快的问题解决,提高系统可靠性和更好的用户体验方面的好处,可以帮助克服阻力。

应对这些挑战需要技术、流程改进和文化转变的结合。持续学习,了解行业最佳实践以及采用标准化方法可以为更有效的可观察性策略做出贡献。

流行的可观察性工具

让我们来看看一些流行的可观察性工具。

1.监控和度量:

  • Prometheus: 专为可靠性和可扩展性而设计的开源监视和警报工具包。它从配置的目标收集度量,存储它们,并使它们可用于查询。
  • Grafana: 一个流行的开源平台,用于可视化和分析指标。Grafana集成了各种数据源,包括Prometheus,InfluxDB和Elasticsearch。
  • InfluxDB: 高性能、分布式、可扩展的时序数据库。它通常用于存储和查询指标数据。
  • Datadog: 基于云的可观察性平台,集成了监控、日志记录和APM (Application Performance monitoring) 功能。它支持广泛的集成。

2.日志记录:

  • ELK Stack (Elasticsearch,Logstash,Kibana): Elasticsearch是一个分布式搜索和分析引擎,Logstash是一个日志管道工具,Kibana是一个可视化平台。它们共同构成了一个强大的日志管理堆栈。
  • Splunk: 一个广泛使用的平台,用于搜索、监视和分析机器生成的数据,包括日志。它提供了强大的搜索和可视化功能。

3.追踪:

  • Jaeger: 一个开源的端到端分布式跟踪系统。它有助于监视和排除复杂的基于微服务的体系结构中的请求延迟。
  • Zipkin: 另一个开源的分布式跟踪系统。Zipkin允许用户在分布式系统中的各种服务中跟踪请求。

应用性能监控 (APM):

  • New Relic: 一种基于云的APM工具,可提供对应用程序性能的详细见解。它提供了事务跟踪,错误跟踪和基础架构监视等功能。
  • AppDynamics: 全面的APM解决方案,可实时监控应用程序,用户体验和基础架构。它有助于识别性能瓶颈。

基础设施监控:

  • Nagios: 一种广泛使用的开源基础设施监控解决方案。Nagios可以监视主机,服务和网络设备,并在出现问题时提供警报。
  • Zabbix: 一种开源监控解决方案,提供用于监控服务器、网络、应用程序和服务的功能。它支持一系列数据可视化选项。

云原生可观察性:

  • AWS CloudWatch: 亚马逊针对AWS资源的监控和可观察性服务。它为AWS服务和应用程序提供度量、日志和跟踪。
  • Azure Monitor: Microsoft Azure的可观察性服务,提供有关Azure平台上应用程序和基础架构的性能和运行状况的见解。

这些工具迎合了可观察性的不同方面,组织经常使用它们的组合来全面了解其系统。在选择可观察性工具时,必须考虑组织的特定需求、集成能力、易用性和可扩展性等因素。此外,建议检查这些工具的最新更新和社区支持。

实验室7。设置Prometheus和Grafana

asset-v1-LinuxFoundationX+LFS162x+1T2024+type@asset+block@Chapter_7_Lab_-_Prometheus_and_Grafana.pdf

第7章总结

本章讨论了可观察性,这是云原生技术中的一个基本概念,对于DevOps和站点可靠性工程实践至关重要。我们将可观察性定义为从系统的外部输出推断系统内部状态的能力,强调其在依赖于微服务和分布式系统的现代复杂软件体系结构中的重要性。在确保系统性能,可靠性和客户满意度的背景下讨论了可观察性的必要性。本章概述了可观察性堆栈的关键组件-指标,日志和跟踪-它们共同提供了系统运行状况的整体视图,并且对于有效的监视和故障排除至关重要。

此外,本章探讨了可观察性与DevOps和SRE的集成,重点介绍了它如何支持持续改进,培养共同责任的文化,并通过可操作的见解帮助实现服务水平目标。它解决了与实现可观察性相关的挑战,例如数据复杂性和对熟练解释的需求,并概述了可观察性领域中的流行工具。