《基于eBPF的云原生可观测性深度实践-向阳.pdf》由会员分享,可在线阅读,更多相关《基于eBPF的云原生可观测性深度实践-向阳.pdf(40页珍藏版)》请在三个皮匠报告上搜索。
1、基于 eBPF 的云原生可观测性深度实践向阳,研发 VP 云杉网络:eBPF 之上的颠覆性创新,实现高度自动化的可观测性关于清华大学博士,毕业后加入云杉网络,现负责云原生可观测性产品 DeepFlow。2016 年我们发布了企业版第一个 Release,2022 年开源了 DeepFlow 核心(Apache 2.0),同年 7 月发布了社区版第一个 Release。DeepFlow 致力于让云原生开发者实现高度自动化的可观测性,让观测更自动,让开发者更自由!向阳向阳研发研发 VP VP 云杉云杉目录分布式追踪:回顾十四年历史,剖析云原生时代的新痛点AutoTracing:DeepFlow 基
2、于 eBPF 之上的颠覆性创新让追踪无盲点:全栈、全链路,基于创新技术的产品方案展望未来:开源共建,开启高度自动化的可观测性新时代目录分布式追踪分布式追踪:回顾十四年历史回顾十四年历史,剖析云原生时代的新痛点剖析云原生时代的新痛点AutoTracing:DeepFlow 基于 eBPF 之上的颠覆性创新让追踪无盲点:全栈、全链路,基于创新技术的产品方案展望未来:开源共建,开启高度自动化的可观测性新时代分布式追踪/Distributed Tracing分布式追踪的十四年20082022更标准化更自动化覆盖更全云原生时代的痛:插码插不全微服务拆分、大型团队协作,有那么几个语言/框架永远也覆盖不全没
3、有了 Java 字节码增强技术的加持,每一次 SDK 的升级,感觉永远也部署不完云原生时代的痛:链路追不全业务代码 框架/库调用 系统调用 服务网格 sidecar 容器网络 iptables/ipvs 虚机网络 ovs/linuxbr 网关、数据库快速迭代的软件相对稳定的硬件软件定义一切高速迭代的软件追踪盲点目录分布式追踪:回顾十四年历史,剖析云原生时代的新痛点AutoTracing:DeepFlow 基于基于 eBPF 之上的颠覆性创新之上的颠覆性创新让追踪无盲点:全栈、全链路,基于创新技术的产品方案展望未来:开源共建,开启高度自动化的可观测性新时代这会是一项创新吗?Istio Booki
4、nfo 零插码追踪 DemoJaeger 追踪的怎样单击此处添加文本DeepFlow AutoTracing:零插码、全栈感受 DeepFlow 的 AutoTracing1.零插码:且无需向 HTTP 头注入 TraceID 或 SpanID2.全链路:4 个调用、38 个 Span,分为 24 eBPF Span+14 BPF Span3.多语言:Java、Python、Ruby、Node.js 及 C/C+(curl/envoy)4.全栈:追踪两个微服务之间的网络路径,从 Pod 到 Node 到 KVM,IPIP、VXLAN、5.全栈:追踪微服务内从 Envoy Ingress 服务
5、DNS Envoy Egress 全过程案例:某互联网客户,使用 DeepFlow 5 分钟内定位客户端慢服务端不慢的经典扯皮问题。业务开发团队服务网格团队容器运维团队云运维团队Curl(C)Envoy(C+)ProductPage(Python)Details(Ruby)Reviews(Java)Ratings(Node.js)Ingress Envoy(Recv)Ingress Envoy(Send)应用进程(Recv)应用进程(Send)Egress Envoy(Recv)Egress Envoy(Send)IPIP/VXLAN无需插码快速定界DNS LookupEnvoy(C+)Env
6、oy(C+)客户端应用进程客户端 Pod 网卡客户端 Node 网卡服务端 Node 网卡服务端 Pod 网卡服务端应用进程=云网络消耗AutoTracing 背后的关键洞察KernelThreadingKernel Thread:User Thread=1:1使用 Thread ID 关联同一个 Trace 在一个服务实例上的多个请求HybridThreadingCoroutine(Erlang,Golang)Service ASVC BSVC CClient相同相同Thread ID理想情况Service A(线程#1)SVC BSVC CClientClientSVC BSVC Ctim
7、eClientSVC BSVC C使用 Thread ID 切分 TraceService A(线程#2)Service A(线程#N)挑战一:如何处理线程复用Service A(Thread#X)SVC BSVC CClientClientSVC BSVC CtimeClientSVC BSVC C使用时间切分 TraceSVC B挑战二:如何处理非阻塞 IOService AClienttime计算不会触发调度,IO 触发调度利用时序关联“相邻”的两个调用利用流聚合关联同一个调用的请求和响应不调度聚合请求与响应SVC C举一个实际的例子ClientServiceAServiceAServi
8、ceBServiceAServiceCServiceAServiceD根据根据 syscall 时序追踪时序追踪根据根据 session 匹配追踪匹配追踪挑战三:如何处理跨线程(协程)SVC BService AClienttimeSVC C协程 1协程 4协程 2协程 6协程 3协程 5协程 7协程 8协程 9协程染色构造虚拟“线程”挑战四:如何处理跨线程(队列)Nginx/HAProxy/Envoy/SLB/Clienttime网关生成随机 X-Requst-ID 并注入到 Real Server 的请求,到 Client 的响应Real ServerXRID=1XRID=1流还原流还原挑
9、战五:如何追踪一个调用业务代码 框架/库调用 系统调用 服务网格 sidecar 容器网络 iptables/ipvs 虚机网络 ovs/linuxbr 网关、数据库TCP.SEQ挑战六:如何追踪 HTTPS 调用挑战七:如何查询 TraceNet SpanNet SpanSys SpanSys SpanSyscall TraceIDX-Request-IDTCP SEQX-Request-IDfor Span 里没有TraceID、SpanID目录分布式追踪:回顾十四年历史,剖析云原生时代的新痛点AutoTracing:DeepFlow 基于 eBPF 之上的颠覆性创新让追踪无盲点让追踪无盲
10、点:全栈全栈、全链路全链路,基于创新技术的产品方案基于创新技术的产品方案展望未来:开源共建,开启高度自动化的可观测性新时代让追踪无盲点业务代码 Span 盲点:基础设施服务:基础设施服务:APIGW、NLB/ALB、KVM/K8s、DB、DNS、Log、插码不完全:插码不完全:新语言、新框架、不同团队方案不一系统和网络 Span 盲点:应用内部应用内部:进程内函数之间的调用链业务逻辑业务逻辑:部分跨线程请求场景、异步 IO 场景DeepFlow 的追踪数据集成、关联能力无盲点追踪一个 Spring Boot 应用OpenTelemetry+Jaeger 追踪结果如何46 SpansDeepFl
11、ow 无盲点追踪感受 DeepFlow 无盲点追踪1.全链路:追踪到了 96 个 Span:46 个 OTel Span、20 个 eBPF Span、30 个 BPF Span2.全栈:支持追踪两个微服务之间的网络路径,即使有隧道3.全链路:对 OTel 无插码的服务(loadgenerator,C),通过 eBPF 自动追踪补齐4.全链路:对 OTel 无法插码的服务(MySQL,autocommit),通过 eBPF 自动追踪补齐5.无盲点:eBPF 和 BPF Span 穿插在 OTel Span 之间,让追踪无盲点案例:某互联网客户,使用 DeepFlow 5 分钟内定位应用慢 DB
12、A 找不到慢日志的经典扯皮问题。SQL#1SQL#2SQL#3MySQL eBPF Span事务开始事务结束客户端等待客户端等待MySQL eBPF Spanlocust(无插码)业务开发团队服务网格团队容器运维团队云运维团队团队协作框架开发团队DBA 团队客户端应用进程客户端 Pod 网卡客户端 Node 网卡服务端 Node 网卡服务端 Pod 网卡=客户端消耗客户端业务代码客户端框架代码服务端应用进程服务端业务代码mysql(无法插码)如何查询完整的 TraceApp SpanApp SpanNet SpanNet SpanSys SpanSys SpanTraceID,SpanIDSy
13、scall TraceIDX-Request-IDTCP SEQX-Request-IDfor 目录分布式追踪:回顾十四年历史,剖析云原生时代的新痛点AutoTracing:DeepFlow 基于 eBPF 之上的颠覆性创新让追踪无盲点:全栈、全链路,基于创新技术的产品方案展望未来展望未来:开源共建开源共建,开启高度自动化的可观测性新时代开启高度自动化的可观测性新时代DeepFlow:高度自动化的可观测性平台让观测更自动,让开发者更自由Apache 2.0CNCF Cloud Native Landscape ProjecteBPF Landscape P Kernel 2.6+Pod/进程粒
14、度的应用访问拓扑穿透 L4 网关、还原 NAT关联资源、服务、业务自定义 Tag关联应用、系统、网络全栈指标不插码,你真的知道谁在访问你吗?某互联网客户,使用 DeepFlow 5 分钟内从数万个 Pod 中定位 RDS 访问量最大的Pod、服务、团队。即便插码,你真的知道你在访问谁吗?某银行客户,信用卡核心业务上线受阻,使用 DeepFlow 5 分钟内发现两个服务之间 API 网关是性能瓶颈,检查配置后发现缓存设置不合理。建连时延客户端等待时延系统时延应用时延磁盘 IO、重传、AutoTagging+SmartEncoding高性能的数据标签自动注入机制DeepFlow 的演进事件协议插件文件读写RPC、MQDB、WASMLUAAIO跨线程AutoTracing:eBPF 之上的颠覆性创新,实现高度自动化的可观测性AutoTracing、Universal Application TopologyDeepFlow 开源社区微信群