> ## Documentation Index
> Fetch the complete documentation index at: https://auth0.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Create Metric Streams

> Stream Auth0 metrics to monitoring platforms like Datadog, New Relic, and Splunk for real-time observability.

> [!WARNING]
>
> **The Metrics Streams feature is in .**

Metric Streams support the following monitoring platforms:

> [card] [Datadog](#set-up-datadog)
>
> Native integration with Datadog's metrics API

> [card] [New Relic](#set-up-new-relic)
>
> Stream via OpenTelemetry Protocol (OTLP)

> [card] [Splunk](#set-up-splunk)
>
> Stream via OpenTelemetry Protocol (OTLP)

## Prerequisites

Before setting up a metric stream, you need:

* **Auth0 Management API access**: Create a Machine-to-Machine (M2M) application with the following permissions:

  * `read:event_streams`
  * `create:event_streams`
  * `update:event_streams`
  * `delete:event_streams`
  * `read:event_deliveries`
  * `update:event_deliveries`

  For detailed instructions, read [Get Management API Access Tokens](https://auth0.com/docs/secure/tokens/access-tokens/management-api-access-tokens/get-management-api-access-tokens-for-production).

* **Auth0 CLI**: Install the [Auth0 CLI](https://auth0.github.io/auth0-cli/) to configure metric streams via API commands.

* **Monitoring platform account**: An active account with one of the [supported platforms](https://auth0.com/docs/deploy-monitor/metric-streams.md#supported-platforms).

## Set up Datadog

Stream Auth0 metrics directly to Datadog using their native metrics API.

### Prerequisites

* Active [Datadog account](https://www.datadoghq.com/)
* Datadog API key (generate at **Organization Settings > API Keys** in Datadog)
* Your Datadog site (region identifier like `US1` for app.datadoghq.com, `EU` for app.datadoghq.eu, `US3` for us3.datadoghq.com)

### Create metric stream

> [tab] Dashboard
>
> **Navigate to Metric Streams:**
>
> 1. Go to [Auth0 Dashboard](https://manage.auth0.com) > **Monitoring** > **Metric Streams**.
> 2. Select **+ Create Metric Stream**.
> 3. Select **Datadog**.
>
> **Configure stream:**
>
> 1. **Name**: Enter a descriptive name (e.g., `datadog-production`).
> 2. **Datadog Site**: Select your Datadog region from the dropdown:
>    * `US1` for app.datadoghq.com
>    * `US3` for us3.datadoghq.com
>    * `US5` for us5.datadoghq.com
>    * `EU` for app.datadoghq.eu
>    * `AP1` for ap1.datadoghq.com
> 3. **Datadog API Key**: Paste your Datadog API key.
> 4. Select **Save**.
>
> This creates and automatically enables your Metric Stream.

> [tab] CLI
>
> Use the Auth0 CLI to create a Datadog metric stream:
>
> Using the Auth0 CLI? If you haven't already, [set up and authenticate your CLI session](https://auth0.com/docs/deploy-monitor/auth0-cli.md) before running this command.
>
> ```bash theme={null}
> auth0 api post metric-streams \
>   --data '{
>     "name": "datadog-production",
>     "subscriptions": [{ "metric_type": "auth0.api_request.count" }],
>     "destination": {
>       "type": "datadog",
>       "configuration": {
>         "api_key": "YOUR_DATADOG_API_KEY",
>         "site": "app.datadoghq.com"
>       }
>     }
>   }'
> ```
>
> **Response:**
>
> ```json theme={null}
> {
>   "id": "mst_abc123xyz",
>   "status": "enabled",
>   "name": "datadog-production",
>   "created_at": "2024-02-12T10:30:00Z",
>   "updated_at": "2024-02-12T10:30:00Z",
>   "destination": {
>     "type": "datadog",
>     "configuration": {
>       "api_key": "***",
>       "site": "app.datadoghq.com"
>     }
>   }
> }
> ```
>
> Save the `id` value to manage this stream later.

### Verify in Datadog

Within a few minutes, Auth0 metrics appear in Datadog. Navigate to **Metrics > Explorer** and search for `auth0.api_request.count` to view your data.

### Manage streams

> [tab] Dashboard
>
> **View all streams:**
>
> 1. Go to [Auth0 Dashboard](https://manage.auth0.com) > **Monitoring** > **Metric Streams**.
> 2. All configured streams are listed with their Destination, Status, Name, and Subscriptions.
>
> **Edit a stream:**
>
> 1. Select the stream name from the list.
> 2. Update the configuration.
> 3. Select **Save**.
>
> **Enable/Disable a stream:**
>
> 1. Choose the **Toggle switch** in the Status column to enable or disable the stream.
> 2. Disabled streams stop sending metrics but retain their configuration.
>
> **Delete a stream:**
>
> 1. Select the stream name from the list.
> 2. Select **Delete** at the bottom of the configuration page.
> 3. Confirm deletion.

> [tab] CLI
>
> **List all streams:**
>
> ```bash theme={null}
> auth0 api get /api/v2/metric-streams
> ```
>
> **Disable a stream:**
>
> ```bash theme={null}
> auth0 api patch /api/v2/metric-streams/YOUR_STREAM_ID \
>   --data '{"status":"disabled"}'
> ```
>
> **Re-enable a stream:**
>
> ```bash theme={null}
> auth0 api patch /api/v2/metric-streams/YOUR_STREAM_ID \
>   --data '{"status":"enabled"}'
> ```

## Set up New Relic

Stream Auth0 metrics to New Relic using OpenTelemetry Protocol (OTLP).

### Get New Relic credentials

**1. Find your OTLP endpoint**

Refer to [New Relic's OTLP documentation](https://docs.newrelic.com/docs/opentelemetry/best-practices/opentelemetry-otlp/#configure-endpoint-port-protocol) to find your region-specific endpoint:

* **US:** `https://otlp.nr-data.net`
* **EU:** `https://otlp.eu01.nr-data.net`

Save this endpoint URL.

**2. Create ingest license key**

1. Go to **\[your user menu]** > **API Keys**.
2. Select **Create a key**.
3. Select **Key Type** = **Ingest - License**.
4. Enter a descriptive name and optional note.
5. Select **Create a key**.
6. Copy the API key immediately. You need it for later steps and it won't be shown again.

### Create metric stream

> [tab] Dashboard
>
> **Navigate to Metric Streams:**
>
> 1. Go to [Auth0 Dashboard](https://manage.auth0.com) > **Monitoring** > **Metric Streams**.
> 2. Select **+ Create Metric Stream**.
> 3. Select **OpenTelemetry**.
>
> **Configure stream:**
>
> 1. **Name**: Enter a descriptive name (e.g., `newrelic-production`).
> 2. **Protocol**: Select **HTTP** from the dropdown.
> 3. **OTLP Endpoint**: Paste your New Relic OTLP endpoint (e.g., `https://otlp.nr-data.net`).
> 4. **Authentication Method**: Select **API Key** from the dropdown.
> 5. **Header Name**: Enter `api-key`.
> 6. **API Key**: Paste your New Relic Ingest License Key that you copied from previous steps.
> 7. Select **Save**.
>
> This creates and automatically enables your Metric Stream.

> [tab] CLI
>
> ```bash theme={null}
> auth0 api post metric-streams \
>   --data '{
>     "name": "newrelic-production",
>     "subscriptions": [{ "metric_type": "metrics_bridge.api_request" }],
>     "destination": {
>       "type": "otlp",
>       "configuration": {
>         "endpoint": "YOUR_NEW_RELIC_ENDPOINT",
>         "protocol": "http",
>         "auth_type": "api_key",
>         "api_key": "YOUR_INGEST_LICENSE_KEY",
>         "auth_header_name": "api-key"
>       }
>     }
>   }'
> ```

## Set up Splunk

Stream Auth0 metrics to Splunk Observability Cloud using OpenTelemetry Protocol (OTLP).

### Get Splunk credentials

**1. Find your OTLP endpoint**

Refer to [Splunk's OTLP HTTP Exporter documentation](https://help.splunk.com/en/splunk-observability-cloud/manage-data/splunk-distribution-of-the-opentelemetry-collector/get-started-with-the-splunk-distribution-of-the-opentelemetry-collector/collector-components/exporters/otlphttp-exporter) to find your endpoint.

The endpoint format is:

```
https://ingest.<REALM>.signalfx.com/v2/datapoint/otlp
```

Replace `<REALM>` with your Splunk realm (e.g., `us1`, `eu0`, `jp0`).

**2. Create access token**

1. Navigate to **Settings** > **Access Tokens** > **New Token**.
2. Enter a descriptive name.
3. Set **Authorization Scope** to **INGEST** (required).
4. Set token expiration.
5. Select **Create**.
6. Copy and securely store the token value. You need this value for later steps.

### Create metric stream

> [tab] Dashboard
>
> **Navigate to Metric Streams:**
>
> 1. Go to [Auth0 Dashboard](https://manage.auth0.com) > **Monitoring** > **Metric Streams**.
> 2. Select **+ Create Metric Stream**.
> 3. Select **OpenTelemetry**.
>
> **Configure stream:**
>
> 1. **Name**: Enter a descriptive name (e.g., `splunk-production`).
> 2. **Protocol**: Select **HTTP** from the dropdown.
> 3. **OTLP Endpoint**: Paste your Splunk OTLP endpoint (e.g., `https://ingest.us1.signalfx.com/v2/datapoint/otlp`).
> 4. **Authentication Method**: Select **API Key** from the dropdown.
> 5. **Header Name**: Enter `X-SF-TOKEN`.
> 6. **API Key**: Paste your Splunk access token (from Step 2 above).
> 7. Select **Save**.
>
> The metric stream is created and automatically enabled.

> [tab] CLI
>
> ```bash theme={null}
> auth0 api post metric-streams \
>   --data '{
>     "name": "splunk-production",
>     "subscriptions": [{ "metric_type": "metrics_bridge.api_request" }],
>     "destination": {
>       "type": "otlp",
>       "configuration": {
>         "endpoint": "YOUR_SPLUNK_ENDPOINT",
>         "protocol": "http",
>         "auth_type": "api_key",
>         "api_key": "YOUR_SPLUNK_ACCESS_TOKEN",
>         "auth_header_name": "X-SF-TOKEN"
>       }
>     }
>   }'
> ```

## Troubleshooting

### Metrics not appearing

**Check stream status:**

> [tab] Dashboard
>
> 1. Go to [Auth0 Dashboard](https://manage.auth0.com) > **Monitoring** > **Metric Streams**.
> 2. Find your metric stream in the list.
> 3. Verify the **Status** column shows **Enabled**.
> 4. Select the stream name to view detailed configuration and verify settings.

> [tab] CLI
>
> ```bash theme={null}
> auth0 api get /api/v2/metric-streams/YOUR_STREAM_ID
> ```
>
> Verify the `status` field is `enabled`.

**Verify destination credentials:**

* **Datadog**: Confirm your API key is valid and the site URL matches your Datadog region
* **OTLP destinations**: Verify endpoint URL, authentication token, and header name are correct

**Check for edge caching:**

Remember that cached requests and WAF-blocked requests are not included in metric streams.

### High monitoring costs

If you're seeing unexpectedly high costs:

1. Review which tags you're using in queries and dashboards.
2. Consider removing `client_id` and `connection_id` from aggregations.
3. Use sampling or filtering in your monitoring platform to reduce ingested metrics.
4. Aggregate by higher-level tags like `api` and `operation_result` instead of granular tags.


## Related topics

- [About Metric Streams](https://auth0.com/docs/deploy-monitor/metric-streams.md)
- [Metric Streams Tags Reference](https://auth0.com/docs/deploy-monitor/metric-streams/reference.md)
