1 为什么我们需要“可观测性”?
基于监控的运维方式是运用指标和仪表盘来对故障问题进行分类,这是软件行业的普遍做法。在单体应用架构时代,由于系统交互比较简单,数据收集有限,依靠运维人员的经验和直觉来检测系统问题是有意义的。通过监控CPU、内存等资源消耗情况、数据库连接情况和网络传输质量,基本可以定位问题并进行修复。然而,现代应用程序底层系统的复杂性和规模使这种传统方法面临着挑战:分布式系统的交互组件数量众多,可能发生的故障数量和类型也更多; 此外,由于敏捷化开发的需求,分布式系统不断更新迭代,每次更改都可能产生新的故障类型;在分布式环境中,理解当前问题是一项巨大的挑战,主要是因为它比简单的系统产生更多的“未知的未知数”, 由于监控需要“已知的未知数”,因此通常无法充分解决这些复杂环境中的问题。
软件系统“可观测性”的定义是:在无需提前定义或预测调试需求的情况下,可解释系统处于何种状态的能力。可观测性很重要,因为它可以让运维人员更好地控制复杂系统,无需依靠经验或深厚的系统知识来预判问题所在。借助可观测性工具,运维人员可以客观地调查任何问题,找到深层隐藏的问题根因。由此可见,可观测性工具更适合现代的分布式IT系统,由分布式系统复杂性带来的不确定性,可通过可观测性工具得到更好的感知和预测,合理管控IT设备与业务风险。
2 “可观测性”的发展和演进
“可观测性”一词是由工程师Rudolf E. Kálmán于1960年创造的。在过去,可观测性的“三大支柱”分别指:日志、指标和跟踪。
【图1 传