通过检查系统输出来测量系统内部状态的能力称为可观察性。当可以仅使用输出信息(即传感器数据)来估计当前状态时,系统就变得“可观察”。您可以使用来自 Observability 的数据来识别和解决问题、优化性能并提高安全性。
在接下来的几节中,我们将仔细研究可观察性的三大支柱:指标、日志和跟踪。
可观察性和监控有什么区别?
“如果没有监控,可观察性就不可能实现。”
监控是与可观察性密切相关的另一个术语。监控和可观察性之间的主要区别在于,后者是指 深入了解系统内部运作的能力,而前者是指收集有关系统性能和行为的数据的行为。
除此之外,监控并没有真正考虑最终目标。它专注于预定义的指标和阈值来检测与预期行为的偏差。可观察性旨在提供对系统行为的深入理解,从而允许探索和发现意外问题。
在视角和思维方式方面,监控采用“自上而下”的方法,并根据已知标准预定义警报。可观察性采用“自下而上”的方法,鼓励开放式探索和适应不断变化的需求。
监控可检测异常情况并提醒您潜在的问题。然而,可观察性可以检测问题并帮助您了解其根本原因和潜在动态。
可观察性的三大支柱
可观察性建立在三大支柱(指标、日志、跟踪)之上,围绕“事件”的核心概念。事件是监控和遥测的基本单位,每个事件都带有时间戳且可量化。事件的区别在于它们的上下文,尤其是在用户交互中。例如,当用户在电子商务网站上单击“立即付款”时,此操作预计会在几秒钟内发生。
在监控工具中,“重大事件”是关键。它们触发:
- 自动警报:通知 SRE 或运营团队。
- 诊断工具:启用根本原因分析。
想象一下服务器的磁盘容量接近 99%;这很重要,但了解哪些应用程序和用户导致了这种情况对于采取有效行动至关重要。
1. 指标
指标作为数字指标,提供对系统健康状况的洞察。虽然 CPU、内存和磁盘使用率等一些指标是明显的系统运行状况指标,但许多其他关键指标可以揭示潜在问题。例如,操作系统句柄的逐渐增加可能会导致系统速度变慢,最终需要重新启动才能访问。现代 IT 基础设施的各个层面都存在类似的有价值的指标。
在确定要持续收集哪些指标以及如何有效分析它们时,仔细考虑至关重要。这就是领域专业知识发挥关键作用的地方。虽然大多数监控工具都可以检测明显的问题,但最好的监控工具可以更进一步,提供检测和警报复杂问题的见解。确定作为即将发生的系统问题的主动指标的指标子集也很重要。 例如,操作系统句柄泄漏很少突然发生。
跟踪使用中的句柄数量随着时间的推移逐渐增加,可以预测系统何时可能变得无响应,从而可以进行主动干预。
2. 日志
日志通常包含有关应用程序如何处理请求的复杂详细信息。这些日志中出现的异常情况(例如异常)可能表明应用程序中存在潜在问题。监视日志中的这些错误和异常是任何可观察性解决方案的一个重要方面。解析日志还可以揭示有关应用程序性能的宝贵见解。
日志通常包含在使用 API(应用程序编程接口)或查询应用程序数据库时可能难以捉摸的见解。许多独立软件供应商 (ISV)不提供访问日志中可用数据的替代方法。因此,有效的可观测性解决方案应该支持日志分析并促进日志数据的捕获及其与指标和跟踪数据的关联。
3. 跟踪
跟踪是一个相对较新的发展,特别适合当代应用程序的复杂性。它的工作原理是从应用程序的不同部分收集信息并将其组合在一起以显示请求如何在系统中移动。
跟踪的主要优点在于它能够解构端到端延迟并将其归因于特定层或组件。虽然它不能准确地告诉您出现问题的原因,但它对于找出要查找的位置非常有用。
集成跟踪过去很困难,但有了服务网格,现在变得毫不费力。服务网格在代理级别处理跟踪和统计数据收集,提供整个网格的无缝可观察性,而不需要其中的应用程序进行额外的检测。
上面讨论的每个组件都有其优点和缺点,尽管人们可能想全部使用它们。
可观察性工具
可观测性工具收集和分析与用户体验、基础设施和网络遥测相关的数据,以主动解决潜在问题,防止对关键业务关键绩效指标 (KPI) 产生任何负面影响。
一些流行的可观察性工具选项包括:
- Prometheus:领先的开源监控和警报工具包,以其可扩展性和对多维数据收集的支持而闻名。
- Grafana:一个可视化和仪表板平台,通常与 Prometheus 一起使用,提供对系统性能的丰富洞察。
- Jaeger:一个开源分布式跟踪系统,用于对基于微服务的架构进行监控和故障排除。
- Elasticsearch:一种搜索和分析引擎,与 Kibana 和 Beats 配合使用时,形成用于日志管理和分析的 ELK Stack。
- Honeycomb:一种事件驱动的可观察性工具,可提供对应用程序行为和性能的实时洞察。
- Datadog:一个基于云的可观察性平台,集成了日志、指标和跟踪,提供端到端可见性。
- New Relic:提供应用程序性能监控(APM)和基础设施监控解决方案来跟踪和优化应用程序性能。
- Sysdig:Sysdig 专注于容器监控和安全,提供对容器化应用程序的深入可见性。
- Zipkin:一种开源分布式跟踪系统,用于监控请求流并识别延迟瓶颈。
结论
日志、指标和跟踪是重要的可观察性支柱,它们共同提供分布式系统的完整视图。战略性地合并它们,例如在入口和出口点放置计数器和日志,以及在决策关口使用跟踪,可以实现有效的调试。将这些信号关联起来可以增强我们在分布式系统中导航指标、检查请求流和解决复杂问题的能力。