一文读懂什么是系统可观测性

这里填写标题

  • 1. 一文读懂什么是系统可观测性
    • 1.1. 监控和可观测性有什么区别?
    • 1.2. 为什么可观测性很重要?
    • 1.3. 什么是容器和微服务中的可观测性?
    • 1.4. 可观测性中使用的主要数据类是什么? 他们是如何使用的?
    • 1.5. 如何实现可观测性?
    • 1.6. 良好的可观测性工具的标准是什么?
    • 1.7. DeOps 中的观测性有哪些好处?
    • 1.8. 可观测性在软件工程中有什么好处?
    • 1.9. 谁从可观测性中受益?
    • 1.10. 结语: 深⼊了解您的基础架构

1. 一文读懂什么是系统可观测性

什么是可观测性?
可观测性是通过检查其输出来衡量系统内部状态的能⼒。如果仅使⽤来⾃输出的信息(即传感器数据)可以估计当前状态, 则系统被认为是"可观测的"。虽然它似乎是最近的流⾏词, 但该术语起源于⼏⼗年前的控制理论(它是关于描述和理解⾃我调节系统的)。然⽽, 它越来越多地应⽤于提⾼分布式 IT 系统的性能。在这种情况下, 可观测性使⽤三种类型的遥测数据⸺指标、⽇志和跟踪⸺来提供对分布式系统的深⼊可⻅性, 并允许团队找到⼤量问题的根本原因并提⾼系统性能。

在过去⼏年中, 企业以微服务、⽆服务器和容器技术的形式迅速采⽤了云原⽣基础设施服务, 例如 AWS。在这些分布式系统中追踪事件的起源需要在云上、本地或两者上运⾏的数千个进程。但是传统的监控技术和⼯具很难跟踪这些分布式架构中的许多通信路径和相互依赖关系。

可观测性使团队能够更有效地监控现代系统, 并帮助他们找到并连接复杂链中的影响, 并将其追溯到原因。此外, 它还使系统管理员、IT 运营分析师和开发⼈员能够了解他们的整个架构。

在本文中我们将仔细研究可观测性:

  • 它是什么
  • 实施需要什么
  • 您可以期望您的组织从中获得什么好处。

1.1. 监控和可观测性有什么区别?

监控和可观测性是相互依赖的不同概念。

  • 监控: 是您为提高系统的可观测性而执行的操作
  • 可观测性: 是该系统的一个属性, 如功能性或可测试性

具体⽽⾔, 监控是随着时间的推移观察系统性能的⾏为。监控⼯具收集和分析系统数据, 并将其转化为可操作的⻅解。从根本上说, 应⽤程序性能监控 (APM) 等监控技术可以告诉您系统是启动还是关闭, 或者应⽤程序性能是否存在问题。监控数据聚合和关联还可以帮助您对系统做出更⼤的推断。例如, 加载时间可以告诉开发⼈员有关⽹站或应⽤程序⽤户体验的⼀些信息。

另⼀⽅⾯, 可观测性是衡量系统内部状态可以从其外部输出的知识推断出来的程度的度量。它使⽤监控产⽣的数据和⻅解来全⾯了解您的系统, 包括其运⾏状况和性能。因此, 系统的可观测性部分取决于您的监控指标对系统性能指标的解释程度。

另⼀个重要的区别是, 监控要求您提前了解需要监控的重要事项。可观测性让您可以通过观察系统随时间推移的表现并询问相关问题来确定什么是重要的。

1.2. 为什么可观测性很重要?

可观测性很重要, 因为它可以让您更好地控制复杂系统。简单系统的活动部件较少, 因此更易于管理。监控 CPU、内存、数据库和⽹络状况通常⾜以了解这些系统并对问题应⽤适当的修复。

分布式系统的互连部件数量要多得多, 因此可能发⽣的故障数量和类型也更⾼。此外, 分布式系统会不断更新, 每次更改都可能导致新类型的故障。在分布式环境中, 理解当前问题是⼀个巨⼤的挑战, 主要是因为它⽐简单的系统产⽣更多的"未知未知"。由于监控需要"已知的未知数", 因此通常⽆法充分解决这些复杂环境中的问题。

可观测性更适合分布式系统的不可预测性, 主要是因为它允许您在出现问题时询问有关系统⾏为的问题。"为什么 X 坏了? " 或者"现在是什么导致了延迟? " 是可观测性可以回答的⼀些问题。

1.3. 什么是容器和微服务中的可观测性?

容器和微服务中的可观测性暴露了⽣产中应⽤程序的状态, 因此开发⼈员可以更好地识别和解决性能问题。

容器服务(例如 Docker、Kubernetes 等)和微服务解决了停机时间增加的⻛险以及与单体软件相关的其他问题, 其中对单个代码库的任何更改都会影响整个应⽤程序及其依赖项。容器和微服务将应⽤程序分解为独⽴的服务, 允许开发⼈员修改和重新部署特定服务⽽不是整个应⽤程序。

