跳到主要内容

MastraStorageExporter

通过自动批处理和重试逻辑,将 Trace 持久化到 Mastra 配置的存储中。

备注

MastraStorageExporter 以前名为 DefaultExporter。原始 DefaultExporter 类仍从 @mastra/observability 导出,因此现有导入可继续使用,但它已被弃用,并将在未来的主要版本中移除。新代码应使用 MastraStorageExporter

构造函数
构造函数的直接链接

new MastraStorageExporter(config?: MastraStorageExporterConfig)

MastraStorageExporterConfig
mastrastorageexporterconfig的直接链接

interface MastraStorageExporterConfig extends BaseExporterConfig {
/** Maximum number of spans per batch. Default: 1000 */
maxBatchSize?: number

/** Maximum total buffer size before emergency flush. Default: 10000 */
maxBufferSize?: number

/** Maximum time to wait before flushing batch in milliseconds. Default: 5000 */
maxBatchWaitMs?: number

/** Maximum number of retry attempts. Default: 4 */
maxRetries?: number

/** Base retry delay in milliseconds (uses exponential backoff). Default: 500 */
retryDelayMs?: number

/** Tracing storage strategy or 'auto' for automatic selection. Default: 'auto' */
strategy?: TracingStorageStrategy | 'auto'
}

扩展自 BaseExporterConfig,其中包括:

  • logger?: IMastraLogger - Logger 实例
  • logLevel?: LogLevel | 'debug' | 'info' | 'warn' | 'error' - 日志级别(默认:INFO)

TracingStorageStrategy
tracingstoragestrategy的直接链接

type TracingStorageStrategy = 'realtime' | 'batch-with-updates' | 'insert-only'

策略行为
策略行为的直接链接

  • realtime:立即将每个事件持久化到存储
  • batch-with-updates:分别批量处理创建和更新,并按顺序应用
  • insert-only:仅处理 SPAN_ENDED 事件,忽略更新

属性
属性的直接链接

readonly name = 'mastra-storage-exporter';

为保持向后兼容,已弃用的 DefaultExporter 类继续使用 'mastra-default-observability-exporter' 作为其 name

方法
方法的直接链接

init
init的直接链接

init(options: InitExporterOptions): void

在依赖项就绪后初始化 Exporter。根据存储能力解析 tracing 策略。

exportTracingEvent
exporttracingevent的直接链接

async exportTracingEvent(event: TracingEvent): Promise<void>

按照解析后的策略处理 tracing 事件。

flush
flush的直接链接

async flush(): Promise<void>

在不关闭 Exporter 的情况下,强制将所有已缓冲事件刷新到存储。适用于需要在运行时终止前确保 Span 已导出的 serverless 环境。

shutdown
shutdown的直接链接

async shutdown(): Promise<void>

刷新剩余的已缓冲事件并执行清理。

自动选择策略
自动选择策略的直接链接

strategy: 'auto'(默认)时,Exporter 会查询存储适配器的能力:

interface TracingStrategy {
/** Strategies supported by this adapter */
supported: TracingStorageStrategy[]

/** Preferred strategy for optimal performance */
preferred: TracingStorageStrategy
}

Exporter 将:

  1. 如果可用,则使用存储适配器的首选策略
  2. 如果首选策略不可用,则回退到第一个受支持的策略
  3. 如果用户指定的策略不受支持,则记录警告

批处理行为
批处理行为的直接链接

刷新触发条件
刷新触发条件的直接链接

满足以下任一条件时会刷新缓冲区:

  • 缓冲区大小达到 maxBatchSize
  • 自第一个缓冲事件以来的时间超过 maxBatchWaitMs
  • 缓冲区大小达到 maxBufferSize(紧急刷新)
  • 调用 shutdown()

重试逻辑
重试逻辑的直接链接

刷新失败时会使用指数退避重试:

  • 重试延迟:retryDelayMs * 2^attempt
  • 最大尝试次数:maxRetries
  • 所有重试均失败后丢弃批次

乱序处理
乱序处理的直接链接

对于 batch-with-updates 策略:

  • 跟踪已创建的 Span
  • 拒绝尚未创建的 Span 的更新/结束事件
  • 为乱序事件记录警告
  • 维护序列号以确保按顺序更新

用法
用法的直接链接

import { MastraStorageExporter } from '@mastra/observability'

// Default configuration
const exporter = new MastraStorageExporter()

// Custom batching configuration
const customExporter = new MastraStorageExporter({
maxBatchSize: 500,
maxBatchWaitMs: 2000,
strategy: 'batch-with-updates',
logLevel: 'debug',
})

DefaultExporter 迁移
migrating-from-defaultexporter的直接链接

两个类具有相同的构造函数签名和行为。要迁移,请替换导入和构造函数:

// Before
import { DefaultExporter } from '@mastra/observability'
const exporter = new DefaultExporter()

// After
import { MastraStorageExporter } from '@mastra/observability'
const exporter = new MastraStorageExporter()

原始 DefaultExporter 会原样保留,因此在迁移完成前,匹配先前 mastra-default-observability-exporter Exporter 名称的仪表板或告警规则仍可继续工作。

另请参阅
另请参阅的直接链接

文档
文档的直接链接

其他 Exporter
其他 Exporter的直接链接

参考
参考的直接链接