作者:刘洋
可观测是为了解决问题,所以在聊可观测之前,应先对问题排查的普适原则进行了解。
以排查系统问题为例,要理解系统,要先关注基础知识,理解编程语言基本的计算机科学知识,关注系统大图比如架构部署和重大流程,要关注运行细节,要对核心功能的算法和数据结构了然于心,还要关注系统的运维工具,能够了解发布、回滚和监控。
在理解的基础上,还要能够复现问题,主要关注问题发生的触发条件以及问题发生时数据现场的保留,包含指标、链路、日志、事件等。
有了现场再加之对于系统的,才可以定位问题。通过现场保留的数据,进行关联分析;基于理解,可以快速用二分定位到根因。在定位的过程中,尤其要关注变更,因为有大量的系统问题是由变更导致的。
确定根因后再进行修复,既要治标也要治本,并且要充分验证,确保不引入新的问题。
以上为问题排查的普适原则,它不仅适用于系统问题的排查,也可以应用到生活的方方面面。
而可观测使得问题排查的过程更加高效、稳定、低成本。它能够帮助我们理解系统,出现问题的时候能够留下足够多的现场,能够使数据之间很方便地进行关联,帮助我们做二分的关联分析,最终还可以验证修复是否正确。
复杂度是恒定的,它不会消失,只会转移。我们构建的编程语言、编程框架、容器操作系统都只是将复杂度关在合适的地方。如果一切运行正常,皆大欢喜;而一旦出现问题,就是灾难。复杂度不断下沉的趋势使得可观测面临了很大的压力。K8s 的流行使得微服务架构十分普及,多语言、多通信协议成为常态,这也在另一方面带了挑战。
• 挑战1:端到端观测复杂度上升,埋点成本居高不下。然而这只是冰山一角,有大量能力下沉到 kubernetes 管控层、容器运行层、网络和操作系统层面,这些基础设施能力的下沉带来了很大挑战;
• 挑战2:由于关注点的分离,使得应用问题与底层问题无法自顶向下形成关联;
• 挑战3:虽然有很多工具,但是上下文缺失、数据散落,导致无法通过这些数据很好地理解应用,因为现场的缺失无法关联,而使问题排查效率低下。
可观测需要有统一的技术来解决自身的复杂度。
从一开始,内核就是可观测的绝佳位置,然而由于效率和安全问题一直无法实现。经过多年发展,eBPF技术为可观测打开了新的大门。
eBPF是一项可以安全地在内核中运行沙盒程序的技术,无需修改代码即可在内核用户态程序事件发生时运行。它具备以下特性:
• 无侵入特性:观测成本极低,应用无需修改任何代码,也无需重启进程;
• 动态可编程性:无需重启探针,动态下发eBPF脚本即可修改探针侧的逻辑;
• 高性能:自带JIT编译,使探针能够获得内核本地运行的效率;
• 安全:verifier机制限制了eBPF脚本能够访问的内核函数,保证内核运行的稳定。
除了这些令人振奋的特性外,eBPF的使用流程也非常方便。以监控、应用、性能为例,只需要加载编译eBPF程序监听网络的内核事件,解析网络协议,然后聚合成指标,输出Trace即可。
接下篇:
https://developer.aliyun.com/article/1222962?groupCode=alisoftwaretech