DatadogExporter
Sends Tracing data to Datadog's LLM Observability product for monitoring and analytics.
If you also use dd-trace APM auto-instrumentation and need it correctly parented under Mastra spans, use the DatadogBridge instead. The exporter sends LLM Observability data after execution completes, so it doesn't participate in dd-trace's live scope.
ConstructorDirect link to Constructor
new DatadogExporter(config: DatadogExporterConfig)
DatadogExporterConfigDirect link to datadogexporterconfig
interface DatadogExporterConfig extends BaseExporterConfig {
apiKey?: string
mlApp?: string
site?: string
service?: string
env?: string
agentless?: boolean
integrationsEnabled?: boolean
flushGraceMs?: number
}
Extends BaseExporterConfig, which includes:
logger?: IMastraLogger- Logger instancelogLevel?: LogLevel | 'debug' | 'info' | 'warn' | 'error'- Log level (default: INFO)
MethodsDirect link to Methods
exportTracingEventDirect link to exporttracingevent
async exportTracingEvent(event: TracingEvent): Promise<void>
Exports a tracing event to Datadog LLM Observability.
flushDirect link to flush
async flush(): Promise<void>
Force flushes any buffered spans to Datadog without shutting down the exporter. Useful in serverless environments where you need to ensure spans are exported before the runtime terminates.
The flush is best-effort: dd-trace sends LLM Observability data from a background writer and gives no way to await the request, so flush() waits flushGraceMs (default 2000 ms) after asking dd-trace to flush. Each flush that sent new data costs that full wait, so a serverless handler that awaits flush() per request pays it per request. Raise it if spans from short-lived processes are missing in Datadog, or set it to 0 to skip the wait when something else keeps the process alive.
shutdownDirect link to shutdown
async shutdown(): Promise<void>
Flushes pending data and shuts down the exporter. Cancels any pending cleanup timers and disables LLM Observability.
UsageDirect link to Usage
Zero-Config (using environment variables)Direct link to Zero-Config (using environment variables)
import { DatadogExporter } from '@mastra/datadog'
// Reads from DD_LLMOBS_ML_APP, DD_API_KEY, DD_SITE, DD_ENV
const exporter = new DatadogExporter()
Explicit ConfigurationDirect link to Explicit Configuration
import { DatadogExporter } from '@mastra/datadog'
const exporter = new DatadogExporter({
mlApp: 'my-llm-app',
apiKey: process.env.DD_API_KEY,
site: 'datadoghq.com',
env: 'production',
})
With Local Datadog AgentDirect link to With Local Datadog Agent
const exporter = new DatadogExporter({
mlApp: 'my-llm-app',
agentless: false, // Use local Datadog Agent
env: 'production',
})
Span mappingDirect link to Span mapping
Mastra span types are mapped to Datadog LLM Observability span kinds:
| Mastra SpanType | Datadog Kind |
|---|---|
AGENT_RUN | agent |
MODEL_GENERATION | workflow |
MODEL_STEP | llm |
TOOL_CALL | tool |
MCP_TOOL_CALL | tool |
PROVIDER_TOOL_CALL | tool |
WORKFLOW_RUN | workflow |
| All other types | task |
All unmapped span types (including MODEL_CHUNK, WORKFLOW_STEP, GENERIC, and future span types) automatically default to task.
Environment variablesDirect link to Environment variables
The exporter reads configuration from these environment variables:
| Variable | Description |
|---|---|
DD_API_KEY | Datadog API key |
DD_LLMOBS_ML_APP | ML application name |
DD_SITE | Datadog site |
DD_ENV | Environment name |
DD_LLMOBS_AGENTLESS_ENABLED | Set to 'false' or '0' to use local agent |