前言
eBPF 是一种强大的内核技术,允许在内核中安全地执行自定义代码。通过 eBPF,开发者可以在不修改内核源码的情况下,对内核功能进行扩展和监控。eBPF Tracing 利用这一技术,对系统调用、内核函数等进行跟踪,从而实现对应用行为的深入洞察。
与传统的监控方式相比,eBPF Tracing 具有以下优势:
- 无侵入性:无需修改应用代码即可进行监控。
- 高性能:在内核层面执行,减少了对应用性能的影响。
- 细粒度:可以精确到单个系统调用或内核函数的监控。
eBPF(网络)链路实现
实现由三部分构成:
- eBPF 探针程序
- 解析来自 BPF Map 的网络请求数据、线程(协程)跟踪与 eBPF Span 生成
- 链接来自所有节点的汇总 eBPF Span (以下简称 eSpan) 生成链路
eBPF 探针程序
eBPF 探针用于获取程序读写 socket fd 的网络数据,并通过 BPF Map 发送给用户空间的程序进行协议解析。
Linux syscall 函数触发时 eBPF 探针将读取 buf 参数的内容写入 BPF Map,参考 syscall 如下:
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
ssize_t readv(int fd, const struct iovec *iov, int iovcnt);
ssize_t writev(int fd, const struct iovec *iov, int iovcnt);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const stru

最低0.47元/天 解锁文章
718

被折叠的 条评论
为什么被折叠?



