中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践

admin 2022年10月20日08:16:23评论63 views字数 5106阅读17分1秒阅读模式

作者:中国工商银行金融科技研究院

在互联网金融时代,各大银行业务量呈爆发性增长态势,业务模式更新迭代更加频繁,传统的IT架构越来越无法应对新业务形态所带来的巨大冲击与挑战。云原生相关技术使业务应用呈现微服务众多、多语言开发、多通信协议等典型特征,调用链路日益复杂,监控数据爆发性增长,传统监控方式已无法适应云原生场景。

在这个背景下,中国工商银行积极开展云原生可观测图谱的探索和实践,针对可观测体系中的痛难点,通过深入研究内核新技术,进一步完善云原生技术版图。


一、业界云原生可观测体系痛点


中国工商银行早期基于业界对可观测性“三大支柱”(监控指标(Metrics)、日志(Logging)和链路(Tracing))的定义(如图1所示),建设了云监控、日志中心和全息监控等运维支撑平台,初步构建了可观测体系,支撑云上应用监控报警和分析诊断能力。随着运维架构转型,开发及运维部门对节点网络拓扑、监控指标、故障定位、性能调优等方面提出了更高的要求。为此,中国工商银行对业界云原生可观测性相关前沿技术进行了深入探索与研究。

中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践

图1 可观测三大支柱


云原生基金会的项目全景图(CNCF Landscape)根据项目特点与价值,将提供可观测性能力的项目分为了监控(Monitoring)、追踪(Tracing)、日志(Logging)三类(如图2所示)
中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践

图2 CNCF Landscape


利用这些产品的组合,我们可以比较快速地搭建一个可观测性系统。但是从业界实践来看,这样组装的系统普遍存在两大类痛点:


1)缺乏全局性的系统和网络拓扑关系云原生分布式网络相较于传统网络,应用节点间网络访问过程经过多层的映射转化后,网络拓扑关系更加复杂,传统监控工具链缺乏以容器、虚机、负载均衡器等系统节点为维度的网络调用链路监控拓扑数据,并且未将抓取的网络信息与Kubernetes资源信息结合,无法呈现应用容器间、网络关键组件的网络拓扑,无法形成有效的可观测性图谱。


2)数据采集方式不具备普适性且内核态指标采集能力不足:传统的数据采集方式通常有两种,一是采用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所示)
中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践

图3 eBPF技术初印象

内核模块编程技术和eBPF技术的详细对比(如表1所示):

对比项

内核模块编程技术

eBPF

安全检查

无,容易引入内存泄漏、访问越界、空指针异常等错误,容易导致系统崩溃

eBPF程序加载时会进行强安全校验检查(例如访访问越界检查、限制循环次数、限制访问任意内核空间的内存数据、限制将任意内核空间内存数据暴露给用户等),有效保证内核安全

API稳定性

内核模块与系统有较强绑定关系,可能直接依赖其他模块导出的不稳定函数

拥有相对稳定的APIeBPF helper辅助函数,一次编译各处运行(不强依赖内核版本)

内核开发能力

内核信息采集与修改定制能力极高,几乎不受限

可依附在内核多个子系统的钩子上,支持采集绝大部分内核信息或部分定制内核能力

用户态、内核态数据交换性能

一般为netlink套接字、sysfs(/sys)、sysctl(/proc/sys)或procfs(/proc)等方式,存在较大内存拷贝损耗

支持eBPF map数据结构(用户与内核共享空间),相对高效易用

升级支持

需要自行考虑实现平滑升级

hook的替换过程新旧程序同时可以处理,支持平滑升级,并后续都由新程序接管

表1 内核模块编程技术与eBPF技术对比


由此可见利用eBPF技术进行内核开发相比内核模块编程技术拥有诸多优势,包括更严格的安全检查、更稳定的API、较高的内核开发能力、更优的数据结构与通信性能以及支持平滑升级等。同时,各大互联网公司均采用eBPF技术在可观测方面进行了实践,如阿里云提出了一种立足于容器界面和底层操作系统,向上关联应用性能监测的可观测性解决思路,通过 eBPF 技术无侵入地采集多语言、多网络协议的各项指标,实现了一站式可观测性平台;字节跳动通过内核的eBPF采集机制获取基于连接层面细粒度的内核网络监控指标,为多种运维场景提供支持。
综上,中国工商银行综合考虑技术优势、发展趋势等多个方面,最终选择基于eBPF技术进行内核相关的可观测功能开发,弥补当前网络拓扑和内核资源监控能力的不足,完善云原生场景下的可观测图谱。


三、中国工商银行基于eBPF技术的云原生图谱的实践与应用


在容器化场景下,需要采集的内核数据种类多样,为了更好地通过eBPF提升对系统节点间网络调用和内核资源的云原生监控能力,我们引入了eBPF探针无侵入式地部署在宿主机上采集相关系统调用信息及应用间互访的网络通信报文,通过关联容器元数据信息后进行数据聚合压缩入库,并以此构建以云上拓扑自动发现为入口的可观测图谱,支持以节点系统网络性能指标分析为核心的一体化监控能力。


中国工商银行的可观测图谱可以分为:内核态指标采集、网络拓扑分析、云上可观测图谱三部分(如图4所示):


  • 内核态指标采集:在宿主机部署eBPF探针实时采集云上应用访问数据,结合容器元数据,提供云上应用东西向访问关系的原始数据以及网络通信报文。

  • 网络拓扑分析:负责分析处理节点之间的调用关系,系统调用分析模块则负责处理应用系统调用的分类、聚合与信息关联。

  • 云上可观测图谱:提供面向业务和运维场景的可视化分析能力,以云上拓扑发现为入口提供面向应用和运维场景的可视化分析能力,支持联动全息监控、云监控以及日志中心进行关联分析,形成云原生可观测图谱。


