Witty-Insight的eBPF探针详解:SSL嗅探、进程监控与文件追踪
【免费下载链接】witty-insightThe witty-insight is an eBPF-based observability framework for tracing agent execution pipelines.项目地址: https://gitcode.com/openeuler/witty-insight
前往项目官网免费下载:https://ar.openeuler.org/ar/
如何利用eBPF技术无侵入式监控AI Agent运行状态- 一个终极指南
在当今AI Agent快速发展的时代,如何有效监控和分析Agent的运行时行为成为了开发者和运维人员面临的重要挑战。Witty-Insight作为openEuler社区的开源项目,提供了一套基于eBPF的完整解决方案,能够无侵入地捕获LLM API调用、Token消耗、进程行为与中断事件。本文将深入解析Witty-Insight的eBPF探针技术,帮助您理解SSL嗅探、进程监控与文件追踪的核心实现。
什么是Witty-Insight的eBPF探针?
Witty-Insight的eBPF探针是运行在Linux内核空间的轻量级监控程序,通过eBPF技术实现对AI Agent运行时的全方位观测。这些探针无需修改应用程序代码,就能捕获SSL/TLS加密流量、进程生命周期事件、文件操作等关键信息。
eBPF探针架构概览
Witty-Insight设计了7个核心eBPF探针,它们协同工作构成了完整的监控体系:
┌─────────────────────────────────────────────────────────────┐ │ Kernel Space (eBPF) │ ├─────────────────────────────────────────────────────────────┤ │ sslsniff.bpf.c proctrace.bpf.c procmon.bpf.c │ │ filewatch.bpf.c filewrite.bpf.c udpdns.bpf.c │ │ tcpsniff.bpf.c │ └───────────────────────┬─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Shared BPF Resources │ │ Ring Buffer (events_rb) traced_processes Map │ └───────────────────────┬─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ User Space Pipeline │ │ Probes → Event → Parser → Aggregator → Analyzer → Storage │ └─────────────────────────────────────────────────────────────┘SSL嗅探探针:解密加密流量监控
SSL嗅探探针是Witty-Insight的核心组件之一,专门用于监控AI Agent与LLM服务之间的加密通信。
工作原理
SSL嗅探探针通过uprobe技术挂钩到OpenSSL/BoringSSL库的SSL_read和SSL_write函数。当目标进程调用这些函数时,eBPF程序能够捕获解密后的明文数据,而无需解密SSL/TLS协议本身。
关键实现路径:
- BPF程序:
src/bpf/sslsniff.bpf.c - 用户空间处理:
src/probes/sslsniff.rs - 事件解析:
src/parser/目录下的HTTP协议解析器
动态附加机制
与传统监控工具不同,Witty-Insight采用动态附加策略。探针不会在启动时附加到所有进程,而是在Agent进程被发现后按需附加:
procmon探针检测到新进程创建AgentScanner检查进程是否为已知AI Agent- 如果是,则调用
SslSniff::attach_process(pid)附加SSL探针 - 开始捕获该进程的SSL流量
这种设计大大减少了系统开销,只监控真正需要关注的AI Agent进程。
进程监控探针:实时Agent发现
进程监控是Witty-Insight的另一个核心功能,通过三个不同的探针实现全方位进程监控。
1. proctrace探针:命令行参数追踪
proctrace.bpf.c通过tracepoint挂载到sched_process_exec,捕获所有execve事件。它能够获取进程的完整命令行参数,这对于识别AI Agent类型至关重要。
关键特性:
- 支持变长事件:命令行参数长度可变
- 使用
common_event_hdr+proc_event_header+ 变长参数格式 - 用户空间处理:
src/probes/proctrace.rs
2. procmon探针:进程生命周期监控
procmon.bpf.c监控进程的完整生命周期,包括创建、分支和退出事件。这是Agent自动发现机制的基础:
- Attach Point:
sched_process_exec,sched_process_fork,sched_process_exit - 输出格式:
procmon_event_t结构体 - 用途: 驱动Agent自动发现,发现新进程后自动附加SSL探针
3. 进程发现流程
当procmon探针检测到新进程时,完整的发现流程如下:
// 简化流程示意 procmon检测新进程 → AgentScanner::on_process_create() → AgentMatcher匹配已知Agent → Probes::attach_process()附加SSL探针文件追踪探针:.jsonl文件监控
AI Agent通常会将会话信息写入.jsonl文件,Witty-Insight通过两个专门的探针监控这些文件操作。
1. filewatch探针:文件打开监控
filewatch.bpf.c通过tracepoint挂载到do_sys_open/do_sys_openat2系统调用,专门监控.jsonl文件的打开事件。
过滤条件:
- 仅监控
traced_processes映射中的PID - 仅关注
.jsonl文件扩展名 - 输出
filewatch_event_t结构体(pid, filename)
2. filewrite探针:文件写入捕获
filewrite.bpf.c使用fentry技术挂载到vfs_write,捕获.jsonl文件的写入内容。这对于恢复responseId到sessionId的映射关系至关重要。
实现位置:
- BPF程序:
src/bpf/filewrite.bpf.c - 用户空间处理:
src/probes/filewrite.rs
网络监控探针:DNS与明文HTTP
除了SSL流量,Witty-Insight还提供对DNS查询和明文HTTP流量的监控能力。
udpdns探针:DNS查询捕获
udpdns.bpf.c通过fentry挂载到udp_sendmsg,专门捕获目标端口为53的DNS查询:
- 过滤条件: PIDs在
traced_processes映射中,UDP目标端口为53 - 输出:
udpdns_event_t结构体(查询的域名) - 用途: 运行时解析配置的HTTPS/HTTP域名模式,用于SSL/TCP附加过滤
tcpsniff探针:明文HTTP流量捕获
tcpsniff.bpf.c监控非加密的HTTP流量,适用于内部MaaS网关等场景:
- Attach Point:
tcp_recvmsg/tcp_sendmsg - 过滤条件: 配置的目标IP/端口(
tcp_targets) - 输出格式: 重用sslsniff的
probe_SSL_data_t事件格式
共享资源设计:高效数据传递
所有eBPF探针共享两个关键资源,确保高效的数据传递和进程过滤。
Ring Buffer (events_rb)
所有探针将事件写入同一个ring buffer,通过common_event_hdr.source字段区分事件类型:
| source值 | 事件类型 | 解析方法 |
|---|---|---|
| 1 (EVENT_SOURCE_PROC) | proctrace事件 | VariableEvent::from_bytes() |
| 2 (EVENT_SOURCE_SSL) | sslsniff事件 | SslEvent::from_bpf() |
| 3 (EVENT_SOURCE_PROCMON) | procmon事件 | procmon::Event::from_bytes() |
| 4 (EVENT_SOURCE_FILEWATCH) | filewatch事件 | FileWatchEvent::from_bytes() |
| 5 (EVENT_SOURCE_FILEWRITE) | filewrite事件 | FileWriteEvent::from_bytes() |
| 6 (EVENT_SOURCE_UDPDNS) | udpdns事件 | UdpDnsEvent::from_bytes() |
traced_processes映射
这是一个BPF哈希映射,key为PID,value为1。被以下探针使用:
sslsniff: 过滤需要监控的进程filewatch: 仅监控目标进程的文件操作filewrite: 仅捕获目标进程的文件写入udpdns: 仅捕获目标进程的DNS查询
用户空间数据处理流水线
eBPF探针捕获的数据通过ring buffer传递到用户空间,经过完整的处理流水线:
1. 事件轮询与分发
src/probes/probes.rs中的Probes::run()方法(第137-193行)创建单线程轮询ring buffer,根据source字段将事件分发到不同的Event枚举变体。
2. 协议解析
src/parser/目录包含多种协议解析器:
- HTTP/1.x解析器:
src/parser/http/ - HTTP/2解析器:
src/parser/http2/ - SSE(Server-Sent Events)解析器:
src/parser/sse/ - 进程追踪解析器:
src/parser/proctrace.rs
3. 请求-响应关联
src/aggregator/模块负责将请求和响应关联起来,形成完整的会话记录。特别是HttpConnectionAggregator处理HTTP连接的聚合逻辑。
4. 分析与存储
src/analyzer/模块进行Token提取、审计记录和消息分析,最终结果存储到SQLite数据库或导出到阿里云SLS。
实际应用场景
场景1:AI Agent性能监控
通过SSL嗅探探针,您可以实时监控:
- LLM API调用延迟
- Token消耗统计
- 请求成功率
- 错误率分析
场景2:Agent自动发现与监控
结合procmon和proctrace探针,实现:
- 自动发现新启动的AI Agent进程
- 按需附加监控探针
- 进程生命周期跟踪
- 异常退出检测
场景3:会话完整性保障
通过文件追踪探针,确保:
.jsonl会话文件的完整性监控- 响应ID到会话ID的映射恢复
- 文件写入异常检测
部署与使用指南
快速开始
# 构建项目 make build # 启动eBPF追踪(需要root权限) sudo ./target/release/agentsight trace # 启动HTTP API服务器 ./target/release/agentsight serve或者使用统一入口脚本:
./scripts/agentsight-start.sh配置探针行为
通过agentsight.json配置文件,您可以调整探针行为:
{ "traceEnabled": true, "cmdline": { "allow": ["python", "node", "java"], "deny": ["bash", "sh"] } }监控数据查询
启动服务后,通过HTTP API访问监控数据:
/api/sessions- 会话列表/api/token-savings- Token节省统计/api/interruptions- 中断事件列表/api/agent-health- Agent健康状态
性能优化建议
1. 选择性监控
只监控真正需要关注的AI Agent进程,通过traced_processes映射实现精确过滤。
2. 事件采样
对于高流量场景,可以在eBPF程序中实现采样逻辑,减少用户空间处理压力。
3. 缓冲区调优
根据系统负载调整ring buffer大小,平衡内存使用和事件丢失率。
4. 进程过滤优化
利用cmdline.allow和cmdline.deny配置,精确控制监控范围。
故障排除
常见问题1:权限不足
eBPF探针需要root权限或CAP_BPF能力。确保以root用户运行agentsight trace命令。
常见问题2:内核版本不兼容
Witty-Insight需要Linux内核>=5.8以支持BTF。检查内核版本:
uname -r常见问题3:探针加载失败
检查系统日志获取详细错误信息:
dmesg | tail -20 journalctl -k | tail -20总结
Witty-Insight的eBPF探针技术为AI Agent运行时监控提供了强大而灵活的工具集。通过SSL嗅探、进程监控、文件追踪和网络监控的有机结合,实现了对AI Agent运行状态的全面观测。无论是开发调试、性能优化还是生产监控,这套工具都能提供有价值的洞察。
关键优势:
- ✅ 无侵入式监控,无需修改应用代码
- ✅ 动态探针附加,减少系统开销
- ✅ 完整的协议解析支持
- ✅ 灵活的配置选项
- ✅ 丰富的API接口
通过深入理解这些eBPF探针的工作原理和配置方法,您可以更好地利用Witty-Insight来监控和优化您的AI Agent应用。🚀
【免费下载链接】witty-insightThe witty-insight is an eBPF-based observability framework for tracing agent execution pipelines.项目地址: https://gitcode.com/openeuler/witty-insight
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考