在当今世界,了解系统性能和健康状况比以往任何时候都更加重要。现代应用程序依赖于复杂的微服务架构和云原生技术,如 Kubernetes。可观察性不仅可以帮助我们了解应用程序的行为,还可以帮助我们了解实时发生的基础设施配置更改和依赖关系。
什么是云原生可观察性?
云原生可观察性是一种基于系统元素暴露的外部数据(如容器、微服务、Kubernetes 和无服务器功能)了解系统运行状况和状态的能力。云原生可观察性建立在三个假设之上:监控、日志记录和可追溯性。通过了解这些假设及其含义,您可以开始理解为什么可观察性在现代 DevOps 实践中至关重要。
图 1:可观察性的三大支柱
监控或指标衡量应用程序及其基础设施的运行状况和性能——这些是可量化的衡量标准。指标提供资源状态的实时警报,对于收集有关应用程序响应速度和/或检测性能问题早期指标的洞察力至关重要。
可观察性的另一个支柱是日志记录。日志记录捕获详细的错误消息以及堆栈跟踪。日志是系统内部发生的事件、警告和故障的记录。它们是一个很好的可见性来源,因为它们包含事件发生的时间以及与事件关联的谁或哪个端点等信息。
通过结合日志和跟踪,您可以获得系统可用性的完整上下文。跟踪通过收集穿过该系统所有层和节点的应用程序请求的整个过程的数据,有助于调查容器化或基于微服务的生态系统中的问题或性能瓶颈。
为什么可观察性很重要?
可观察性对于开发人员和 DevOps 工程师来说非常重要,因为它提供了跟踪整个系统的性能和健康状况、快速解决和诊断问题以及就解决问题所需的后续步骤做出明智决策所需的必要信息。
云原生环境(例如 Kubernetes)中的可观察性有助于了解集群内发生的情况,因此您可以在不影响性能的情况下优化计算能力。可观察性帮助的另一个很好的用例是云成本管理。为避免不必要的计算成本,您需要监控集群并了解应用程序的资源使用情况和需求。
使用良好的监控和可观察性工具可以快速检测到安全问题和漏洞。
可观测性和监测的共同挑战
Kubernetes 是流行的开源容器运行时引擎之一,因为它具有多功能性、可靠性以及在云提供商之间提供抽象的能力。但是,对于需要多种监控工具和解决方案的团队来说,监控 Kubernetes 可能是一项非常具有挑战性的任务。
大量组件和指标
使用 Kubernetes 会带来一系列挑战;它比传统基础设施拥有更多的组件,如集群、节点、Pod、命名空间、服务等。这些组件产生自己的指标,如果您不知道如何理解它们,这可能非常有用,但也会让人不知所措。
微服务的复杂性
现代应用程序可以包含大量微服务,Kubernetes 需要通过跟踪所有微服务来处理它们的可用性和可扩展性。每个服务都可以分布在多个实例中,从而迫使容器根据需要在您的基础架构中移动。此外,微服务之间需要保持不断的通信,这也是在 Kubernetes 集群内部完成的。
动态容器
根据组织的不同,容器的生命周期可能很短(从 10 秒到 5 分钟)。这会产生一种被称为“pod churn”的东西——新容器和 Pod 被创建、使用、销毁和重新创建的生命周期。
Kubernetes 管理这些元素,以确保随时都有可用资源,并在需要的地方分配它们。
图 2:Kubernetes 基础架构的层级
每次新部署时,Kubernetes 都会根据需要决定移动、重新创建或销毁 Pod。如果应用程序需要缩减规模,Pod 或节点可能会永远消失。这意味着一旦容器死亡,里面的所有信息都消失了。
Kubernetes 可观察性的进步
现在 Kubernetes 比以往任何时候都更受欢迎,可观察性工具也变得更加复杂。Kubernetes 可观察性的一些关键进步包括实时监控、性能分析和应用程序可见性。
可观察性工具的出现
在传统的开发生命周期中,监控和可观察性并不是整个过程的一部分。但是,现在随着云原生系统的增长和基础设施变得更加复杂,可观察性正成为组织关注的焦点。维护系统稳定性、可靠性和性能的需求是可观察性和分析工具发展和成熟的原因。
在过去的几年里,云原生可观察性工具取得了巨大的进步。已经出现了许多不同的工具,用于监控集群各个部分的指标、收集数据以及分析日志和跟踪。
实现集群可见性
现在,聚合和关联来自不同来源的所有这些可观察性数据并获得整个系统的整体视图的需求要大得多。这就是为什么不同的开源工具可以很容易地相互集成,从而为开发人员创建完整的可见性。集群可见性工具可以聚合来自数据中心不同微服务和应用程序的指标,深入了解部署期间的性能,了解活动服务在整个数据中心的行为方式,查明应用程序级别的问题,并向管理员提供实时警报。
为了实现这一目标,这些工具中的大多数都提供与监控系统的本地集成,以便您可以在任何服务意外停机或遇到高负载时收到通知。此外,其中许多产品还具有复杂的分析功能,允许分析师深入了解微服务或应用程序级别发生的情况。
统一的可观察性方法
为了实现更深层次的可观察性,每个数据单元都需要上下文化。因此,捕获的每个指标、跟踪和日志都需要具有系统中正在发生的事情的完整上下文。此外,开发人员需要能够监控从交付管道开始到部署的整个应用程序行为。无缝集成到应用程序环境中的工具对于自动化整个可观察性之旅至关重要。
这种统一的可观察性方法有一个令人兴奋的承诺:在三个支柱之间提供更深层次的关联,并帮助团队定义和跟踪对其业务需求很重要的指标。
Kubernetes 可观察性的状态在不断发展,因此及时了解新趋势非常重要。这包括了解可用的不同类型的监控工具并选择最适合您需求的工具。
云原生可观察性的流行工具
在过去的几年里,可观察性的实现变得更容易获得,因为有许多可用的开源工具可以帮助开发人员将可观察性的不同方面引入他们的系统。
让我们看看受欢迎的:
流行的云原生可观测性工具工具描述优点缺点普罗米修斯用于事件监控和警报的最常用的开源可观察性工具
实时指标和数据收集
Grafana 集成
容器化应用程序的可视化
没有内置的长期存储
基本异常检测
仅处理指标,不处理日志或跟踪
水平扩展面临挑战
开放遥测该项目标准化了您如何收集遥测数据并将其发送到后端平台,例如 Prometheus 或 Jaeger
扩展称为“分析”的第四个支柱,以帮助更好地了解性能
Kubernetes Dashboard 可用于可视化跟踪重要信息,例如集群中运行的容器和 Pod
有关在 Pod 中运行的应用和应用部署的指标,以及资源利用率
不提供后端存储
没有可视化层
不提供存储解决方案
积家Kubernetes 跟踪的流行选择;其主要目的是监控基于微服务的系统并在您选择的存储后端收集数据
通过使用跟踪来分析根本原因并监控分布式事务,使调试更容易
提供有限的后端集成
cAdvisorKubernetes 内置的监控功能,默认存在于每个节点上
收集节点级别的数据,例如资源使用和性能特征,并在基于 Web 的界面上显示它们
不提供丰富的功能,因为它只收集基本的利用率指标
不提供任何长期存储
没有深入的分析或趋势指标
仅处理指标,不处理日志或跟踪
结论
云原生可观察性已成为管理云中 Kubernetes 部署的重要组成部分。通过提供对在 Kubernetes 上运行的应用程序性能的可见性,云原生可观察性有助于提高系统性能、可靠性和安全性。随着开源工具的进步,我们正在降低为组织实施可观察性的障碍。当前的产品和标准将通过关注结果而不是技术实施来成熟并变得更加成熟。
此外,将应用程序迁移到 Kubernetes 的趋势可能会增加未来对可观察性解决方案的需求。Kubernetes 帮助开发人员以容器化的方式将他们的应用程序传送到云端,现在它与云原生的工作方式紧密相连。Kubernetes 不仅仅是一项技术,它还成为一项业务决策,为采用它的公司带来价值,因为这意味着您以云原生方式开发和交付应用程序,为创新做好准备。
正确管理和监控 Kubernetes 是最强大的。这就是为什么从一开始就考虑可观察性很重要的原因。为云原生可观察性实施正确的工具和标准可以为您的企业节省宝贵的时间和资源,因为它将帮助组织检测事件并及时解决它们。