《张磊--擎创的ebpf之旅.pdf》由会员分享,可在线阅读,更多相关《张磊--擎创的ebpf之旅.pdf(43页珍藏版)》请在三个皮匠报告上搜索。
1、擎创的ebpf之旅第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m中 国 西 安汇报人:张磊目录CONTENTS01网络数据收集02无侵入应用的metric统计03ebpf做可持续剖析04谈谈ebpf编程的细节网 络 数 据 收 集一第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m中 国 西 安传统的网络拓扑图必须要植入不同语言sdk到微服务中,通过接收不同语言中的agent 导出数据(opentrace、opentelemetry等协议),梳理不同agent的span上下级关系,形成网络拓扑图。第 二 届 e B
2、 P F 开 发 者 大 会传统网络拓扑图第 二 届 e B P F 开 发 者 大 会传统网络拓扑图-架构图1、具有强侵入性,需要在服务中切入 不同语言的agent2、维护成本高,需要支持不同类型的trace协议,并且自行维护多版本agent。3、侵入agent,对服务性能有一定影响4、拓扑只能反应服务间的调用关系,无法准确反映主机之间的网络拓扑全貌。第 二 届 e B P F 开 发 者 大 会传统网络拓扑图-缺陷与不足第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m基于ebpf网络拓扑图,我们首先要了解linux处理请求过程:第二届 eBPF开发者
3、大会w w w.e b p f t r a v e l.c o mebpf可观测内核插桩常用技巧:tracepoint是一个静态的hook函数,是预先在内核里面编写好才使用。使用tracepoint来监视网络设备队列的操作。tracepointSOCKET FILTER 类型 eBPF 程序通过 SO_ATTACH_BPF 选项完成设置。SO_ATTACH_BPF插入的是eBPF代码。eBPF是对cBPF的增强,目前用户端的tcpdump等程序还是用的cBPF版本,他具有开销小,可编程等优点。网络过滤器eBPF支持的内核探针功能,内核动态探针可以分为两种:Kprobe和Kretprobe。二者
4、的区别在于,根据探针执行周期的不同阶段,来确定插入eBPF程序的位置。kprobe第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m使用kprobe获取pid 和fd 的对应关系:第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o msockfd_lookup_light 使用的系统调用有:第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m标记流量方向:通过hook accept 标记处的入口流量SEC(kretprobe/inet_csk_accept)通过hook connect
5、标记处的出口流量SEC(kprobe/tcp_connect)SEC(kprobe/tcp_finish_connect)第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m如何读取nat转换信息?第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o mebpf 插桩 netfilter第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m软件程序设计:第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m服务端汇聚网络拓扑图:无 侵 入 的 流 量m e t
6、 r i c 统 计二第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m中 国 西 安第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m前期调研:传统的http指标统计必须强植入代码,而且各个框架的底层函数不一样,开发维护成本都比较高,有很多时候我们需要为各个框架开发插件去进行上报统计,使用ebpf无侵入统计http指标解决了这个痛点。第 二 届 e B P F 开 发 者 大 会无侵入采集http指标第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m传统的CBPF统计有很大消耗第