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

2023-07-01 13:08:11 +08:00
 xuelang

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

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

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

1040 次点击
所在节点    程序员
4 条回复
LindsayZhou
2023-07-01 17:45:47 +08:00
uprobe ,好,学到了。

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

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

内核里有一大堆 libbpf 的示例,可以看看: https://github.com/torvalds/linux/tree/master/samples/bpf
libbpfgo 还会更简单一点: https://pkg.go.dev/github.com/aquasecurity/libbpfgo
xuelang
2023-07-03 10:31:01 +08:00
@LindsayZhou 很强,我学习下,感谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/953231

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX