V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuelang
V2EX  ›  程序员

bcc ebpf 可插拔无侵入监控服务函数级耗时

  •  
  •   xuelang ·
    selfboot · 2023-07-01 13:08:11 +08:00 · 1042 次点击
    这是一个创建于 512 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们都知道,在开发和维护后台服务时,监控函数的执行时间是至关重要的。通过监控,我们可以及时发现性能瓶颈,优化代码,确保服务的稳定性和响应速度。然而,传统的方法通常涉及在代码中添加统计信息并上报,这种方法虽然有效,但往往只针对那些被认为是关键路径的函数。

    假设在某个时刻,我们突然需要监控一个并非重点关注的函数的执行时间。在这种情况下,修改代码并重新部署服务可能是一项繁琐且耗时的任务。这时,eBPF (扩展的伯克利数据包过滤器)和 BCC ( BPF 编译器集合)就派上了用场。通过使用 eBPF ,我们可以在不修改代码和不重新部署服务的情况下,动态地插入探针来监控函数的执行时间。这不仅大大简化了监控过程,还减少了对服务性能的影响。

    完整文章在这里 利用 ebpf bcc 无侵入分析服务函数耗时

    函数耗时直方分布

    函数平均耗时和 P99 耗时

    4 条回复    2023-07-03 10:31:01 +08:00
    LindsayZhou
        1
    LindsayZhou  
       2023-07-01 17:45:47 +08:00   ❤️ 1
    uprobe ,好,学到了。

    平常我这边 kprobe 用得多一点,最近还准备去看看 tc 的部分。

    比起 bcc ,个人会要更喜欢 libbpf / libbpfgo 一点。
    不会要在服务器上装 python bcc clang 一大堆东西。libbpf 编译好直接扔上去就行。
    各个发行版也都默认开始把 btf 开起来了。
    xuelang
        2
    xuelang  
    OP
       2023-07-02 10:32:33 +08:00
    @LindsayZhou 直接用 libbpf / libbpfgo 的话,开发起来容易吗?我一直都是用 bcc 和 bpftrace ,还没直接用过 lib
    LindsayZhou
        3
    LindsayZhou  
       2023-07-03 09:13:15 +08:00   ❤️ 1
    @xuelang 开发难度我觉得差不多。

    内核里有一大堆 libbpf 的示例,可以看看: https://github.com/torvalds/linux/tree/master/samples/bpf
    libbpfgo 还会更简单一点: https://pkg.go.dev/github.com/aquasecurity/libbpfgo
    xuelang
        4
    xuelang  
    OP
       2023-07-03 10:31:01 +08:00
    @LindsayZhou 很强,我学习下,感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1128 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:19 · PVG 02:19 · LAX 10:19 · JFK 13:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.