可观测性 User-Level Tracing


序言

tracing分为两种实现方案:

  1. 静态追踪,即静态探针。
  2. 动态追踪,动态探针。

静态追踪包括内核态的tracepoint、用户态的USTD;动态追踪有内核态kprobe、kretprobe、ftrace, 用户态的uprobe、uretprobe。

kprobe与kretprobe的区别在于kprobe追踪函数调用、kretprobe是追踪函数返回值。同理uprobe与uretprobe也是一样的区别。

前面章节讲解的可观测性技术都是内核态的,但是大部分的业务应用都是在用户态的,用户、开发不关心内核态的东西。

那么用户态程序的可观测性是否有成熟的技术方案呢?

答案是有的。

介绍

用户态程序追踪有两种技术方案:

  1. USDT
  2. uprobe

USTD是静态追踪方案;uprobe是动态追踪方案。

两种方案各有千秋不存在谁比谁好的问题,只有谁更合适的问题。

uprobe是使用上比较方便,除了需要程序符号表可访问之外,不需要其它额外的事情,比较通用。

USDT则需要在程序编译的时候打桩埋点,可以理解为在程序处理流程的关键位置增加debug日志信息。

对于新的大型项目开发而言,使用USDT方案会更好一些,不仅仅是方便开发调试,更利于上线之后的产品运营,因为它的比写debug日志性能要好。

后面会介绍两个工程化落地比较好的案例。

记得关注,别错过了后续文章。

为了方便合作洽谈、交流,有需要可以加微信。

有云原生安全、可观测性的岗位也欢迎推荐。

参考

https://www.cnxct.com/ebpf-uprobe-userspace-app/

欢迎大家转发分享。未经授权,严禁任何复制、转载、摘编或以其它方式进行使用,转载须注明来自eBPFLAB并附上本文链接。如果有侵犯到您权益的地方,请及时联系我删除。