《向阳-使用 eBPF 零代码修改绘制全景应用拓扑.pdf》由会员分享,可在线阅读,更多相关《向阳-使用 eBPF 零代码修改绘制全景应用拓扑.pdf(47页珍藏版)》请在三个皮匠报告上搜索。
1、使用使用 eBPF 零代码修改绘制全景应用拓扑零代码修改绘制全景应用拓扑向阳(云杉网络研发 VP)内容目录内容目录1 1、如何、如何得到一个全景应用得到一个全景应用拓扑拓扑2、利用 eBPF 零侵扰计算全景应用拓扑3、利用 eBPF 自动关联服务和资源标签4、Demo:持续观测全链路压测性能瓶颈如何得到一个应用拓扑如何得到一个应用拓扑serviceinstancerequest如何得到一个应用拓扑:改代码如何得到一个应用拓扑:改代码instrumentationspan如何得到一个应用拓扑:如何得到一个应用拓扑:难升级难升级instrumentationspan如何得到一个应用拓扑:上网格如何
2、得到一个应用拓扑:上网格meshinstrumentation如何得到一个应用拓扑:如何得到一个应用拓扑:看不全看不全mesh(HTTP/S,gRPC)kafkainstrumentation如何得到一个应用拓扑:如何得到一个应用拓扑:Infra Infra 盲点盲点kafkagatewaynetworkIPVS如何得到一个如何得到一个全景全景应用拓扑应用拓扑NO CODE CHANGENO CONFIG CHANGENO RESTARTANY LANGUAGEFULL STACKUniversal Application TopologyDeepFlow:Observability with
3、 AutomationDeepFlow:Observability with AutomationDeepFlow DeepFlow 中中如何生成全景应用拓扑如何生成全景应用拓扑00000110101HTTPHTTP2HTTPSgRPCDubboSOFAMySQLPostgresRedisKafkaMQTTDNS.指标计算调用聚合调用关联协议解析RequestErrorDelayTCP CPSTCP RetransTCP Delay.IO Latency.原始数据全景应用拓扑全景应用拓扑分布式追踪标签注入PIDServiceIn
4、stancePodNSClusterHostVPCAZRegion.3-AutoTagging2-AutoTracing内容目录内容目录1、如何得到一个全景应用拓扑2 2、利用利用 eBPF eBPF 零侵扰计算全景应用零侵扰计算全景应用拓扑拓扑3、利用 eBPF 自动关联服务和资源标签4、Demo:持续观测全链路压测性能瓶颈全景应用拓扑,全景应用拓扑,Universal Application TopologyUniversal Application Topology面临面临的技术的技术挑战挑战如何获取原始数据如何解析应用协议如何计算性能指标如何适配低版内核如何获取原始数据:如何获取原始数
5、据:eBPF+cBPFeBPF+cBPFcBPF原 始 数 据协 议 解 析性 能 指 标低 版 内 核如何获取原始数据:如何获取原始数据:eBPF ProbeseBPF Probeskprobes:_sys_sendmsg_sys_sendmmsg_sys_recvmsg_sys_recvmmsgdo_writevdo_readvtracepoints:tracepoint/syscalls/sys_enter_writetracepoint/syscalls/sys_exit_writetracepoint/syscalls/sys_enter_readtracepoint/syscall
6、s/sys_exit_readtracepoint/syscalls/sys_enter_sendtotracepoint/syscalls/sys_exit_sendtotracepoint/syscalls/sys_enter_recvfromtracepoint/syscalls/sys_exit_recvfromtracepoint/syscalls/sys_exit_sendmsgtracepoint/syscalls/sys_exit_sendmmsgtracepoint/syscalls/sys_exit_recvmsgtracepoint/syscalls/sys_exit_r
7、ecvmmsgtracepoint/syscalls/sys_exit_writevtracepoint/syscalls/sys_exit_readvtracepoint/syscalls/sys_enter_closetracepoint/syscalls/sys_enter_getppidtracepoint/syscalls/sys_exit_sockettracepoint/sched/sched_process_forktracepoint/sched/sched_process_exituprobes:base runtime.casgstatus(for golang)runt
8、ime.newproc1(for golang)HTTP2 net/http.(*http2serverConn).writeHeaders golang.org/x/net/http2.(*serverConn).writeHeaders net/http.(*http2serverConn).processHeaders golang.org/x/net/http2.(*serverConn).processHeaders net/http.(*http2clientConnReadLoop).handleResponse golang.org/x/net/http2.(*clientCo
9、nnReadLoop).handleResponse net/http.(*http2ClientConn).writeHeader net/http.(*http2ClientConn).writeHeaders golang.org/x/net/http2.(*ClientConn).writeHeader golang.org/x/net/http2.(*ClientConn).writeHeadersgRPC google.golang.org/grpc/internal/transport.(*loopyWriter).writeHeader google.golang.org/gr
10、pc/internal/transport.(*http2Client).operateHeaders google.golang.org/grpc/internal/transport.(*http2Server).operateHeadersTLS/SSL crypto/tls.(*Conn).Write crypto/tls.(*Conn).Read SSL_write SSL_readhttps:/ 始 数 据协 议 解 析性 能 指 标低 版 内 核如何解析应用协议:如何解析应用协议:用合适的采集用合适的采集方式方式原 始 数 据协 议 解 析性 能 指 标低 版 内 核压缩协议压缩
11、协议kprobekprobetracepointtracepointuprobeuprobe明文协议明文协议kprobekprobetracepointtracepointcBPFcBPFHTTP1DubboSOFAMySQLPostgresRedisKafkaMQTTDNS.HTTP2gRPC.加密加密协议协议uprobeuprobeTLSSSL.私有私有协议协议WASMWASMLUA LUA*ProtobufThriftJsonXML.datadatadata流重组流重组1 request/response如何解析应用协议:如何解析应用协议:eBPF eBPF WASMWASM原 始 数
12、据协 议 解 析性 能 指 标低 版 内 核计算计算应用性能指标应用性能指标原 始 数 据协 议 解 析性 能 指 标低 版 内 核Request:#req,#respError:#4xx,#5xxDelay:t(resp)-t(req)HTTP 1.0 串行HTTP 1.1 管道HTTP 2 并发ReqRespReqRespReqRespReqRespReq#1Resp#1Req#2Resp#2Req#3Resp#3socket data/packet data=L4 flow=L7 session计算网络性能指标:吞吐、计算网络性能指标:吞吐、异常、时延异常、时延原 始 数 据协 议 解
13、析性 能 指 标低 版 内 核吞吐:吞吐:新建连接活跃连接字节数包数SYN包平均包长.100 个网络性能指标:https:/ Sessoin L7 Sessoin 所在所在 L4 Flow L4 Flow 的:的:计算网络性能指标:计算网络性能指标:全栈时延全栈时延原 始 数 据协 议 解 析性 能 指 标低 版 内 核在基础设施在基础设施全栈路径上观测到的应用和网络全栈路径上观测到的应用和网络时延:时延:客户端进程客户端进程=客户端客户端 Pod=Pod=客户端客户端 Node=Node=客户端客户端 KVM KVM 服务端进程服务端进程=服务端服务端 Pod=Pod=服务端服务端 Node
14、=Node MetascriptPID=MetaIP 对应的元数据对应的元数据5 元组对应的元组对应的 PIDPID 对应的元数据对应的元数据标 签 数 据轮 询 方 案触 发 方 案低 版 内 核?计算客户端、服务端的计算客户端、服务端的 PID PIDdeepflowagentdeepflowserverdeepflowagentdeepflowagentdeepflowserverdeepflowserverlocal view=global view标 签 数 据轮 询 方 案触 发 方 案低 版 内 核srcip,srcport,dstip,dstport=srcpid,dstpid
15、轮询轮询/proc/pid/net/tcp,udp如何穿越如何穿越LVS NATLVS NATdeepflowagentclientLVSreal serverclient ip=lvs viplvs rip=rs ipdeepflowagentIPTCPPayloadTLV(6B)IPPortTOA:TCP Option Addressclient ip?标 签 数 据轮 询 方 案触 发 方 案低 版 内 核如何穿越如何穿越LVS NATLVS NATdeepflowagentdeepflowserverclientLVSreal serverclient ip=lvs viplvs ri
16、p=rs ipdeepflowagentCMDBlvs vip:vport=rs ip:portlvs rip=rs ip:portclient ip:cport=rs ip:port(TOA)client ip:cport=lvs vip:vportclient ip:cport=rs ip:port标 签 数 据轮 询 方 案触 发 方 案低 版 内 核触发式,解决短连接和任意触发式,解决短连接和任意 NAT NAT 场景场景deepflowagentclientLVSreal serverclient ip=lvs viplvs rip=rs ipdeepflowagentTOT:TCP
17、 Option Tracinginspired by TOAclient port=pidIPTCPPayloadTLV(8B)IPclient ipPIDclient pidIPTCPPayloadTLV(8B)IPclient ipPIDclient pid标 签 数 据轮 询 方 案触 发 方 案低 版 内 核eBPF Probe eBPF Probe 注入注入 TCP Option TCP Option标 签 数 据轮 询 方 案触 发 方 案低 版 内 核https:/ 哪些函数:bpf_store_hdr_opt:填写 TCP Optionbpf_sock_ops_cb_flags
18、_set:设置 Flagbpf_reserve_hdr_opt:预留 TCP Optiontp/raw_syscalls/sys_enter:关联 PIDtp/raw_syscalls/sys_exit注入到哪些 Packet:TCP SYNTCP SYN-ACKTCP PSH(sampling)长连接心跳tracepoint如何适配低版本如何适配低版本内核内核LOC:227标 签 数 据轮 询 方 案触 发 方 案低 版 内 核https:/ HostNet Pod HostNet PodSNATSNATDNATDNATFULLNAT w/TOAFULLNAT w/TOA长连接长连接Host
19、Net PodHostNet PodHost PorcessHost PorcessAny NATAny NAT短连接短连接标 签 数 据轮 询 方 案触 发 方 案低 版 内 核/proc/pid/net/内容目录内容目录1、常规应用性能采集手段面临的问题2、利用 eBPF 零侵扰计算全景应用拓扑3、利用 eBPF 自动关联服务和资源标签4 4、DemoDemo:持续观测全链路压测性能瓶颈:持续观测全链路压测性能瓶颈对对 OTel OTel 电商电商 Demo Demo 的全链路的全链路压测压测零代码修改,零配置修改,零零代码修改,零配置修改,零重启重启1.5K Requests/Secon
20、d1.5K Requests/Second,15s15s,压力一目了然压力一目了然一路一路往下捋,定位主要瓶颈往下捋,定位主要瓶颈 ProductCatalog ProductCatalog扩容扩容 ProductCatalog ProductCatalog*2 2,Frontend Frontend 时延时延/2/2扩容扩容 ProductCatalog ProductCatalog*4 4,Frontend Frontend 时延时延/4/4扩容扩容 ProductCatalog ProductCatalog*8 8,Frontend Frontend 时延时延/8/8Demo Demo
21、不够劲?来点实在不够劲?来点实在的!的!某造车新势力客户,使用 DeepFlow 从数万 Pod 中在 5 分钟内定位 RDS 访问量最大的 Pod、所属服务、负责该服务的团队。某股份制银行客户,信用卡核心业务上线受阻,压测性能上不去,使用 DeepFlow 在5 分钟内发现两个服务之间 API 网关是性能瓶颈,进而发现缓存设置不合理。某互联网客户,使用 DeepFlow 在 5 分钟内定位服务间 K8s CNI 性能瓶颈,识别由于环路造成的某个服务上下云访问时延周期性飙升的问题,云厂商两周无解。某证券客户,使用 DeepFlow 在 5 分钟内定位 ARP 故障导致 Pod 无法上线的问题,
22、瞬间结束业务、系统、网络多部门会商。某基础设施软件客户,使用 DeepFlow 在 5 分钟内定位 Rust 客户端使用 Tokio 不合理导致的 gRPC 偶发性超大时延,终结了 QA 及多个开发团队之间踢来踢去的 Bug。某四大行客户,使用 DeepFlow 在 5 分钟内定位某个 NFVGW 实例对特定服务流量不转发导致的客户端频繁重试。All Request v.s.One RequestAll Request v.s.One RequestDeepFlowDeepFlow社区微信群社区微信群https:/ TopologyDistributed ProfileDistributed Tracingall requestone request关注我们获取更多云原生资讯Thank you