云原生全景图详解(七):可观察性是什么,有哪些相关工具

K8sMeetup社区

本系列之前的文章介绍了 CNCF 云原生全景图的供应层、运行时层、编排管理层、应用定义和开发层、托管 Kubernetes 和 PaaS 层,本文是该系列的最后一篇文章,将为大家介绍可观察性和分析相关工具。

作者:Catherine Paganini、Jason Morgan

翻译:Sarah(K8sMeetup)

校对:木子(K8sMeetup)

终于我们来到了云原生全景图详解系列的最后一篇文章。如果你错过了本系列前面的文章,可以回顾一下:云原生技术图谱、供应层、运行时层、编排和管理层、应用程序定义和开发层、托管 Kubernetes 和 PaaS 层,本文将向大家介绍云原生全景图中的可观察性和分析这一“列”。

首先我们定义一下可观察性和分析(Observability & analysis)。可观察性是一种系统特性,描述了通过外部输出可以理解系统的程度。通过衡量 CPU 时间内存磁盘空间延迟error 等指标,可以或多或少地观察到计算机系统的状态。分析则是尝试理解这些可用于观察的数据。

为了确保服务不会中断,我们需要观察和分析应用程序的各个方面,以便立即发现并修复异常情况。这就是可观察性和分析这个类别要做的事情。它贯穿并观察所有层,因此在整个全景图的侧面而不是嵌在某一层。

此类别中的工具包括日志记录 (logging)、监控 (monitoring)、追踪(tracing) 和混沌工程(chaos engineering)。虽然混沌工程在这里列出,但它更多的是一种可靠性工具,而不是可观察性或分析工具。

K8sMeetup

日志记录

是什么

应用程序会输出稳定的日志消息流,以描述自身在何时做了什么。这些日志消息会捕获系统中发生的各种事件,例如失败或成功的操作、审计信息或运行状况。日志记录工具将收集、存储和分析这些消息,以追溯错误报告和相关数据。日志记录(loging)、度量(metrics)、追踪(tracing) 是可观察性的三大支柱。

解决的问题

收集、存储和分析日志是构建现代平台的关键部分,日志记录可帮助执行这其中的某一项或全部任务。一些工具可处理从收集到分析全方位的工作,还有一些工具则专注于单个任务(例如收集)。所有日志记录工具都旨在帮助组织更好地控制日志消息。

如何解决

在收集、存储和分析应用程序的日志消息时,我们将了解应用程序在任何给定时间的通信内容。但请注意,日志代表应用程序有意输出的消息,它们不一定能查明给定问题的根本原因。尽管如此,随时收集和保留日志消息是一项非常强大的功能,它将帮助团队诊断问题并满足合规性要求。

常用工具

尽管收集、存储和处理日志消息不是什么新鲜事,但云原生模式和 Kubernetes 的出现极大地改变了我们处理日志的方式。适用于虚拟机和物理机的传统日志记录方法(例如将日志写入文件)不适用于容器化的应用程序,因为在这些容器化应用程序中,文件系统的生命周期可能并不会比应用程序持久。在云原生环境中,诸如 Fluentd 之类的日志收集工具与应用程序容器一起运行,并直接从应用程序收集消息,然后将消息转发到中央日志存储以进行汇总和分析。

CNCF 中的日志记录工具只有 Fluentd。

流行词

热门产品

日志记录

Fluentd & Fluentbit

Elastic Logstash

K8sMeetup

监控

是什么

监控是指对应用程序进行检测,收集、聚合和分析日志和指标,以增进我们对应用程序行为的理解。日志描述了特定的事件,而指标则是在给定时间点对系统的度量。日志和 metrics 是两种不同的事物,但是要全面了解系统的运行状况,二者都是必需的。监控的内容包括观察磁盘空间、CPU 使用率、单个节点上的内存消耗,以及执行详细的综合事务以查看系统或应用程序是否正确且及时地进行了响应等。有许多不同的方法可用来监控系统和应用程序。

解决的问题

在运行应用程序或平台时,我们希望它完成既定的任务,并确保只有被授权的用户才能访问。通过监控,我们可以知道应用程序/平台是否在正常、安全且高效地运行,是否仅有被授权的用户可以访问。

