什么是可观测性(Observability)? 为什么需要可观测性?
2025年7月2日
可观测性 (observability) 是近年来在软体工程领域相当常听见的一个词,然而可观测性是什么? 为什么需要为系统建立可观测性? 在这一期的主题文中,我们将来一探这个可能有点拗口的词 (备注:因为 observability 这个词有点长且不好念,因此业界有另一个叫 o11y 的简称,所以当听到 o11y,就是在指可观测性)。
为什么需要可观测性?
在谈可观测性之前,想先请大家回想自己在工作上实际写程式时,有多少比例的时间在解 bug? 相信即使是一个很完善的系统,出现 bug 仍是难免的。这时就出现一个很关键的点,当发现有 bug 时,该如何快速定位问题出在哪里,然后直指问题核心,让问题能更快被解决?
要能够快速地定位出问题,系统的可观测性就会非常重要。
这边让我们用看牙的例子来做比喻。以多数人都有经验的看牙医来说,今天假如你的某颗牙齿觉得痛,这时「痛」这件事,就像在一个系统中的警报 (alert),透过疼痛让你意识到有问题;这就像我们在 软体工程师该如何做好监控 (monitoring)? 谈到的,一个系统中需要机制来让开发者与维运人员,知道系统中有问题出现。
也如同「痛」是有分等级的,假如今天只是小痛,可能多数人会忍一下,观察一两天,如果还继续痛才去看牙医;但如果是大痛,可能会飞快就近找一个诊所或医院,赶快做检查与治疗。在软体系统的监控与警报系统,也会需要区分严重等级,例如 P0 是最重要,P1 是次重要,然后再来是 P2、P3 以此类推。如果看到是 P0 的问题,需要放下手边做的是马上去解决问题,但假如是 P3 的则不需用这么紧急。
但是如同今天牙痛去看牙医,不能只有「痛」这个机制,因为只有痛,医生只能旁敲侧击式地推断问题出在哪,例如会问是哪里痛、怎么样的痛法,但这样很难快速找出最根本的问题。因此相信多数人现在去看牙医,医生都会先帮忙照一张 X 光片,然后根据 X 光片以及其他的资讯,综合判断下告诉你问题可能出在哪里。
这边的 X 光片就是增加可观测性的手段,透过 X 光片,牙医师可以更清楚了解蛀牙的缺损、牙根有没有破损、过去做的根管数目与钙化状况,这些资讯能让牙医师更有效判断应该采用哪种方法对症下药。
同样地,假如今天在系统当中出现一个 bug,身为工程师要去判断问题根本原因,就会需要有对应可观测的工具与手段。不然只能用瞎子摸象的方式去推敲,这会让整个 debug 过程变得非常没有效率。
读到这你可能会问,所以什么是可观测性?
什么是可观测性 (observability)?
在理解完为什么需要可观测性后,让我们回过头来理解什么是可观测性。如同上面段落的比喻,所谓的可观测性,是指能去衡量一个系统内部状态的能力。如同 observability 这个字是由 observe (观测),以及 ability (能力) 所组成的,因此当一个系统是可观测的,意思是开发或维运的人,可以很轻易地去观测到系统内部究竟发生什么事。
可观测性在一个复杂的系统会显得特别重要,举个具体的例子来说,在一个电商的客服系统中,今天使用者做了某个操作失败了,可能发生问题的地方非常多,有可能是前端出问题,也可能是后端出问题。假如是后端出问题,那么是后端背后对接的多个不同微服务中的哪个出问题? 假如没有好的可观测性,开发者要 debug 时就会非常痛苦,需要一层层追。但如果有好的观测性,就可以一眼看出问题出在哪里。
在 软体工程师该如何做好监控 (monitoring)? 谈到的监控 (monitoring) 可以让开发者知道出问题了,而可观测性 (observability) 则是让我们知道哪里出问题、为什么出问题。
阅读更多
不过,要如何提升一个系统的可观测性呢? 这就不能不谈可观三支柱 -- 指标 (metrics)、日志(logs) 以及追踪 (traces),以及提出三支柱不足够的可观测性 2.0。