eBPF的应用

一、eBPF的引入

在前面的XDP分析和更早的eBPF的介绍中,对其进行了较为全面的分析和说明。但很多技术问题都是真正为开发者所用之后才能体会到其强大的功能。虽然XDP利用到了eBPF,但其本身更倾向于专业的开发者,所以仍然无法为普通的开发者所体会。
可以理解为eBPF是一个类似于HOOK的钩子,它把内核态中数据的交互从更抽象层的通信简化到了直接过滤,这样其优势在于减少了中间层的通信,提高了效率和吞吐量。所以大家也理解为什么eBPF是从网络开始搞的原因了吧。

二、分析说明

很多人可能会质疑eBPF的安全性,因为在传统的开发者眼中,钩子之类的东西往往和非正常编程,甚至木马、病毒等有着千丝万缕的关系。但还是那句话,菜刀既可以用来切菜也可以用来自卫,重点不在于它做了什么而是使用它的人想做什么。换句话说,内核都开放出接口了,大佬们都不担心,普通开发者理乐要担心了。出了事,有个儿高的顶着。
经过初步的eBPF学习,已经知道eBPF是实现了一个虚拟的系统,而这层虚拟系统加之大内核上,相对于传统的钩子,性能肯定会有影响,或许这也是内核大佬们的一种平衡的思维。既要又要,就得牺牲一些东西。其实从这点来看,它对系统分析更友好,而对系统应用就得具体问题具体分析了。
其实如果只在乎性能而不想与内核打交道,在某些情况下,直接HOOK在用户态反而更有优势,这就需要开发者根据自己的情况来确定应用了,不要迷信技术,所有的技术都有其应用场景的。即使再广泛的普适技术也有其特定的弱点。不然也不会那么多工具满天飞。

三、常见工具

在分析了一通eBPF,对于开发者来说,常见的与之相关的工具有哪些呢?下面就把一些比较常用的分析说明一下,有兴趣的可以根据自己的需要再进行更详细的学习。

  1. 网络工具
    这些工具有负责TCP连接生命周期的工具tcplife也有重传追踪的tcpretrans和查看慢连接的tcpconnlat,其常见的使用方法如下:
    # 实时监控重传情况,1秒刷新一次
    sudo tcpretrans -i 1
    # 监控目标端口 8000 且耗时超过 3000ms (3秒) 的连接
    sudo tcplife | awk '$6 == 8000 && $9 > 3000'
    # 查看连接延迟
    sudo tcpconnlat
    
  2. 磁盘工具
    biolatency工具是一个磁盘监控的工具,用于监测内核中每个磁盘IO的请求耗时。它会生成一个直方图直观的让应用者看到相关的结果。它更利于发现所谓的“长尾延时”也就是偶尔出现的高延迟。下面的命令用于输出所有的块设备的IO延迟直方图:
    sudo biolatency
    
  3. 进行监测工具
    execsnoop是用来实时监控系统中进程的启动情况的工具,相比于传统的ps命令,其开销极低且几乎无延迟。特别对于一些非常短小的命令如ls等仍然可以实现实时的捕捉监控。下面的命令可以实现实时监控系统所有新进程:
    sudo execsnoop -a
    
  4. 文件监测工具
    opensnoop是一个用来实时跟踪系统中的文件打开事件的工具。它可以在内核层面对sys_open等调用进行监控。它可以提供文件打开的进程、文件属性等内容。下面可以查看某个进程缺少文件退出的情况:
    # 在终端1执行opensnoop,查看错误
    sudo opensnoop -e -n java
    # 终端2执行程序
    java
    
  5. 高级命令
    还有一个更高级的命令bpftrace,它是一个强大且灵活的eBPF动态追踪工具。其可以和AWK脚本语言相媲美,允许进行命令或复杂脚本的处理,并且自定义相关的Probe和输出格式。看一个监控所有新进程的例子:
    sudo bpftrace -e 'tracepoint:syscalls:sys_enter_execve /pid > 0/ { printf("%s %s\n", comm, str(args->filename)); }'
    

上面的这些命令都在工具包bcc中,相应的命令还有不少,大家可以根据情况使用下面的命令进行安装相关的工具包:

apt install -y bpfcc-tools linux-headers-$(uname -r) bpftrace

之所以安装内核头文件,可能有的工具需要使用,否则无法正常启动。

四、总结

实践才是检验真理的标准。技术再好,不能为我所有,那么这项技术意义在哪里在呢?所以人们常说“知行合一”,“读万卷书,行万里路”,就是让人们能够把学到的知识应用到实践中来。与诸君共勉!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值