本文来自微信公众号“开源云中文社区”。
可观察性已成为现代软件开发中的一个关键概念,使团队能够深入了解复杂系统的性能、健康状况和行为。基于预定义度量和静态阈值的传统监控方法在应对现代应用程序的动态和分布式特性方面存在局限性。因此,一种称为动态可观测性的新范式获得了关注,通过结合度量、日志和跟踪,提供了动态系统的实时可见性。
凭借适应不断变化的环境和捕获上下文信息的能力,动态可观察性使开发团队能够主动识别和解决问题,减少平均解决时间(MTTR),提高整体系统可靠性以及开发人员的生产力。
如今,动态可观察性推动了开发实践的发展,将运行时调试集成到开发生命周期中,鼓励团队采用主动的方法进行系统监控和故障排除。通过动态可观测性提供的洞察,开发团队可以在整个开发过程中优化系统性能、检测异常并做出数据驱动的决策。
动态可观察性的兴起代表了软件开发领域的变革性转变。通过拥抱动态可观察性,组织可以在日益复杂和动态的数字生态系统中培养持续改进的文化,提高系统可靠性,并提供高质量的软件产品。
可观察性:好的、坏的和压倒性的
可观察性是通过观察系统的输出来理解系统行为的能力。这包括日志、跟踪和度量。主要目标是能够通过对系统的运行状况和状态有一个清晰的概述来诊断和调试问题。简单地说,它是查看系统内部、了解其工作方式并积极调试系统的能力。
虽然在过去,应用程序性能监控(APM)工具和日志记录工具与内置集成开发环境(IDE)调试工具的组合足以识别应用程序中的问题,但今天的现实更为复杂。向微服务和云原生、无服务器应用程序、渐进式交付工作流和其他高级架构的过渡给开发者和运维带来了新的挑战。
从Lightrun的经验来看,以上是开发人员在生产环境中常见的故障排除挑战的代表性子集。
由于各种原因,访问部署在Kubernetes集群中的应用程序或服务的远程实例或从开发人员机器调试无服务器Lambda功能是一项挑战。首先,从开发人员机器到生产部署的访问本身要么被禁止,要么过于复杂,以至于会削弱开发人员的能力并减缓调试过程。即使已经解决了这样的障碍,能够在不停止应用程序、更改其状态并重新部署以获得这些额外日志的情况下从生产环境中获取运行时遥测是一个极其漫长且容易出错的过程。
这些只是导致动态可观察性上升并转变为软件开发生命周期工具堆栈一部分的少数例子。从需求的角度来看,为开发人员提供更多的工具和能力来对自己的应用程序进行故障排除,无论它们在哪里运行以及它们有多复杂,这是一种新的常态。
动态可观察性案例:关键业务价值
正如我们前面所定义的,当开发人员需要使用传统的调试工具和APM解决方案从IDE中排除远程和复杂的工作负载时,他们会功亏一篑。动态可观测性就是为了解决这些挑战。
基本上,与静态日志记录相反,具有动态可观察性的开发人员可以直接从他们的IDE中享受跨应用程序部署和环境的端到端观察性。这意味着降低了MTTR,提高了开发人员的生产力,并优化了总体成本,因为开发人员在需要的地方和时间调试和使用日志和遥测数据,而不是监控一切。
动态可观察性已成为现代软件开发中的一种关键方法,使团队能够深入了解系统行为并做出明智的决策。它超越了传统的测试和监控方法,提供了对系统模式、优势和劣势的全面理解。
采用动态可观察性的原理和好处可以总结为以下几点:
——增强对系统的理解
动态可观察性使开发人员能够观察系统状态和行为,为他们提供详细的洞察。通过监控实时指标、日志和跟踪,开发人员可以全面了解其系统,识别潜在问题并做出数据驱动的决策。
——完善测试驱动开发
虽然测试驱动开发(TDD)侧重于编写测试以确保代码的正确性,但动态可观察性更进一步地观察和分析整个系统的行为。它认识到,单独的测试可能无法捕捉所有可能的场景,并鼓励开发人员采用可观察性来全面理解系统。
——加强行为驱动开发
虽然行为驱动开发(BDD)侧重于利益相关者之间的协作,以定义行为预期,但动态可观察性通过在运行时跨环境(生产、阶段、CI/CD、QA)积极观察和检测系统行为,揭示可能隐藏的模式和潜在风险,使其更进一步。
——完善监控
动态可观察性和开发者原生可观测性不能取代监控;监控确保了系统的稳定性和性能,而动态可观察性提供了更深入的理解。通过将监控和动态可观察性相结合,开发团队可以创建一个可靠且精简的系统,从而减少漏洞和风险。
一句话:动态可观测性是新常态
动态可观察性代表了软件开发的范式转变,使开发人员能够详细了解系统行为并做出明智的决策。它使用超越传统测试的工具和实践,使团队能够创建健壮可靠的系统。它与DevOps、TDD和BDD等现有方法论协调工作,以系统行为为重点增强了它们的原则。通过采用动态可观察性,组织可以增强其开发过程,并构建更具弹性和效率的软件系统。
在动态可观测性解决方案中要寻找什么?
实时调试:开发人员必须能够实时向代码中添加日志记录语句和度量,而无需重新部署或重新启动应用程序。
按需快照:动态快照为开发人员提供虚拟断点,而无需停止应用程序的执行。能够添加条件、计算表达式和检查任何代码是此类别中的关键功能。
自定义指标:从IDE开始,开发人员应该能够创建自定义指标,以在可变级别上跟踪系统行为的特定方面,如响应时间、方法持续时间或错误率。所有任务都应该在不需要重新部署任何代码的情况下完成。
与现有的开发人员和企业工具集成,包括Prometheus、Grafana、VSCode、公共云provider等云原生工具。
成本优化:能够分析与可观察性相关的低效率并进行优化以降低成本,例如用动态日志替换静态日志,这是此类工具的一项重要能力。
动态可观察性使开发人员能够深入了解其实时应用程序,显著提高开发人员的生产力,降低运营和基础设施成本,并简化调试和修复问题的过程。因此,开发人员可以将复杂的故障排除交给动态可观测性解决方案,从而花更多的时间进行创造性的编码。