# SigNoz

SigNoz is an open-source observability platform that provides metrics, traces, and logs so you can monitor applications and infrastructure in one place. This guide shows you how to stream ThousandEyes metrics, traces, and logs to SigNoz using OpenTelemetry (OTel).

For OTLP ingestion, endpoints, and the `signoz-ingestion-key` header on SigNoz Cloud, see [SigNoz Cloud: Ingestion Overview](https://signoz.io/docs/ingestion/signoz-cloud/overview/). For the signals ThousandEyes supports, see [Supported Signals](https://docs.thousandeyes.com/product-documentation/integration-guides/opentelemetry#supported-signals).

## Prerequisites

* You have [created a ThousandEyes test](https://docs.thousandeyes.com/product-documentation/integration-guides/opentelemetry/observability-platforms#create-a-test).
* You have generated a SigNoz ingestion token:
  1. In the SigNoz platform, go to **Settings > Ingestion Settings**.
  2. Click **+ New Ingestion key**.
  3. Enter a **Name**.
  4. Select **an Expiration Date**.
  5. Click **Create new ingestion key** to create your ingestion token.
  6. Copy the token to send telemetry data to SigNoz.
* You have identified your SigNoz OTLP ingestion URLs for metrics, traces, and logs.

  Endpoints depend on your deployment or cloud region.

  * For HTTP, use the OTLP paths `/v1/metrics`, `/v1/traces`, and `/v1/logs` on your SigNoz HTTP receiver port.
  * For gRPC, use your SigNoz gRPC OTLP endpoint (often the same host and port for all signals).

  For example, SigNoz Cloud in the EU might use `https://ingest.eu.signoz.io:4318` for HTTP and `https://ingest.eu.signoz.io:4317` for gRPC.

  Confirm the exact URLs under **Settings > Ingestion** in SigNoz or in the [SigNoz Cloud ingestion overview](https://signoz.io/docs/ingestion/signoz-cloud/overview/).

## Stream OpenTelemetry Metrics to SigNoz

### Step 1: Create a Metrics Integration

#### Using the ThousandEyes UI

1. In ThousandEyes, go to **Manage > Integration 1.0**.
2. Click **+ New Integration** and select **ThousandEyes for OpenTelemetry**.
3. Enter a **Name** for the integration.
4. For **Target Type**, select **HTTP** or **GRPC**. SigNoz supports both.
5. For **Target URL**, enter the URL to send data in OTLP (OpenTelemetry Protocol) format:

   Use the metrics endpoint that corresponds to your SigNoz region or self-hosted deployment. For guidance, see [Send metrics to SigNoz Cloud](https://signoz.io/docs/userguide/send-metrics-cloud/).
6. For **Preset Configurations**, select **Signoz**.
7. For **Auth Type**, select **Custom**.
8. Add the following **Custom Header**: `signoz-ingestion-key: your SigNoz ingestion token`.
9. For the OpenTelemetry **Signal**, select **Metric**.
10. For the **Data Model Version**, select **v2**.
11. Select a **test**.

    For help, see [General Setup Instructions](https://docs.thousandeyes.com/product-documentation/integration-guides/opentelemetry/observability-platforms#general-setup-instructions).
12. Click **Save**.

#### Using the ThousandEyes API

Create the HTTP stream programmatically:

**Using HTTP Protocol**

```curl
curl -v -XPOST https://api.thousandeyes.com/v7/streams \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $BEARER_TOKEN" \
-d '{
  "type": "opentelemetry",
  "testMatch": [{
    "id": "{TEST_ID}",
    "domain": "{DOMAIN}"
  }],
  "endpointType": "http",
  "streamEndpointUrl": "https://ingest.{SIGNOZ_REGION}.signoz.io:4318/v1/metrics",
  "customHeaders": {
    "signoz-ingestion-key": "{SIGNOZ_INGESTION_TOKEN}"
  }
}'
```

**Using gRPC Protocol**

```curl
curl -v -XPOST https://api.thousandeyes.com/v7/streams \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $BEARER_TOKEN" \
-d '{
  "type": "opentelemetry",
  "testMatch": [{
    "id": "{TEST_ID}",
    "domain": "{DOMAIN}"
  }],
  "endpointType": "grpc",
  "streamEndpointUrl": "https://ingest.{SIGNOZ_REGION}.signoz.io:4317",
  "customHeaders": {
    "signoz-ingestion-key": "{SIGNOZ_INGESTION_TOKEN}"
  }
}'
```

Replace `{TEST_ID}`, `{DOMAIN}`, `{SIGNOZ_INGESTION_TOKEN}`, `{SIGNOZ_REGION}`, and the `streamEndpointUrl` values with your test ID, domain (if needed), ingestion token, region, and the OTLP endpoints for your SigNoz environment.

### ThousandEyes Dashboard in SigNoz

1. Download the dashboard template: [Download ThousandEyes SigNoz dashboard template](https://github.com/thousandeyes/thousandeyes-observability-dashboards/blob/main/signoz/ThousandEyesDashboard.json).
2. In SigNoz, go to **Dashboards** and click **+ New dashboard > Import JSON**.
3. Upload the downloaded JSON file or paste its contents.
4. Open the dashboard to visualize ThousandEyes metrics in SigNoz.

![ThousandEyes Dashboard in SigNoz](/files/zHHRSfCLPPAgFH8z7Bj9)

## Stream OpenTelemetry Traces to SigNoz

### Step 1: Create a Traces Integration

#### Using the ThousandEyes UI

1. In ThousandEyes, go to **Manage > Integration 1.0**.
2. Click **+ New Integration** and select **ThousandEyes for OpenTelemetry**.
3. Enter a **Name** for the integration.
4. For **Target Type**, select **HTTP** or **GRPC**. SigNoz supports both.
5. For **Target URL**, enter the URL to send data in OTLP format:

   Use the traces endpoint for your SigNoz region or self-hosted deployment (for example, `https://ingest.eu.signoz.io:4318/v1/traces` for HTTP in the EU).
6. For **Preset Configurations**, select **Signoz**.
7. For **Auth Type**, select **Custom**.
8. Add the following **Custom Header**: `signoz-ingestion-key: your SigNoz ingestion token`.
9. For the OpenTelemetry **Signal**, select **Traces**.
10. Select a **test**.

    See [General Setup Instructions](https://docs.thousandeyes.com/product-documentation/integration-guides/opentelemetry/observability-platforms#general-setup-instructions) if needed.
11. Click **Save**.

#### Using the ThousandEyes API

**Using HTTP Protocol**

```curl
curl -v -XPOST https://api.thousandeyes.com/v7/streams \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $BEARER_TOKEN" \
-d '{
  "type": "opentelemetry",
  "testMatch": [{
    "id": "{TEST_ID}",
    "domain": "{DOMAIN}"
  }],
  "endpointType": "http",
  "signal": "trace",
  "streamEndpointUrl": "https://ingest.{SIGNOZ_REGION}.signoz.io:4318/v1/traces",
  "customHeaders": {
    "signoz-ingestion-key": "{SIGNOZ_INGESTION_TOKEN}"
  }
}'
```

**Using gRPC Protocol**

```curl
curl -v -XPOST https://api.thousandeyes.com/v7/streams \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $BEARER_TOKEN" \
-d '{
  "type": "opentelemetry",
  "testMatch": [{
    "id": "{TEST_ID}",
    "domain": "{DOMAIN}"
  }],
  "endpointType": "grpc",
  "signal": "trace",
  "streamEndpointUrl": "https://ingest.{SIGNOZ_REGION}.signoz.io:4317",
  "customHeaders": {
    "signoz-ingestion-key": "{SIGNOZ_INGESTION_TOKEN}"
  }
}'
```

Replace `{TEST_ID}`, `{DOMAIN}`, `{SIGNOZ_INGESTION_TOKEN}`, `{SIGNOZ_REGION}`, and the `streamEndpointUrl` values with your test ID, domain (if needed), ingestion token, region, and the OTLP endpoints for your SigNoz environment.

### Step 2: Visualize Traces in SigNoz

1. In SigNoz, go to **Traces**.
2. Use filters or search to find ThousandEyes trace data (duration, errors, service name, etc.).

## Stream OpenTelemetry Logs to SigNoz

### Step 1: Create a Logs Integration

#### Using the ThousandEyes UI

1. In ThousandEyes, go to **Manage > Integration 1.0**.
2. Click **+ New Integration** and select **ThousandEyes for OpenTelemetry**.
3. Enter a **Name** for the integration.
4. For **Target Type**, select **HTTP** or **GRPC**. SigNoz supports both.
5. For **Target URL**, enter the URL to send data in OTLP format:

   Use the logs endpoint for your SigNoz region or self-hosted deployment (for example, `https://ingest.eu.signoz.io:4318/v1/logs` for HTTP in the EU).
6. For **Preset Configurations**, select **Signoz**.
7. For **Auth Type**, select **Custom**.
8. Add the following **Custom Header**: `signoz-ingestion-key: your SigNoz ingestion token`.
9. For the OpenTelemetry **Signal**, select **Log**.
10. Select a **test**.

    For details, see [General Setup Instructions](https://docs.thousandeyes.com/product-documentation/integration-guides/opentelemetry/observability-platforms#general-setup-instructions).
11. Click **Save**.

#### Using the ThousandEyes API

**Using HTTP Protocol**

```curl
curl -v -XPOST https://api.thousandeyes.com/v7/streams \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $BEARER_TOKEN" \
-d '{
  "type": "opentelemetry",
  "testMatch": [{
    "id": "{TEST_ID}",
    "domain": "{DOMAIN}"
  }],
  "endpointType": "http",
  "signal": "log",
  "streamEndpointUrl": "https://ingest.{SIGNOZ_REGION}.signoz.io:4318/v1/logs",
  "customHeaders": {
    "signoz-ingestion-key": "{SIGNOZ_INGESTION_TOKEN}"
  }
}'
```

**Using gRPC Protocol**

```curl
curl -v -XPOST https://api.thousandeyes.com/v7/streams \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $BEARER_TOKEN" \
-d '{
  "type": "opentelemetry",
  "testMatch": [{
    "id": "{TEST_ID}",
    "domain": "{DOMAIN}"
  }],
  "endpointType": "grpc",
  "signal": "log",
  "streamEndpointUrl": "https://ingest.{SIGNOZ_REGION}.signoz.io:4317",
  "customHeaders": {
    "signoz-ingestion-key": "{SIGNOZ_INGESTION_TOKEN}"
  }
}'
```

Replace `{TEST_ID}`, `{DOMAIN}`, `{SIGNOZ_INGESTION_TOKEN}`, `{SIGNOZ_REGION}`, and the `streamEndpointUrl` values with your test ID, domain (if needed), ingestion token, region, and the OTLP endpoints for your SigNoz environment.

### Step 2: Visualize Logs in SigNoz

1. In SigNoz, go to **Logs**.
2. Search or use filters to find ThousandEyes log data (body, timestamp, attributes, etc.).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.thousandeyes.com/product-documentation/integration-guides/opentelemetry/observability-platforms/signoz.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
