可观测性 User-Level Tracing
序言
tracing分为两种实现方案:
- 静态追踪,即静态探针。
- 动态追踪,动态探针。
静态追踪包括内核态的tracepoint、用户态的USTD;动态追踪有内核态kprobe、kretprobe、ftrace, 用户态的uprobe、uretprobe。
kprobe与kretprobe的区别在于kprobe追踪函数调用、kretprobe是追踪函数返回值。同理uprobe与uretprobe也是一样的区别。
前面章节讲解的可观测性技术都是内核态的,但是大部分的业务应用都是在用户态的,用户、开发不关心内核态的东西。
那么用户态程序的可观测性是否有成熟的技术方案呢?
答案是有的。
介绍
用户态程序追踪有两种技术方案:
- USDT
- uprobe
USTD是静态追踪方案;uprobe是动态追踪方案。
两种方案各有千秋不存在谁比谁好的问题,只有谁更合适的问题。
uprobe是使用上比较方便,除了需要程序符号表可访问之外,不需要其它额外的事情,比较通用。
USDT则需要在程序编译的时候打桩埋点,可以理解为在程序处理流程的关键位置增加debug日志信息。
对于新的大型项目开发而言,使用USDT方案会更好一些,不仅仅是方便开发调试,更利于上线之后的产品运营,因为它的比写debug日志性能要好。
后面会介绍两个工程化落地比较好的案例。
记得关注,别错过了后续文章。
为了方便合作洽谈、交流,有需要可以加微信。
有云原生安全、可观测性的岗位也欢迎推荐。
参考
https://www.cnxct.com/ebpf-uprobe-userspace-app/
欢迎大家转发分享。未经授权,严禁任何复制、转载、摘编或以其它方式进行使用,转载须注明来自eBPFLAB并附上本文链接。如果有侵犯到您权益的地方,请及时联系我删除。