中国工商银行基于eBPF技术的云原生可观测图谱探索与实践
在互联网金融时代,各大银行业务量呈爆发性增长态势,业务模式更新迭代更加频繁,传统的 IT 架构越来越无法应对新业务形态所带来的巨大冲击与挑战。云原生相关技术使业务应用呈现微服务众多、多语言开发、多通信协议等典型特征,调用链路日益复杂,监控数据爆发性增长,传统监控方式已无法适应云原生场景。
在这个背景下,中国工商银行积极开展云原生可观测图谱的探索和实践,针对可观测体系中的痛难点,通过深入研究内核新技术,进一步完善云原生技术版图。
中国工商银行早期基于业界对可观测性“三大支柱”(监控指标(Metrics)、日志(Logging)和链路(Tracing))的定义(如图 1 所示),建设了云监控、日志中心和全息监控等运维支撑平台,初步构建了可观测体系,支撑云上应用监控报警和分析诊断能力。随着运维架构转型,开发及运维部门对节点网络拓扑、监控指标、故障定位、性能调优等方面提出了更高的要求。为此,中国工商银行对业界云原生可观测性相关前沿技术进行了深入探索与研究。
图1 可观测三大支柱
云原生基金会的项目全景图(CNCF Landscape)根据项目特点与价值,将提供可观测性能力的项目分为了监控(Monitoring)、追踪(Tracing)、日志(Logging)三类(如图 2 所示)。
图2 CNCF Landscape
利用这些产品的组合,我们可以比较快速地搭建一个可观测性系统。但是从业界实践来看,这样组装的系统普遍存在两大类痛点:
缺乏全局性的系统和网络拓扑关系:云原生分布式网络相较于传统网络,应用节点间网络访问过程经过多层的映射转化后,网络拓扑关系更加复杂,传统监控工具链缺乏以容器、虚机、负载均衡器等系统节点为维度的网络调用链路监控拓扑数据,并且未将抓取的网络信息与 Kubernetes 资源信息结合,无法呈现应用容器间、网络关键组件的网络拓扑,无法形成有效的可观测性图谱。
数据采集方式不具备普适性且内核态指标采集能力不足:传统的数据采集方式通常有两种,一是采用 SDK 集成的方式,随应用版本部署;二是采用 Agent 的方式,采集特定埋点的数据指标。但是基于这两种方式实现的节点拓扑关系,都依赖应用方进行适配改造,埋点的数据采集又局限于特定语言和技术栈。而在云原生环境中,多语言应用、不同通信协议共存的情况下,存在适配工作量极大、应用感知明显的问题。此外,当前指标采集方面还普遍缺失对部分内核资源的细粒度监控能力,影响对问题的深入分析和调优。
要解决容器场景下的系统层网络链路拓扑缺失和内核资源监控不完善的问题,可观测性系统必须设法获取到相关资源的统计信息。但内核通过文件系统或系统调用暴露出的信息有限,单纯从用户态切入无法抓取这些信息,只有从内核本身调用的过程中获取调用信息才可以补足相关能力。具体而言,即需要对应的内核 Tracepoint 或者函数执行 hook 调用抓取相关的信息,并上报到用户态监控程序中。这样的内核技术选型很少,从调研结果来看,目前只有两种技术能达成上述目标,一是内核模块编程技术,二是 eBPF 技术。
对于内核模块编程技术而言,获取内核数据需通过在对应的跟踪点(Tracepoint)或者系统函数调用时执行钩子(Hook)操作来抓取相关信息,并通过 netlink 套接字、sysfs(/sys)、sysctl(/proc/sys) 或 procfs(/proc) 等方式与监控进程进行通信并上传采集的数据。对于普通开发,内核模块编程技术难度较大,且极易造成系统稳定性问题。
eBPF(extended Berkeley Packet Filter)是一种能够在内核运行沙箱程序的技术,提供了一套在内核事件和用户程序事件发生时安全注入代码的机制,使得非内核开发人员也可以对内核进行控制。随着内核的发展,eBPF 逐步从最初的数据包过滤扩展到了网络、内核、安全、跟踪等领域,并且它的功能特性还在快速发展中。早期的 BPF 被称为经典 BPF(简称 cBPF),正是这种功能扩展使得现在的 BPF 被称为扩展 BPF(简称 eBPF)。相对来说,它是一种安全高效的内核技术,它的出现本质上是为了解决内核迭代速度慢和系统需求快速变化的矛盾,在对内核无侵入的前提下,往内核中动态地插入一段自己的代码,实现自定义监控及跟踪能力,极大地降低了用户获取内核态丰富观测指标的门槛(如图 3 所示)。
图3 eBPF技术初印象
内核模块编程技术和 eBPF 技术的详细对比(如表 1 所示)
表1 内核模块编程技术与eBPF技术对比
由此可见,利用 eBPF 技术进行内核开发相比内核模块编程技术拥有诸多优势,包括更严格的安全检查、更稳定的 API、较高的内核开发能力、更优的数据结构与通信性能以及支持平滑升级等。同时,各大互联网公司均采用 eBPF 技术在可观测方面进行了实践,如阿里云提出了一种立足于容器界面和底层操作系统,向上关联应用性能监测的可观测性解决思路,通过 eBPF 技术无侵入地采集多语言、多网络协议的各项指标,实现了一站式可观测性平台;字节跳动通过内核的 eBPF 采集机制获取基于连接层面细粒度的内核网络监控指标,为多种运维场景提供支持。
综上,中国工商银行综合考虑技术优势、发展趋势等多个方面,最终选择基于 eBPF 技术进行内核相关的可观测功能开发,弥补当前网络拓扑和内核资源监控能力的不足,完善云原生场景下的可观测图谱。
在容器化场景下,需要采集的内核数据种类多样,为了更好地通过 eBPF 提升对系统节点间网络调用和内核资源的云原生监控能力,我们引入了 eBPF 探针无侵入式地部署在宿主机上采集相关系统调用信息及应用间互访的网络通信报文, 通过关联容器元数据信息后进行数据聚合压缩入库,并以此构建以云上拓扑自动发现为入口的可观测图谱,支持以节点系统网络性能指标分析为核心的一体化监控能力。中国工商银行的可观测图谱可以分为:内核态指标采集、网络拓扑分析、云上可观测图谱三部分(如图 4 所示):
内核态指标采集:在宿主机部署 eBPF 探针实时采集云上应用访问数据,结合容器元数据,提供云上应用东西向访问关系的原始数据以及网络通信报文。
网络拓扑分析:负责分析处理节点之间的调用关系,系统调用分析模块则负责处理应用系统调用的分类、聚合与信息关联。
云上可观测图谱:提供面向业务和运维场景的可视化分析能力,以云上拓扑发现为入口提供面向应用和运维场景的可视化分析能力,支持联动全息监控、云监控以及日志中心进行关联分析,形成云原生可观测图谱。
图4 eBPF可观测图谱架构
将 eBPF 探针通过 daemonset 的形式无侵入式地部署在宿主机上,负责采集容器网络报文、系统调用、资源使用详情信息,同时从 master 获取容器关联信息。(如图 5 所示)
负载业务间的网络信息采集:eBPF 探针采集不同网络环境下的网络通信报文等数据,以支持分析并展示负载间网络通信关系链与通信情况,包括带宽、TPS、平均响应时间、建联失败率、错误率等。
负载的系统调用与资源监控的采集:高资源消耗系统调用、异常卡死系统调用;用户态与内核态资源使用情况的采集与展示,例如 cpu、内存、磁盘 io、半连接数、全连接数、页错误、文件句柄使用量、SWAP 内存使用量、inodes 使用量及可用量等。
负载的容器元数据采集:eBPF 探针通过集群 master 获取集群以及容器元数据信息,对相关数据进行过滤、填充、采集、收集。
图5 内核态指标采集
接收 eBPF 探针采集的指标数据,采用分类聚合算法与 Kubernetes 元数据进行关联分析、聚合存储,形成完整的节点间调用网络拓扑关系数据,同时为规则匹配报警提供支撑(如图 6 所示)。
图6 网络调用分析
基于内核态指标采集和节点间调用网络拓扑分析的入库数据,构建面向用户的可观测图谱,具备丰富的系统调用指标及网络性能指标关联查询能力,面向一线问题支持人员和开发人员,提供了以下常见应用场景:
在当前分布式服务的架构下,发生问题后进行分析定位是一个非常复杂的过程,不仅要求问题分析人员对全局应用有大致了解,还需熟知各个应用的特性、调用关系、部署方式。而应用拓扑感知(如图 7 所示)则提供了一个非常强大的功能:通过无侵入式采集的数据建立节点间全局的调用拓扑关系,在异常应用定位时,可以让问题一线人员非常快速的感知存在网络问题的节点。
图7 全局应用拓扑感知
区别于传统的分布式追踪,基于 eBPF 的链路追踪不止能跟踪某次调用,还具有无入侵、语言框架无关的特性,请求如果包含了分布式追踪 TraceID,也能自动识别,方便联动分布式监控平台进行排查。对某次请求来说,可以精确看到接收、处理、回应、耗时的数据,方便问题排查人员从问题节点定位到问题接口,从而进一步辅助问题的解决。(如图 8 所示)。
图8 单次请求信息
通过监测 HTTP 请求、平均响应时间、建链失败率、全连接半连接队列等网络指标辅助定位节点及链路访问连通性或性能问题。(如图 9 所示)。
图9 网络性能监测
黄金指标是谷歌针对大量分布式监控实践的经验总结,4 个黄金指标可以在服务级别帮助衡量终端用户体验、服务终端、业务影响层面的问题。可观测平台层支持请求数、响应时间、错误率、慢调用情况,整体反映应用健康状态,快速评估故障影响,节约故障定位时间(如图 10 所示)。
图10 黄金指标-平均响应时间
在现有的云原生环境中,应用间的拓扑非常复杂,除了提供全局的拓扑感知,快速定位问题节点后,对于问题分析人员来说,如何在具体问题节点尽可能收集更多的信息变成了关键所在。可观测平台不仅可以高亮显示问题节点的上下游(如图 11 所示),还关联了告警信息、黄金指标、Kubernetes 元信息等,在一个页面就可以提供问题分析人员多维度的展示,有助于加速问题排查。
图11 高亮显示上下游
对于一个可观测平台来说,及时可靠的告警是发现问题“第一现场”最重要的功能,平台提供了预设模板的告警规则设定,支持通过选择告警检测对象、配置触发条件、设置告警内容和通知人员三步设置。告警检测方面,平台支持 Pod、节点、组件、工作负载、应用等五层丰富指标的告警,同时支持通过对指标进行逻辑运算来完成告警配置。告警规则配置方面,平台已经预设了模板,用自然化语言的方式,方便监控人员个性化的配置。最终经过压缩上报,精细化告警发送,减少一线处理人员的告警处理数量。
中国工商银行将继续深入推进 eBPF 技术研究工作,积极探索云原生可观测性最佳实践,将云原生可观测图谱打造成为开发及运维人员面对系统异常时进行问题定位、分析、系统调优的首选工具。随着 eBPF 技术的应用场景被不断挖掘,业界涌现的各类开源产品已经覆盖安全、网络、跟踪与性能分析、观测与监控等领域。中国工商银行将持续关注业界 eBPF 技术及开源社区发展动态,进一步拓展 eBPF 技术在其它领域的能力并挖掘行内的落地场景。
超融合数据库到底应该怎么理解?新能源、智能制造等产业的数据库应⽤现状是什么?10 月 20 日 20:00-21:30,《InfoQ 极客有约》邀请到了 YMatrix CEO & 创始人 姚延栋,一起聊聊数据库的过去、现在与未来。
微信扫码关注该文公众号作者