“您可以从三个选项中(快速、便宜或好)选择两个”提出这个问题的人可能不是可观测性工程师。
但也可能是,在可观测性方面,决定您是否想要“快速、负担得起或深入的洞察力”传统上是工程团队的首要任务之一。从历史上看,我们所依赖的监控架构和工具并不能让我们拥有一切,至少在分布式云原生应用程序的环境中是这样。
幸运的是,至少在可观测性方面通过重新思考监控方法的基本原理,您可以拥有一切。您可以快速获得深入的见解,而无需为监控工作流付出代价。
听起来好得令人难以置信?继续阅读来了解如何在云原生可观测性方面围绕成本和深度(以及速度)进行平衡。
当工程师拥有一切时:传统的可观测性方法
在可观测性方面,过去几代的工程师不必在成本、深度或速度之间做出选择。他们无需尝试就拥有这一切。
这是因为他们使用的是集中的、单一的应用程序。在这种情况下,收集足够数量的监控数据以实现完全知情的管理决策并不需要花费太多时间或金钱。多数情况下,只需将轻量级监控 SDK 集成到单体应用程序中,并让它收集基本指标和日志数据。设计简单,工艺简单,成本低。
这种方法在以单体和单节点应用程序部署为主的世界中运行良好。没有人质疑它,因为没有理由质疑它。
事情是如何分崩离析的:云原生可观测性的曙光
在过去十年左右的时间里,许多工程团队遇到的问题是,当采用传统的、对单体友好的监控架构并尝试将其移植到分布式云原生应用程序上时,将无法再拥有这一切。
您不一定能快速监控,因为将 SDK 集成到所有微服务中需要时间。此外还需要收集更多数据,因为不仅要处理来自单个应用程序的一些基本指标。相反,你从一堆微服务中获得了大量的日志和指标(不要忘记你的踪迹!)。
以具有成本效益的方式收集所有数据也非常困难。您可能会遇到高额的出口费用,只是为了将数据移动到可以分析的地方,还要支付存储费用。冰川层存储可能很便宜,但当拥有大量需要保留多年的监控数据时,它就会增加。
加快云原生可观测性并降低成本的一种方法是仅收集工具随机选择的一些数据,而不是尝试收集和分析可用的每一个日志、指标和跟踪。但随后您将进行抽样——没有人愿意成为数据抽样者,因为数据抽样意味着可能会由于数据收集和分析不完整而错过重要信息。
如果依赖于分布式应用程序的传统可观测性策略,您最终将面临笔者喜欢称之为成本深度权衡的问题。可以快速且廉价地进行观测,或者选择深入观测,但要付出高昂的时间和精力。你不可能拥有一切。
摆脱成本深度的权衡
幸运的是,如果退后一步重新考虑可观测性方法,您会意识到可以进行廉价和深入的观测。
诀窍在于:无需尝试收集和分析每一个可用数据或随机采样,而是通过在源头识别最有趣的数据来智能地对其进行采样,然后仅选择该数据以发送到可观测性平台。您还可以将数据转换为细粒度的、可操作的指标,以便在它到达可观测性门户时立即进行分析。
仍然好得令人难以置信,对吧?问题是,基于仪器的监控方法本质上意味着,如果我们试图测量关于代码的关键内容,需要使用外部代码段“包装”其中的一部分,这些代码段将管理监控的逻辑工具。
使逻辑过于复杂,开销就越大。在将来自应用程序的数据发送出去之前,分析得越多,生成的开销对应用程序的总体影响就越大。
这就是为什么传统的监控工具会转向简单的逻辑,比如全部采样,或者随机采样。
在不深入细节的情况下,这种限制可以通过eBPF等新兴技术来解除。
结果是您传输、分析和存储的数据要少得多。但由于专注于相关数据,您不必在晚上因想知道您选择的数据是否会可靠地产生您需要的深入见解而睡不着觉。
把针放在大海捞针前
如果你喜欢类比,这里有一个总结了我们在这里讨论的可观测性策略:这类似于在你建立一个干草堆前对每一束干草进行分类,检查里面是否有一根针。
这样就可以尽早抓住针头,而不必等到准备好整个干草堆后才能对其进行分类并尝试拔出针头。针很容易找到,因为它们从一开始就不会被埋在干草堆里。事实上,你根本没有干草堆来处理,因为可以在不关心的干草变成代价高昂的干草堆之前将其丢弃。
云原生可观测性的未来
我认为这种可观测性方法对于任何希望在不支付大量监控和数据存储成本的情况下保持对其系统的可靠可见性的团队来说都是关键。云原生日志、指标和跟踪数据的数量和复杂性只会增加,使得传统的监控和可观测性策略在云原生环境中越来越不可行。
如果你想拥有这一切——可以。采用可观测性架构,让您在源头上磨练相关数据,并且是金子。