云原生景观系列
目录
在《叮,你收到一份来自CNCF的云原生景观简介》中,我们对CNCF云原生生态系统做了概述。
在《云原生景观:供应层(Provisioning)解决了什么问题?如何解决的?》中,我们探讨了供应层,该层主要致力于构建Cloud Native平台和应用程序的基础。
在《云原生景观:运行时层解决了什么问题?如何解决的?》里,我们着重介绍了运行时层,涵盖了容器在云原生环境中运行所需的所有内容,包括容器运行时,容器存储工具,容器网络。
在《云原生景观:编排和管理层解决了什么问题?如何解决的?》,我们介绍了编排和管理层, 弄清楚了如何将所有应用程序组件作为一个整体来组织和管理。
在《云原生景观:应用程序定义和开发层解决了什么问题?如何解决的?》,我们介绍了帮助工程师构建应用程序并使其运行的工具。
今天,我们开始介绍可观察性和分析。可观察性指的是,系统可以从其外部输出中被理解的程度。通过CPU时间、内存、磁盘空间、延迟、错误等来衡量,计算机系统都可以或多或少被观察到。分析是一项活动,你可以在其中查看这些可观察数据并理解它。
为确保服务不会中断,你需要观察和分析应用程序的各个方面,以便立即检测并纠正任何异常。这就是这个类别的全部内容。它运行并观察所有层,这就是为什么它在侧面而不是嵌入到特定层中。
此类别中的工具分为日志记录、监控、跟踪和混沌工程。请注意,名称有些误导,因为混乱工程更偏重可靠性,而不是一种可观察性或分析工具。
日志记录( Logging)
是什么
应用程序会发出稳定的日志消息流,以描述它们在给定时间所做的事情。这些日志消息捕获系统中发生的各种事件,例如失败或成功的操作、审计信息或健康事件。日志工具收集、存储和分析这些消息以跟踪错误和相关数据。与指标、跟踪一起,日志记录也是实现可观察性的工具之一。
解决了什么问题
收集、存储和分析日志是构建现代平台的关键部分。日志记录执行这些任务中的一项或全部。一些工具包含从收集到分析的各个方面,而另一些工具则专注于收集等单一任务。所有日志工具都旨在帮助组织处理其日志消息。
它如何解决
在收集、存储和分析应用程序日志消息时,你将了解应用程序在任何给定时间通信的内容。但请注意,日志表示应用程序发出的消息,它们虽然不一定能查明给定问题的根本原因,但是,随着时间的推移,收集和保留日志消息,将会帮助团队诊断问题。
相应的解决工具
虽然收集、存储和处理日志消息不是一个新问题,但云原生模式和 Kubernetes 已经导致我们处理日志的方式发生了重大变化。
适用于虚拟机和物理机的传统日志记录方法(例如将日志写入文件)不适合容器化应用程序,其中文件系统不会比应用程序更持久。像 Fluentd 这样的云原生环境日志收集工具中,与应用程序容器一起运行并直接从应用程序收集消息。然后将消息转发到中央日志存储进行聚合和分析。
Fluentd 是该领域唯一的 CNCF 项目。
流行语 | 热门项目 |
日志记录 | Fluentd & Fluentbit Elastic Logstash |
监视( Monitoring )
是什么
监控是指对应用程序进行检测以收集、汇总和分析日志和指标,以提高我们对系统行为的理解。虽然日志描述了特定事件,但指标是在给定时间点对系统的度量——它们是两种不同的东西,但对于全面了解系统的健康状况都是必要的。监控包括从观察单个节点上的磁盘空间、CPU 使用率和内存消耗到执行详细的综合事务以查看系统或应用程序是否正确及时地响应的所有内容。有许多不同的方法来监控系统和应用程序。
解决了什么问题
在运行应用程序或平台时,你希望它按照设计完成特定任务,并确保它只能由授权用户访问。监控可让你了解它是否正常、安全、经济高效地工作,是否仅由授权用户访问,还可以让你跟踪的任何其他特征。
它如何解决
良好的监控使运维人员能够快速响应,并且可能在发生事故时自动响应。它提供对系统当前健康状况的洞察并观察变化。监控跟踪从应用程序运行状况到用户行为的所有内容,是有效运行应用程序的重要组成部分。
相应的解决工具
在云原生环境中进行监控,类似于监控传统应用程序。你也需要跟踪指标、日志和事件以了解应用程序的运行状况。主要区别在于某些托管对象是短暂的,这意味着它们可能不会持久,因此将你的监控与自动生成的资源名称联系起来不是一个好的长期策略。在这个领域有许多 CNCF 项目,但主流解决方案都是主要围绕 CNCF 毕业项目 Prometheus 展开。
流行语 | 热门项目/产品 |
Monitoring Time series Alerting Metrics |
Prometheus Cortex Thanos Grafana |
跟踪( Tracing )
是什么
在微服务世界中,服务通过网络不断地相互通信。跟踪是日志记录的一种特殊用途,它允许你的请求通过分布式系统时,跟踪请求的路径。 它比监视更进一步。
解决了什么问题
了解微服务应用程序在任何给定时间点的行为,是一项极具挑战性的任务。虽然许多工具提供了对服务行为的深入洞察,但很难将单个服务的操作与对整个应用程序行为的更广泛理解联系起来。
它如何解决
跟踪通过向应用程序发送的消息添加唯一标识符来解决此问题。该唯一标识符,允许单个请求通过你的系统时对其进行跟踪。你可以使用此信息查看应用程序的运行状况以及调试有问题的服务。
相应的解决工具
跟踪是一种强大的调试工具,可让你对分布式应用程序的行为进行故障排除和调试。这种功能是有代价的--需要修改应用程序代码以发出跟踪数据。
Jaeger 和 Open Tracing 是该领域的 CNCF 项目。
流行语 | 热门项目 |
Span Tracing |
Jaeger OpenTracing |
混沌工程( Chaos engineering)
是什么
混沌工程是指有意将故障引入系统以创建更具弹性的应用程序和工程团队的做法。混沌工程工具,提供了一种通过受控方式来引入故障,并针对应用程序的特定实例运行特定实验。
解决了什么问题
复杂的系统出现问题了,故障的原因有很多,因为分布式系统中的后果通常很难理解。接受混沌工程的组织接受失败会发生,而不是试图防止失败,在失败发生时尽快从中恢复。这称为优化MTTR(平均修复时间)。
它如何解决
在云原生世界中,应用程序必须动态适应故障——这是一个相对较新的概念。这意味着,当出现故障时,系统不会完全崩溃,而是会优雅地降级或恢复。混沌工程工具使你能够对生产环境中的软件系统上进行试验,以确保它们在发生真正的故障时也能这样做。
简而言之,你对系统进行混沌试验,是因为你希望确信它能够承受故障或意外情况。与其等待某事发生并发现,你可以在受控条件下对其施加压力,以找出弱点并在问题发现之前修复它们。
相应的解决工具
混沌工程工具和实践对于实现应用程序的高可用性至关重要。分布式系统通常过于复杂,任何一位工程师都无法完全理解,而且没有任何变更过程可以完全预先确定变更对环境的影响。通过引入深思熟虑的混沌工程实践,团队能够进行实践和自动化,从故障中恢复。Chaos Mesh 和 Litmus Chaos 是该领域的 CNCF 工具。
流行语 | 热门项目 |
混沌工程 | Chaos Mesh Litmus Chaos |
正如我们所见,可观察性和分析层旨在了解系统的健康状况并确保其即使在恶劣条件下也能保持运行。日志工具捕获应用程序发出的事件消息,监控查看日志和指标,并跟踪各个请求的路径。结合使用这些工具时,理想情况下,你可以 360 度全方位了解系统中发生的情况。混沌工程有点不同,它提供了一种安全的方法来验证系统是否可以承受意外事件。
译文链接:The Cloud Native Landscape: Observability and Analysis – The New Stack