中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践

图4 eBPF可观测图谱架构


1、内核态指标采集


将eBPF探针通过daemonset的形式无侵入式地部署在宿主机上,负责采集容器网络报文、系统调用、资源使用详情信息,同时从master获取容器关联信息。(如图5所示)

① 负载业务间的网络信息采集:eBPF探针采集不同网络环境下的网络通信报文等数据,以支持分析并展示负载间网络通信关系链与通信情况,包括带宽、TPS、平均响应时间、建联失败率、错误率等。
②负载的系统调用与资源监控的采集:高资源消耗系统调用、异常卡死系统调用;用户态与内核态资源使用情况的采集与展示,例如cpu、内存、磁盘io、半连接数、全连接数、页错误、文件句柄使用量、SWAP内存使用量、inodes使用量及可用量等。
③负载的容器元数据采集:eBPF探针通过集群master获取集群以及容器元数据信息,对相关数据进行过滤、填充、采集、收集。


中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践

图5 内核态指标采集


2、网络调用分析


接收eBPF探针采集的指标数据,采用分类聚合算法与Kubernetes元数据进行关联分析、聚合存储,形成完整的节点间调用网络拓扑关系数据,同时为规则匹配报警提供支撑(如图6所示)。
中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践

图6 网络调用分析


3、云上可观测图谱


基于内核态指标采集和节点间调用网络拓扑分析的入库数据,构建面向用户的可观测图谱,具备丰富的系统调用指标及网络性能指标关联查询能力,面向一线问题支持人员和开发人员,提供了以下常见应用场景:


(1)应用拓扑感知

在当前分布式服务的架构下,发生问题后进行分析定位是一个非常复杂的过程,不仅要求问题分析人员对全局应用有大致了解,还需熟知各个应用的特性、调用关系、部署方式。而应用拓扑感知(如图7所示)则提供了一个非常强大的功能:通过无侵入式采集的数据建立节点间全局的调用拓扑关系,在异常应用定位时,可以让问题一线人员非常快速的感知存在网络问题的节点。
中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践

图7 全局应用拓扑感知

(2)链路追踪分析

区别于传统的分布式追踪,基于eBPF的链路追踪不止能跟踪某次调用,还具有无入侵、语言框架无关的特性,请求如果包含了分布式追踪TraceID,也能自动识别,方便联动分布式监控平台进行排查。对某次请求来说,可以精确看到接收、处理、回应、耗时的数据,方便问题排查人员从问题节点定位到问题接口,从而进一步辅助问题的解决。(如图8所示)。
中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践
图8 单次请求信息

(3)网络性能监测

通过监测HTTP请求、平均响应时间、建链失败率、全连接半连接队列等网络指标辅助定位节点及链路访问连通性或性能问题。(如图9所示)。

中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践

图9 网络性能监测

(4)黄金指标分析

黄金指标是谷歌针对大量分布式监控实践的经验总结,4个黄金指标可以在服务级别帮助衡量终端用户体验、服务终端、业务影响层面的问题。可观测平台层支持请求数、响应时间、错误率、慢调用情况,整体反映应用健康状态,快速评估故障影响,节约故障定位时间(如图10所示)。

中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践

图10 黄金指标-平均响应时间

(5)上下游关联分析

在现有的云原生环境中,应用间的拓扑非常复杂,除了提供全局的拓扑感知,快速定位问题节点后,对于问题分析人员来说,如何在具体问题节点尽可能收集更多的信息变成了关键所在。可观测平台不仅可以高亮显示问题节点的上下游(如图11所示),还关联了告警信息、黄金指标、Kubernetes元信息等,在一个页面就可以提供问题分析人员多维度的展示,有助于加速问题排查。

中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践

图11 高亮显示上下游

(6)规则告警与压缩

对于一个可观测平台来说,及时可靠的告警是发现问题“第一现场”最重要的功能,平台提供了预设模板的告警规则设定,支持通过选择告警检测对象、配置触发条件、设置告警内容和通知人员三步设置。告警检测方面,平台支持Pod、节点、组件、工作负载、应用等五层丰富指标的告警,同时支持通过对指标进行逻辑运算来完成告警配置。告警规则配置方面,平台已经预设了模板,用自然化语言的方式,方便监控人员个性化的配置。最终经过压缩上报,精细化告警发送,减少一线处理人员的告警处理数量。


四、未来展望

中国工商银行将继续深入推进eBPF技术研究工作,积极探索云原生可观测性最佳实践,将云原生可观测图谱打造成为开发及运维人员面对系统异常时进行问题定位、分析、系统调优的首选工具。随着eBPF技术的应用场景被不断挖掘,业界涌现的各类开源产品已经覆盖安全、网络、跟踪与性能分析、观测与监控等领域。中国工商银行将持续关注业界eBPF技术及开源社区发展动态,进一步拓展eBPF技术在其它领域的能力并挖掘行内的落地场景。


2022 GopherChina大会报名火热进行中!
扫描下方二维码即可报名参与哦~
中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践

大会合作、现场招聘及企业购票等事宜请联系微信:18516100522

中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践
戳这里 Go !

原文始发于微信公众号(GoCN):中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月20日08:16:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   中国工商银行基于 eBPF 技术的云原生可观测图谱探索与实践https://cn-sec.com/archives/1360338.html

发表评论

匿名网友 填写信息