InMemoryExporter 把 span 数据保存在进程内存中,而非上报至外部平台。它按 session_id 组织 span,便于本地调试、测试以及将某次会话的追踪数据落盘为 JSON 文件进行离线分析。
本地留存的 span 数量受可配置上限约束,达到上限后自动淘汰最早的 span;同一个 TracerProvider 下的多个追踪器共享一个内存导出器实例。
何时使用
- 本地开发与调试智能体执行流程;
- 在单元测试或集成测试中校验 span;
- 离线环境中无外部平台连接,需要本地留存与分析追踪数据。
自动管理
InMemoryExporter 由 OpentelemetryTracer 自动创建并管理,用于记录已完成且被采样的 span。因此它不能被显式加入 OpentelemetryTracer 的 exporters 列表,否则初始化会报错。
TracerProvider 下的多个追踪器共享一个 InMemoryExporter 实例;首次创建时注册,后续追踪器复用已注册的导出器。
使用示例
会话运行结束后,可调用追踪器的dump 方法,将该会话的 span 导出为本地 JSON 文件:
app.py
本地缓存限制
内存导出器的本地留存按 span 数量和估算数据量双重上限管理,达到任一上限时淘汰最早的 span;单个 span 超过字节上限时不写入本地缓存,仍按原有配置交给云端导出器。默认保留最近的 1024 个 span,估算数据总量上限为 16 MiB。tracer.dump() 写入空数组。启用缓存时,dump() 只包含仍保留的会话历史;用于关联会话的 span 被淘汰后,对应链路可能不再出现在本地导出中,完整历史应在云端观测平台查询。
字节数是缓存数据的估算值,不代表整个进程的内存上限。配置在首次创建缓存时生效,修改后需重启应用或创建新的 TracerProvider。
参数
构造参数
InMemoryExporter 通常无需手动构造,其构造参数如下:
dump 方法参数
OpentelemetryTracer.dump 依赖内存导出器留存的 span,参数如下:
落盘文件名形如
{name}_{user_id}_{session_id}_{trace_id}.json,内容为 span 列表,每个 span 包含名称、span_id、trace_id、起止时间、属性以及父 span 关系。
判断导出结果
先完成模型配置,将示例保存为app.py 后运行 python app.py。终端输出的文件路径应存在,JSON 列表应包含本次模型调用的 span
内存数据在进程退出后丢失。会话筛选依赖模型调用写入的会话标识;未产生相关模型 span、采样未保留数据或会话标识不一致时,文件可能为空。user_id 用于文件命名,不用于导出筛选,也不构成访问控制