然⽽, 基于容器的架构带来了新的挑战。相互依赖的微服务通常分散在多个主机上, 随着基础设施的扩展, ⽣产中微服务的数量也在增加。这使得开发⼈员很难知道当前在⽣产中运⾏的内容, 从⽽导致更⻓的交付周期、停机时间和其他问题。

可观测性解决了这些挑战, 提供了分布式系统的可⻅性, 帮助开发⼈员更好地了解应⽤程序的性能和可⽤性。在发⽣故障时, 它提供了快速查明和调试或修复问题所需的控制。

1.4. 可观测性中使用的主要数据类是什么? 他们是如何使用的?

可观测性中使用的主要数据类是:

  • 日志
  • 指标
  • 跟踪

它们通常被称为"可观测性的三⼤⽀柱"。

1.日志

⽇志是在特定时间发⽣的事件的⽂本记录, 包括说明事件发⽣时间的时间戳和提供上下⽂的有效负载。⽇志有三种格式: 纯⽂本、结构化和⼆进制。纯⽂本是最常⻅的, 但结构化⽇志⸺包括额外的数据和元数据并且更容易查询⸺正变得越来越流⾏。当系统出现问题时, ⽇志通常也是您⾸先查看的地⽅。

2.指标

指标是在⼀段时间内测量的数值, 包括特定属性, 例如时间戳、名称、KPI 和值。与⽇志不同, 指标在默认情况下是结构化的, 这使得查询和优化存储变得更加容易, 让您能够将它们保留更⻓时间。

3.跟踪

跟踪表示请求通过分布式系统的端到端旅程。当请求通过主机系统时, 对其执⾏的每个操作(称为"跨度")都使⽤与执⾏该操作的微服务相关的重要数据进⾏编码。通过查看跟踪, 每个跟踪都包含⼀个或多个跨度, 您可以通过分布式系统跟踪其进程并确定瓶颈或故障的原因。

使⽤这些数据类并不能保证可观测性, 尤其是当您彼此独⽴地使⽤它们或为每个函数使⽤不同的⼯具时。相反, 您将通过在单个解决⽅案中集成您的⽇志、指标和跟踪来实现可观测性的成功⽅法。当您这样做时, 您不仅可以了解问题何时发⽣, 还可以⽴即将注意⼒转移到了解这些问题发⽣的原因上。

1.5. 如何实现可观测性?

为了实现可观测性, 您需要对系统和应⽤程序进⾏适当的⼯具来收集适当的遥测数据。您可以通过构建⾃⼰的⼯具、使⽤开源软件或购买商业可观测性解决⽅案来制作可观测系统。

通常, 实现可观测性涉及四个组件:

  • 仪表: 这些是测量⼯具, 可从容器、服务、应⽤程序、主机和系统的任何其他组件收集遥测数据, 从⽽实现整个基础架构的可⻅性。
  • 数据关联: 处理和关联从整个系统收集的遥测数据, 从⽽创建上下⽂并为时间序列可视化启⽤⾃动化或⾃定义数据管理。
  • 事件响应: 这些⾃动化技术旨在根据随叫随到的时间表和技术技能将有关停电的数据提供给合适的⼈员和团队。
  • AIOps: 机器学习模型⽤于⾃动聚合、关联事件数据并确定其优先级, 使您能够过滤掉警报噪⾳, 检测可能影响系统的问题并在发⽣事件时加速事件响应。

1.6. 良好的可观测性工具的标准是什么?

⽆论您选择构建⾃⼰的解决⽅案还是使⽤开源或商业解决⽅案, 所有可观测性⼯具都应该:

  • 与当前⼯具集成: 如果您的可观测性⼯具不适⽤于您当前的堆栈, 您的可观测性⼯作将失败。确保它们⽀持您环境、容器平台、消息传递平台和任何其他关键软件中的框架和语⾔。
  • 对⽤户友好: 如果您的可观测性⼯具难以学习或使⽤, 它们将不会被添加到⼯作流程中 - 阻⽌您的可观测性计划开始实施。
  • 提供实时数据: 您的可观测性⼯具应通过仪表板、报告和查询实时提供相关⻅解, 以便团队能够了解问题、其影响以及解决⽅法。
  • 支持现代事件处理技术: 有效的可观测性⼯具应该能够从您的堆栈、技术和操作环境中收集所有相关信息; 将有价值的信号从噪⾳中分离出来, 并添加⾜够的上下⽂, 以便团队可以解决它。
  • 可视化聚合数据: 可观测性⼯具应该以易于理解的格式呈现洞察⼒, 例如仪表板、交互式摘要和⽤户可以快速理解的其他可视化。
  • 提供上下⽂: 当事件发⽣时, 您的⼯具应提供⾜够的上下⽂, 让您了解系统性能如何随时间变化、变化与系统中的其他变化有何关联、问题的范围以及受影响服务的任何相互依赖关系或组件。如果没有可观测性可以提供的上下⽂, 事件响应就会瘫痪。
  • 使用机器学习: 您的⼯具应该包括⾃动化数据处理和管理的机器学习模型, 以便您可以更快地检测和响应异常和其他安全事件。
  • 提供业务价值: 确保您根据对您的业务很重要的指标来评估您的可观测性⼯具, 例如部署速度、系统稳定性和客户体验。