如何解决

良好的监控方法使运维人员能够在发生事故时迅速做出响应,甚至可以自动响应。监控可以让我们洞察系统当前运行的状况,监测到问题进行修复。它能跟踪应用程序运行状况、用户行为等内容,是有效运行应用程序的重要组成部分。

常用工具

云原生环境中的监控和传统应用程序的监控类似。我们需要跟踪指标、日志和事件以了解应用程序的运行状况。主要区别在于云原生环境中的某些托管对象是临时的,它们可能不会持久,因此将监控系统与自动生成的资源名称联系在一起并不是一个好策略。CNCF 中有许多监控工具,最主要的是 Prometheus(已经从 CNCF 毕业)。

流行词

热门产品

监控

时序

告警

metrics

Prometheus

Cortex

Thanos

Grafana

K8sMeetup

追踪

是什么

在微服务架构中,服务之间不断通过网络相互通信。追踪是日志记录的一种专门用法,可以跟踪请求在分布式系统中移动的路径

解决的问题

了解微服务应用程序在某个时间点的行为是一项极具挑战的任务。尽管有许多工具可以提供服务行为相关的洞察,但我们可能难以通过单个服务的行为来理解整个应用程序的运行情况。

如何解决

追踪对应用程序发送的消息添加唯一标识符,可解决上述问题。该唯一标识符可以跟随/追踪各个事务在系统中移动的路径,可以通过追踪的信息了解应用程序的运行状况,以及调试有问题的微服务或行为。

常用工具

追踪是一种功能强大的调试工具,可以对分布式应用程序的行为进行故障排除和 fine-tune。要实现追踪也需要一些成本,比如需要修改应用程序代码以发出跟踪数据,并且所有 Span 都需要由应用程序数据路径中的基础架构组件传播。CNCF 中的追踪工具有 Jaeger 和 Open Tracing。

流行词

热门产品

Span

追踪

Jaeger

Open Tracing

K8sMeetup

混沌工程

是什么

混沌工程(chaos engineering)是指有意将故障引入系统以创建更具弹性的应用程序和工程团队的实践。混乱工程工具以一种可控的方式在系统中引入故障,并针对应用程序的特定实例运行特定的实验。

解决的问题

复杂的系统会出现故障。故障的原因有多种,给分布式系统带来的后果也很难预测。一些组织已经接受了这一点,他们愿意采用混沌工程技术,不去试图防止故障的发生,而是设法练习从故障中恢复。这被称为优化平均修复时间MTTR)。

如何解决

在云原生环境中,应用程序必须动态适应故障——这是一个相对较新的概念。这意味着当出现故障时,系统不会完全崩溃,而是可以优雅地降级或恢复。混沌工程工具可以在生产环境的系统上进行实验,以确保在发生真正的故障时系统也能应对。

简言之,对一个系统进行混沌工程实验,是为了确保该系统可以承受意外情况。使用混沌工程工具,不必等待故障发生后再进行应对,而是可以在可控条件下为系统注入故障,以发现漏洞并在变更覆盖这些漏洞之前加以修复。

常用工具

混沌工程工具和实践对于应用程序的高可用至关重要。分布式系统通常过于复杂,而且任何变更过程都无法完全确定其对环境的影响。通过有意引入混沌工程实践,团队可以练习从故障中恢复,并将这个过程自动化。CNCF 中的混沌工程工具有 Chaos Mesh 和 Litmus Chaos。还有一些其他的开源和闭源的混沌工程工具。

流行词

热门产品

混沌工程

Chaos Mesh

Litmus Chaos

K8sMeetup

总结

可观察性和分析这一列的工具可用于了解系统的运行状况,并确保系统即使在恶劣的条件下也能正常运行。日志记录工具可捕获应用程序发出的事件消息,监控工具可监测日志和指标,追踪工具可跟踪单个请求的路径。结合使用这些工具,理想情况下可以 360 度全方位查看系统中正在发生的事情。混沌工程提供了一种安全的方法来保证系统可以承受意外事件,基本上可以确保系统的健康运行。

(0)

相关推荐