一、云原生技术发展的背景与问题
当前,云原生技术主要是以容器技术为基础围绕着 Kubernetes的标准化技术生态,通过标准可扩展的调度、网络、存储、容器运行时接口来提供基础设施,同时通过标准可扩展的声明式资源和控制器来提供运维能力。两层标准化推进了细化的社会分工,各领域进一步提升规模化和专业化,全面达到成本、效率、稳定性的优化。
在这样的背景下,大量公司都使用云原生技术来开发和运维应用。正因为云原生技术带来了更多可能性,当前业务应用出现了微服务众多、多语言开发、多通信协议的特征,同时云原生技术本身将复杂度下移,给可观测性带来了许多挑战。
1.复杂微服务架构的挑战
难以获得系统的整体动态拓扑,难以确定特定服务的上下游服务质量。
2.多语⾔的挑战
传统可观测⽅法需要对不同语⾔使⽤不同的⽅法进行可观测。不同语⾔需要不同埋点⽅法,甚⾄有的语⾔没有现成的埋点⽅法,埋点对应⽤性能影响⽆法简单评估。
3.多通信协议的挑战
基础设施(Kafka, MySQL, Redis等)、微服务套件(Spring, gRPC, Bubbo等)采用了不同的通信协议。传统可观测⽅法通常是在应⽤层特定通信接⼝进⾏埋点。埋点⽅法多种多样,有的通信协议没有现成的埋点⽅法,同理埋点对应⽤性能影响⽆法简单评估。
二、解决方案
通常与可观测性相关联紧密的数据便是“指标”、“⽇志”和“链路追踪”。然⽽,这些数据源中的每⼀项都有不同的收集⽅法。除此,针对这些数据项进行采集可能需要多种不同的产品和代理。
eBPF可以以⼀种⾮侵⼊性、安全且跨系统⼀致的⽅式收集遥测数据以实现可观测性,并且对当前系统性能和资源使⽤影响⼩。
三、什么是eBPF?
eBPF 是⼀种⽆需更改Linux内核代码,便能让程序在内核中运⾏的技术。开发者可以通过执⾏eBPF程序,给运⾏中的操作系统添加额外的能⼒。这催⽣了很多基于eBPF 的项⽬,涵盖了⼴泛⽤例,包括云原⽣⽹络、安全和可观测性。
例如:当下正流⾏的 Cilium ,是基于eBPF 实现数据转发的 CNI ⽹络插件;
Falco 是CNCF 开源孵化的运⾏时安全⼯具,专⻔为 Kubernetes 、Linux 和云原⽣构建;
Pixie 使⽤ eBPF ⾃动收集遥测数据,也已开源应⽤,并进⼊了 CNCF 沙箱的可观测项⽬;同时⼀些服务⽹格产品也在探索使⽤ eBPF。
四、eBPF与可观测性的关系
传统意义上的观测性,是指在外部洞悉应⽤程序运⾏状况的能⼒。⽽ eBPF 是⼀种无需入侵应用代码,直接⾯向操作系统内核层添加黑盒代码的⾰命性技术。这种查看内核中的操作,却不会 “⼲扰” 应⽤程序或内核本身的技术,从⽽使得 eBPF 获得可观测性强⼤能⼒。
因此使⽤ eBPF,即使不依赖操作系统公开的固定指标,我们也能直接从内核中收集和聚合⾃定义指标,并根据各种可能性来源,⽣成可⻅性事件。通过这种⽅式,我们将可见性扩展到内核,甚⾄可以通过仅收集所需的可见性数据,实现整体系统开销的降低。
eBPF 与其他收集遥测数据的⼿段相⽐,有以下优点:
1.低侵入性:它不需要业务系统埋点,也不修改内核源代码,从⽽减⼩了监测系统与业务系统、内核之间的耦合。
2.安全:它不会改变任何内核源代码。eBPF 程序在转换为字节码后会经过验证阶段以防⽌资源泄漏、⽆限循环等意外情况。它运⾏在沙盒环境以访问有限的内核辅助函数。
3.方便:与任何其他 Linux 监控替代⽅案相⽐,您可以获得更精细的细节和内核上下⽂。还可以⾃由导出监控数据并将其摄取到第三⽅可视化⼯具中。
五、基于 eBPF 技术的可观测方案实践
实践一:主机、服务、POD 级别的动态⽹络性能监控
在每个被监测 kubernetes 节点上都部署⼀个探针,这个探针通过 hook 内核的 accept, connect, send, recv 等L4(TCP、UDP)相关的系统调⽤,可以获取进程与绑定地址的关系、通信双⽅的地址、各连接收发的流量统计(字节数、RTT等)。
探针会去获取当前 k8s 集群的 metadata 数据(pid, container, pod, service, node等)并把它们保存在内存中,⽤来实现原始 eBPF 数据的丰富。
服务端在收集到通信双⽅的 ebpf 数据后可以进一步丰富数据,例如将对端 ip:port 对应的k8s metadata 丰富到本端 ebpf 数据中,并存⼊数据库。查询时,根据指定的时间范围、主机/服务/pod等筛选条件查询数据库,从⽽构造出该时段的各级别的动态拓扑图。
实践二:微服务监控
探针在 hook 点获得⽹络报⽂之后,可以进一步解析 L7 内容,包括 HTTP、HTTPS、gRPC 等。探针将微服务的各个会话(⼀次请求和响应)的 URL、latency、错误码关联到 ip:port 或者特定 pid。探针定期将会话聚合信息推送到服务端进一步丰富数据。如此可以构造出特定时段的微服务的动态拓扑图、服务质量⻩⾦指标等。
实践三:Profiling
借助 eBPF 可以获得系统级别或者特定进程的 oncpu 和 offcpu 事件。oncpu 是指定时采样(⼀般100Hz),⽤于分析程序的 cpu 热点,为减少占⽤ CPU 指明⽅向。offcpu 是指内核调度线程的事件,⽤于分析线程由于锁、IO等原因被剥夺 CPU,为充分利⽤ CPU、减少锁抢占指明⽅向。
基于 oncpu 事件可以绘制⽕焰图,直观地展示各个调⽤栈所占时间⽐例。
六、结论
eBPF 是⼀个令⼈印象深刻的可观测性⼯具,与传统的可观测性解决⽅案相⽐,它可以提供更深⼊的洞察⼒。
其收集整个系统遥测数据的安全、⾮侵⼊性等优势是过去没有许多产品、应⽤程序级代理和⾮常复杂的操作所⽆法获得的。eBPF 正在发展成为可观测性的标准基础。
擎创科技,Gartner连续推荐的AIOps领域标杆供应商。公司致力于协助企业客户提升对运维数据的洞见能力,优化运维效率,充分体现科技运维对业务运营的影响力。
行业龙头客户的共同选择
了解更多运维干货与技术分享
可以右上角一键关注
我们是深耕智能运维领域近十年的
连续多年获Gartner推荐的AIOps标杆供应商
下期我们不见不散