1.7. DeOps 中的观测性有哪些好处?

可观测性允许 DevOps 开发⼈员在任何给定时间了解应⽤程序的内部状态, 并可以访问有关分布式⽣产环境中系统故障的更准确信息。⼀些主要好处包括:

1.更好的可⻅性

庞⼤的分布式系统通常使开发⼈员难以了解⽣产中的服务、应
⽤程序性能是否强⼤、谁拥有某个服务或系统在最近⼀次部署之前的样⼦。可观测性使他们能够实时了解⽣产系统, 从⽽有助于消除这些障碍。

2.更好的警报
可观测性帮助开发⼈员更快地发现和修复问题, 提供更深⼊的可
⻅性, 使他们能够快速确定系统中发⽣了什么变化, 调试或修复问题, 并确定这些变化导致了什么问题(如果有的话)。

3.更好的工作流程

可观测性允许开发⼈员查看请求的端到端旅程, 以及有关特定问题的相关上下⽂数据, 从⽽简化应⽤程序的调查和调试过程, 优化其性能。

4.减少会议时间

从历史上看, 开发⼈员必须通过第三⽅公司和应⽤程序跟踪信息, 以找出谁负责特定服务或在最近部署前⼏天或⼏周内系统的样⼦。通过有效的可观测性, 这些信息很容易获得。

5.加快开发⼈员速度

可观测性使监控和故障排除更加⾼效, 消除了开发⼈员的主要摩擦点。结果是提⾼了交付速度, 让 DevOps 员⼯有更多时间提出创新想法来满⾜业务及其客户的需求。

1.8. 可观测性在软件工程中有什么好处?

与 DevOps ⼀样, 可观测性通过提供对整个基础架构的洞察使软件⼯程师受益, 使他们能够看到它如何因问题、部署新软件或扩展或缩减⽽发⽣变化。

1.9. 谁从可观测性中受益?

个⼈开发⼈员和软件⼯程师从可观测性中受益, 因为它提供了对整个架构的可⻅性, 从第三⽅应⽤程序和服务到他们⾃⼰的。这不仅使他们能够更轻松地修复并最终预防问题, 还促进对系统性能及其如何塑造更好的客户体验的更深⼊了解。开发⼈员和⼯程师都有更多的时间来制定有利于业务的战略计划。

团队也受益, 因为可观测性提供了环境的共享视图, 随着时间的推移提供了对其架构、健康和性能的更全⾯的了解。可观测性允许开发⼈员、操作员、⼯程师、分析师、项⽬经理和其他团队成员访问有关服务、客户和其他系统元素的相同⻅解。此外, 可观测性可以创建更准确的事件后审查, 因为所有各⽅都可以检查实时系统⾏为的书⾯记录, ⽽不是将事件从孤⽴的单个来源拼凑起来。数据⸺⽽不是意⻅⸺将帮助您的团队了解事件发⽣的原因, 以便他们能够 更好地预防和处理未来的事件。

然⽽, 企业可能受益最⼤。可观测性让您可以在不影响系统稳定性的情况下更改应⽤程序和服务, 为您提供⼯具来了解哪些⼯作有效, 哪些⽆效, 查明出现的任何问题并快速改进或解决这些问题。新功能与更少的停机时间相结合, 转化为更快乐的客户和更强⼤的底线。

1.10. 结语: 深⼊了解您的基础架构

可观测性不仅仅是⼀个流⾏语⸺它是了解整个基础设施状态的⼀种重要且有⽤的⽅法。云、容器化、微服务和其他技术使系统⽐以往任何时候都更加复 杂。虽然这些⼯具的最终结果是积极的, 但在这些系统内⼯作、故障排除和管理却充满了困难。更多的交互部分会导致更多种类的问题, 当它们发⽣时, 更难检测和修复。

幸运的是, 这些分布式系统会产⽣⼤量遥测数据, 如果您可以利⽤这些数据, 可以更清楚地了解它们的性能。有效的可观测性⼯具提供您捕获系统输出并将其上下⽂化并提供在现代分布式系统世界中蓬勃发展所需的洞察⼒所需的所有⼯具和分析能⼒。

你可能感兴趣的:(datakit,运维,可观测性,observability,datakit,监控)