# DatadogExporter

Sends Tracing data to Datadog's LLM Observability product for monitoring and analytics.

> **Info:** If you also use `dd-trace` APM auto-instrumentation and need it correctly parented under Mastra spans, use the [DatadogBridge](https://mastra.ai/reference/observability/tracing/bridges/datadog) instead. The exporter sends LLM Observability data after execution completes, so it doesn't participate in `dd-trace`'s live scope.

## Constructor

```typescript
new DatadogExporter(config: DatadogExporterConfig)
```

## `DatadogExporterConfig`

```typescript
interface DatadogExporterConfig extends BaseExporterConfig {
  apiKey?: string
  mlApp?: string
  site?: string
  service?: string
  env?: string
  agentless?: boolean
  integrationsEnabled?: boolean
}
```

Extends `BaseExporterConfig`, which includes:

- `logger?: IMastraLogger` - Logger instance
- `logLevel?: LogLevel | 'debug' | 'info' | 'warn' | 'error'` - Log level (default: INFO)

## Methods

### `exportTracingEvent`

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

Exports a tracing event to Datadog LLM Observability.

### flush

```typescript
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.

### shutdown

```typescript
async shutdown(): Promise<void>
```

Flushes pending data and shuts down the exporter. Cancels any pending cleanup timers and disables LLM Observability.

## Usage

### Zero-Config (using environment variables)

```typescript
import { DatadogExporter } from '@mastra/datadog'

// Reads from DD_LLMOBS_ML_APP, DD_API_KEY, DD_SITE, DD_ENV
const exporter = new DatadogExporter()
```

### Explicit Configuration

```typescript
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 Agent

```typescript
const exporter = new DatadogExporter({
  mlApp: 'my-llm-app',
  agentless: false, // Use local Datadog Agent
  env: 'production',
})
```

## 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`       |
| `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 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 |