【华为云Stack】【大架光临】第22期:华为云Stack基于eBPF的无侵入可观测实践
1 背景
在云原生与混合云架构成为主流的今天,可观测性已成为保障系统稳定性和业务连续性的核心支柱。随着微服务、容器化和无服务器技术的普及,传统监控手段难以应对动态分布式环境的复杂性。客户不仅需要实时感知应用性能、资源利用率和故障根因,更期望通过指标(Metrics)、追踪(Traces)和日志(Logs)的融合分析实现主动运维、成本优化及体验提升。可观测性平台能帮助企业打破数据孤岛,快速定位跨云服务链路的瓶颈,将运维响应从“事后补救”转向“事前预测”,直接支撑数字化转型中的敏捷迭代与SLA承诺兑现。
华为云Stack(简称HCS)管控面和数据面要实施可观测方案,面临如下问题与挑战:
-
非侵入&可实施:HCS有数千个现网客户,可观测方案需要与被观测的管控组件或业务网元解耦,可单独部署,侵入式方案要求同时升级管理或业务网元,难以在现网落地;
-
业务无感:观测方案不能对被观测业务本身性能、可靠性有影响;
-
观测需全面:观测方案不仅能观测到应用层流指标,还要观测TCP/UDP链路丢包、重传、Reset等指标,以便快速进行问题定界/定位;
-
网络极其复杂:云平台管控面和数据面视角下,物理网络、虚拟网络、K8S集群网络并存,数据流向复杂多变,治理难度大;NAT场景、L7负载均衡等带来流跟踪割裂问题;
-
HCS版本多:经过多年发展,现网有10+版本,多个OS和Linux内核版本,可观测方案要有良好的兼容性;
-
大规模&高并发:HCS单region虚机规模庞大,存在APIGateway、ELB、NATGW等高并发服务,产生大量观测数据,对观测本身的开销是一个很大的挑战。
2 基于eBPF的无侵入可观测技术
传统的可观测技术存在着侵入式、观测不完整、技术栈不统一等诸多问题。基于eBPF的可观测方案,由于其无侵入、高性能、安全的特点,毫无疑问使它成为可观测产品提供商的技术根基。eBPF不仅仅能提供4~7层流量的采集能力,还可以构建全链路拓扑服务,孵化性能监控平台,增强云平台运维问题根因分析能力等。
基于eBPF的可观测方案与传统技术方案对比:
eBPF可观测方案技术特征:
- 零代码修改:传统技术方案提供各类编程语言的SDK,被观测业务需要基于SDK在业务代码中插装实现数据采集,侵入式的采集方式导致落地困难。而基于eBPF的可观测技术,通过Linux内核的插装能力和uProbe技术实现无侵入插装,与编程语言无关,且无需修改业务修改代码;
- 零侵扰部署:eBPF可观测技术方案不仅在开发态无感(零代码修改),运行态也不需要业务感知,部署后即启用,无需重启业务进程;
- 高性能&低开销:通过JIT编译和内核态执行减少用户态-内核态上下文切换,实现底层数据高效采集;
- 安全稳定:内置验证器(Verifier)确保程序不会导致内核崩溃或安全漏洞;沙盒机制隔离eBPF程序运行环境,避免非法内存访问。
3 华为云Stack可观测实践
3.1 整体方案
华为云Stack采用基于eBPF的Gala-Gopher开源组件,实现无侵入链路和指标数据采集,结合NAT穿越能力、Sermant探针、CO-RE等技术实现业界领先的可观测方案。该方案通过eBPF采集的数据自动构建服务/进程间的依赖关系,实现HCS管控面和数据面服务间依赖关系和通信矩阵的快速治理;结合指标数据快速感知潜在或已发生的问题,提升告警根因分析准确度,实现管控面和数据面高效运维,例如通过对ELB应用流进行实时监控,实现ELB问题的快速定界,并辅助快速定位。
Agent侧无侵入数据采集:
- 采用Gala-Gopher,基于eBPF实现无侵入数据采集;
- 在linux内核挂载TC/Socket/Syscall/IPVS/Netfilter等eBPF探针,实现经过内核协议栈的网络链路和网络指标采集,开发语言无关,普适性强;
- 通过eBPF uProbe实现加密场景、DPDK等用户空间网络流和指标采集;
- 通过Sermant补充JAVA应用场景应用流和指标采集。
可观测应用:
- 基于链路的拓扑服务:通过链路数据构建微服务/进程间的依赖拓扑,精准还原告警传播链,辅助进行告警根因分析,辅助通信矩阵校验;
- 基于指标的网络诊断:通过指标数据监控网络链路质量,进行精准的网络质量实时诊断,例如ELB应用流监控。
注:Gala-Gopher是openEuler社区开源的一款采集组件是一款结合eBPF、Java agent等非侵入可观测技术的观测平台,探针是Gala-Gopher用于观测和采集数据的主要工具,通过探针式架构Gala-Gopher可以轻松实现增加、减少探针。更多内容可参考 https://gitee.com/openeuler/gala-gopher。
3.2 NAT/代理场景链路还原
云网络场景存在着大量K8S集群service访问、L4LB、L7LB、NATGW、APIGW等NAT场景,客户端感知的目标IP不一定是真实的服务端IP,而服务端感知的源IP也不一定是真实的客户端IP,因而需要通过特别的处理来还原服务间的访问关系,以便准确地确定服务间的依赖关系。
华为云Stack通过TCP Options注入, 实现各类容器网络、NAT网关、代理的穿越,真实还原数据链路;
- ≥5.10内核时,采用eBPF Sockops随包注入TCP Options;
- <5.10内核时,采用eBPF TC Clone数据包,并注入TCP Optons;
- 七层代理场景,通过TOA识别和注入实现转发跟踪。
3.3 eBPF采集短板及补充方案
面对加密场景和Java这类解释执行的应用程序,eBPF需要通过uProbe来实现数据的采集,但其存在场景覆盖不全、对业务影响大等局限性。例如:
- JSSE提供两种SSL加解密库函数,其中SSLEngine仅提供加解密“工具”,在JSSE中并不维护Socket本身信息,即便使用uProbe也无法通过eBPF获取链路信息;
- Java应用场景下gRPC、Dubbo3.0等多种L7应用层指标采集受限、且uProbe程序的执行需要陷入内核,增加业务处理时延…
HCS可观测方案引入Sermant解决eBPF在Java场景下的能力不足问题。Sermant是由华为云开源,在CNCF孵化的基于Java字节码增强技术的云原生无代理服务网格,可用于的Java程序数据采集,详细参考https://sermant.io/zh/。
在Gala-Gopher框架下扩展Sermant探针:
3.4 CO-RE/chroot技术提升OS兼容性
eBPF程序依赖于Linux内核的支持,不同的内核版本eBPF能力不同,同时采集组件用户态程序也依赖libbpf/glibc等组件,这些组件对不同OS版本的支持也不统一,因而eBPF无侵入采集对OS的兼容性是一大挑战。
HCS通过eBPF的CO-RE技术实现“Compile once, run everywhere”;通过chroot实现轻量容器,隔离Agent运行环境,提升对OS的兼容能力:
① CO-RE技术 ② Chroot技术
3.5 极致性能
考虑成本、可靠性等因素,在保证数据完整有效的情况下,数据采集、处理、存储的资源开销越小越好,而且需要对被观测业务无影响。HCS通过按需采集、自适应采样率、压缩传输、标签编码存储等手段,尽可能降低资源开销和对业务的影响:
优化效果:
- 采集数据存储空间需求降低到1/3;
- 采集数据上传的传输带宽降低到1/15;
- Agent对被观测业务时延、吞吐等无影响;
- Agent极小基础开销:CPU单核占用<1%, 内存占用<50M;
- 网关类大流量观测场景Agent 占用管理面资源,CPU开销是业务所占CPU的10%以内。
4 技术方案效果
方案第一阶段实施效果:
- HCS管控面核心云服务拓扑准确率达成99%;
- HCS云服务通信矩阵测试效率提升: 1周->1天/云服务;
- ELB应用流跟踪,提升问题定位/解决效率:
序号 |
问题 |
原因 |
eBPF实现ELB应用流采集 |
① |
客户通过7层ELB压测,三万条有几十条报错 |
【后端业务问题】 后端超时配置错误导致回复Reset报文。 |
取代抓包,偶现故障精准定位: eBPF可以采集到Socket数据中的Reset报文,拓扑上指标可直接体现后端业务异常,同时可生成系统告警。 |
② |
APIC 服务异常,客户反馈影响某实时交易的业务 |
【ELB数据面问题】Nginx进程单核卡死 |
关键指标波动回溯查询: 采集进程CPU占用率可知Nginx进程异常; Nginx和后端服务的数据量减小,时延增大。 |
③ |
客户某业务经过ELB达不到性能要求 |
【ELB性能问题】 后端服务器抓包判断ELB负载合理,最终原因是服务经过云外带宽受限 |
流量分布快速理清: 拓扑可以直接体现Nginx和后端服务器的连接情况和数据量,判断负载均衡是否合理。 |
应用流拓扑图+指标监控
应用流直方图指标监控:
5 总结
通过eBPF采集的数据自动构建服务/进程间的依赖关系,实现HCS管控面和数据面服务间依赖关系和通信矩阵的快速治理;结合指标数据快速感知潜在或已发生的问题,提升告警根因分析准确度,实现管控面和ELB应用流的高效运维。由于eBPF方案在无侵入、代码无关、全栈观测的特点,使其成为HCS这类政企云平台商业软件的更优选择。
- 点赞
- 收藏
- 关注作者
评论(0)