news 2026/7/16 14:34:56

Witty-Insight的eBPF探针详解:SSL嗅探、进程监控与文件追踪

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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_readSSL_write函数。当目标进程调用这些函数时,eBPF程序能够捕获解密后的明文数据,而无需解密SSL/TLS协议本身。

关键实现路径

  • BPF程序:src/bpf/sslsniff.bpf.c
  • 用户空间处理:src/probes/sslsniff.rs
  • 事件解析:src/parser/目录下的HTTP协议解析器

动态附加机制

与传统监控工具不同,Witty-Insight采用动态附加策略。探针不会在启动时附加到所有进程,而是在Agent进程被发现后按需附加:

  1. procmon探针检测到新进程创建
  2. AgentScanner检查进程是否为已知AI Agent
  3. 如果是,则调用SslSniff::attach_process(pid)附加SSL探针
  4. 开始捕获该进程的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自动发现与监控

结合procmonproctrace探针,实现:

  • 自动发现新启动的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.allowcmdline.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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 14:34:47

LLM网关设计:统一多模型API调用与性能优化实践

1. 项目概述:LLM网关的核心价值与行业痛点在当前的AI应用开发生态中,大型语言模型(LLM)的集成已经成为标配。但当我们同时使用多个AI模型提供商(如OpenAI、Anthropic、本地部署的Llama等)时,开发…

作者头像 李华
网站建设 2026/7/16 14:34:38

Lua调用C++函数:原理、实现与工程实践指南

1. 项目概述:为什么要在Lua中调用C函数? 如果你正在开发游戏、嵌入式设备应用,或者任何需要高性能计算和灵活脚本逻辑结合的项目,那么“Lua调用C”这个技术点你一定绕不开。我最早接触这个需求是在一个游戏服务器项目中&#xff0…

作者头像 李华
网站建设 2026/7/16 14:34:21

tRPC.panel()常见问题解决:从安装到部署的完整排错指南

tRPC.panel()常见问题解决:从安装到部署的完整排错指南 【免费下载链接】trpc-panel 项目地址: https://gitcode.com/gh_mirrors/tr/trpc-panel tRPC.panel()是一款强大的tRPC API调试工具,它能帮助开发者直观地查看和测试API接口。本文将为新手…

作者头像 李华
网站建设 2026/7/16 14:33:59

AnyFlip下载器终极指南:3分钟将在线翻页书永久保存为PDF

AnyFlip下载器终极指南:3分钟将在线翻页书永久保存为PDF 【免费下载链接】anyflip-downloader Download anyflip books as PDF 项目地址: https://gitcode.com/gh_mirrors/an/anyflip-downloader 您是否曾为在线电子书的网络依赖而烦恼?AnyFlip下…

作者头像 李华
网站建设 2026/7/16 14:33:26

3步实现浏览器Markdown渲染:提升文档阅读体验的实用工具

3步实现浏览器Markdown渲染:提升文档阅读体验的实用工具 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer Markdown Viewer是一款功能强大的浏览器扩展,它能…

作者头像 李华
网站建设 2026/7/16 14:33:04

政府报告厅扩声系统建设实战指南

在大型会议中心、多功能厅或校园广播系统中,音频系统往往面临着“听得见”但“听不清”的尴尬局面。很多项目验收时,静态测试一切正常,一旦进入实际会议场景,高频啸叫、声音浑浊、区域串扰等问题便接踵而至。这不仅影响沟通效率&a…

作者头像 李华