跳至主要內容

OtelExporter

將 trace 與 log 傳送至任何與 OpenTelemetry 相容的可觀測性平台。Trace 使用標準化 GenAI semantic convention;log 保留原始 severity 與 message body,並透過 OTEL log record 的原生 trace context,以及 mastra.traceIdmastra.spanId 屬性與 trace 建立關聯。

建構函式
「建構函式」的直接連結

new OtelExporter(config: OtelExporterConfig)

OtelExporterConfig
「otelexporterconfig」的直接連結

interface OtelExporterConfig {
provider?: ProviderConfig
signals?: {
traces?: boolean
logs?: boolean
}
timeout?: number
batchSize?: number
logLevel?: 'debug' | 'info' | 'warn' | 'error'
}

Provider 設定
「Provider 設定」的直接連結

Dash0Config
「dash0config」的直接連結

interface Dash0Config {
apiKey?: string
endpoint?: string
dataset?: string
}

SignozConfig
「signozconfig」的直接連結

interface SignozConfig {
apiKey?: string
region?: 'us' | 'eu' | 'in'
endpoint?: string
}

NewRelicConfig
「newrelicconfig」的直接連結

interface NewRelicConfig {
apiKey?: string
endpoint?: string
}

TraceloopConfig
「traceloopconfig」的直接連結

interface TraceloopConfig {
apiKey?: string
destinationId?: string
endpoint?: string
}

LaminarConfig
「laminarconfig」的直接連結

interface LaminarConfig {
apiKey?: string
endpoint?: string
}

CustomConfig
「customconfig」的直接連結

interface CustomConfig {
endpoint: string
protocol?: 'http/json' | 'http/protobuf' | 'grpc' | 'zipkin'
headers?: Record<string, string>
}

方法
「方法」的直接連結

exportTracingEvent
「exporttracingevent」的直接連結

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

將 tracing 事件匯出至設定的 OTEL 後端。

flush
「flush」的直接連結

async flush(): Promise<void>

強制將所有緩衝的 span flush 至 OTEL 後端,而不關閉 exporter。這在 serverless 環境中特別實用,可確保 runtime 結束前已匯出 span。

shutdown
「shutdown」的直接連結

async shutdown(): Promise<void>

Flush 待處理 trace 並關閉 exporter。

使用範例
「使用範例」的直接連結

零設定(使用環境變數)
「零設定(使用環境變數)」的直接連結

import { OtelExporter } from '@mastra/otel-exporter'

// Set SIGNOZ_API_KEY, SIGNOZ_REGION environment variables
const exporter = new OtelExporter({ provider: { signoz: {} } })

// Or for other providers:
// Set DASH0_API_KEY, DASH0_ENDPOINT for Dash0
// Set NEW_RELIC_LICENSE_KEY for New Relic
// Set TRACELOOP_API_KEY for Traceloop
// Set LMNR_PROJECT_API_KEY for Laminar

明確設定
「明確設定」的直接連結

import { OtelExporter } from '@mastra/otel-exporter'

const exporter = new OtelExporter({
provider: {
signoz: {
apiKey: process.env.SIGNOZ_API_KEY,
region: 'us',
},
},
})

使用自訂 Endpoint
「使用自訂 Endpoint」的直接連結

const exporter = new OtelExporter({
provider: {
custom: {
endpoint: 'https://my-collector.example.com/v1/traces',
protocol: 'http/protobuf',
headers: {
'x-api-key': process.env.API_KEY,
},
},
},
timeout: 60000,
logLevel: 'debug',
})

Protocol 需求
「Protocol 需求」的直接連結

不同 Provider 需要不同的 OTEL exporter package。Trace 與 log 匯出彼此獨立:若只需要 trace,只需安裝 trace package;若也需要匯出 log,請同時安裝所選 protocol 的 trace 與 log package。Zipkin 不支援 OTLP log。

ProtocolTrace packageLog package
gRPC@opentelemetry/exporter-trace-otlp-grpc (+ @grpc/grpc-js)@opentelemetry/exporter-logs-otlp-grpc (+ @grpc/grpc-js)
HTTP/Protobuf@opentelemetry/exporter-trace-otlp-proto@opentelemetry/exporter-logs-otlp-proto
HTTP/JSON@opentelemetry/exporter-trace-otlp-http@opentelemetry/exporter-logs-otlp-http
Zipkin@opentelemetry/exporter-zipkin不支援

標籤支援
「標籤支援」的直接連結

OtelExporter 支援以 trace 標籤進行分類與篩選。標籤只會套用至根 span,並儲存為 mastra.tags 屬性。

使用方式
「使用方式」的直接連結

const result = await agent.generate('Hello', {
tracingOptions: {
tags: ['production', 'experiment-v2', 'user-request'],
},
})

標籤的儲存方式
「標籤的儲存方式」的直接連結

為了達到最高的後端相容性,標籤會以 JSON 字串化 array 的形式儲存於 mastra.tags span 屬性中:

{
"mastra.tags": "[\"production\",\"experiment-v2\",\"user-request\"]"
}
備註

雖然 OpenTelemetry 規格支援原生 array 屬性,但許多後端(Jaeger、Zipkin、Tempo)對 array 的支援有限。JSON 字串可確保在所有可觀測性平台上有一致的行為。