Witty-Insight的eBPF探针详解:SSL嗅探、进程监控与文件追踪
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_hdrproc_event_header 变长参数格式用户空间处理src/probes/proctrace.rs2. 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, filename2. 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为PIDvalue为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/SSEServer-Sent Events解析器src/parser/sse/进程追踪解析器src/parser/proctrace.rs3. 请求-响应关联src/aggregator/模块负责将请求和响应关联起来形成完整的会话记录。特别是HttpConnectionAggregator处理HTTP连接的聚合逻辑。4. 分析与存储src/analyzer/模块进行Token提取、审计记录和消息分析最终结果存储到SQLite数据库或导出到阿里云SLS。实际应用场景场景1AI Agent性能监控通过SSL嗅探探针您可以实时监控LLM API调用延迟Token消耗统计请求成功率错误率分析场景2Agent自动发现与监控结合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),仅供参考