> For the complete documentation index, see [llms.txt](https://docs.bindplane.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bindplane.com/integrations/destinations/jaeger.md).

# Jaeger

The Jaeger destination configures an OTLP exporter to send traces to a Jaeger server for ingestion. Jaeger accepts OpenTelemetry Protocol (OTLP) data natively since v1.35, so no Jaeger-specific exporter is required. This destination exports traces only.

### Supported Telemetry

| Metrics | Logs | Traces |
| ------- | ---- | ------ |
|         |      | ✓      |

### Prerequisites

You need a reachable Jaeger OTLP endpoint. Jaeger must be started with OTLP ingestion enabled, which exposes the OTLP receiver on port `4317` for gRPC and port `4318` for HTTP. Confirm the Jaeger server is reachable from the collector on the chosen port and protocol. If the endpoint terminates TLS, have the certificate authority file (and a client certificate and key when the server requires mutual TLS) available on the collector host.

See the Jaeger [APIs documentation](https://www.jaegertracing.io/docs/1.76/architecture/apis/) for OTLP port and format details.

### Configuration

<figure><img src="/files/Yqkj59VYRzJcj7XXvdnf" alt="Bindplane docs - Jaeger - image 1"><figcaption></figcaption></figure>

**Traces**

| Parameter | Type             | Required | Default   | Description                                                                        |
| --------- | ---------------- | -------- | --------- | ---------------------------------------------------------------------------------- |
| Hostname  | String           | Yes      | *(empty)* | Hostname or IP address of the Jaeger server.                                       |
| Protocol  | Enum: grpc, http | No       | grpc      | The OTLP protocol to use when sending to the Jaeger server.                        |
| Port      | Integer          | No       | 4317      | Port (gRPC) of the Jaeger server to send OTLP data. Shown when Protocol is `grpc`. |
| Port      | Integer          | No       | 4318      | Port (HTTP) of the Jaeger server to send OTLP data. Shown when Protocol is `http`. |

**Advanced**

| Parameter          | Type | Required | Default   | Description                                                                                                    |
| ------------------ | ---- | -------- | --------- | -------------------------------------------------------------------------------------------------------------- |
| Compression        | Enum | No       | gzip      | Compression algorithm to use when sending data.<sup>1</sup> Ensure the server supports the algorithm selected. |
| Additional Headers | Map  | No       | *(empty)* | Additional headers to attach to each request.                                                                  |

1. *Valid values for gRPC: `none`, `gzip`, `snappy`, `zstd`. For HTTP: `none`, `gzip`, `deflate`, `snappy`, `zlib`, `zstd`.*

**TLS**

| Parameter                          | Type    | Required | Default   | Description                                                                                                                         |
| ---------------------------------- | ------- | -------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| Enable TLS                         | Boolean | No       | false     | Whether or not to use TLS.                                                                                                          |
| Skip TLS Certificate Verification  | Boolean | No       | false     | Skip TLS certificate verification. Shown when Enable TLS is true.                                                                   |
| TLS Certificate Authority File     | String  | No       | *(empty)* | Certificate authority used to validate TLS certificates. Shown when Enable TLS is true and certificate verification is not skipped. |
| Mutual TLS                         | Boolean | No       | false     | Whether or not to use mutual TLS authentication. Shown when Enable TLS is true.                                                     |
| Mutual TLS Client Certificate File | String  | No       | *(empty)* | A TLS certificate used for client authentication. Shown when Mutual TLS is true.                                                    |
| Mutual TLS Client Private Key File | String  | No       | *(empty)* | A TLS private key used for client authentication. Shown when Mutual TLS is true.                                                    |

**Retry on Failure**

| Parameter               | Type    | Required | Default | Description                                                                                                                                 |
| ----------------------- | ------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Enable Retry on Failure | Boolean | No       | true    | Attempt to resend telemetry data that has failed to be transmitted.                                                                         |
| Initial interval        | Integer | No       | 5       | Time (in seconds) to wait after the first failure before retrying. Shown when retry is enabled.                                             |
| Max interval            | Integer | No       | 30      | The upper bound (in seconds) on backoff. Shown when retry is enabled.                                                                       |
| Max elapsed time        | Integer | No       | 300     | The maximum amount of time (in seconds) spent trying to send a batch, used to avoid a never-ending retry loop. Shown when retry is enabled. |

**Sending Queue**

| Parameter                 | Type      | Required | Default                         | Description                                                                                                                                                         |
| ------------------------- | --------- | -------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Enable Sending Queue      | Boolean   | No       | true                            | Buffer telemetry data temporarily before sending to help ensure data is not lost during a temporary network outage.                                                 |
| Number of Consumers       | Integer   | No       | 10                              | Number of consumers that dequeue batches. Shown when the sending queue is enabled.                                                                                  |
| Queue Size                | Integer   | No       | 5000                            | Maximum number of batches kept in memory before dropping. Shown when the sending queue is enabled.                                                                  |
| Enable Persistent Queuing | Boolean   | No       | true                            | Buffer telemetry data to disk before sending to help ensure data is not lost during network outages or collector restarts. Shown when the sending queue is enabled. |
| Persistent Queue Storage  | Extension | Yes      | `file_storage_persistent_queue` | The storage extension to use for the persistent queue. Shown when both the sending queue and persistent queuing are enabled.                                        |

### Examples

#### Export traces over gRPC with TLS and persistent queuing

This destination sends traces to a Jaeger server over gRPC on port `4317`, validates the server certificate against a CA file, and buffers to disk so traces survive a temporary outage or collector restart.

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: jaeger
spec:
  type: jaeger_otlp
  parameters:
    - name: hostname
      value: jaeger.example.com
    - name: protocol
      value: grpc
    - name: grpc_port
      value: 4317
    - name: grpc_compression
      value: gzip
    - name: enable_tls
      value: true
    - name: ca_file
      value: /opt/tls/ca.crt
    - name: retry_on_failure_enabled
      value: true
    - name: sending_queue_enabled
      value: true
    - name: persistent_queue_enabled
      value: true
```

### Configuration Tips

* Match the Port to the Protocol. Jaeger's OTLP receiver listens on `4317` for gRPC and `4318` for HTTP. Sending the wrong protocol to a port results in connection or decode errors.
* Confirm the Jaeger server supports the selected compression algorithm before enabling it. The gRPC and HTTP protocols accept different sets of algorithms.
* Keep the sending queue and persistent queuing enabled for production. Persistent queuing buffers traces to disk so they survive collector restarts and network outages.

### Troubleshooting

#### Traces are not arriving in Jaeger

Symptoms: spans never appear in the Jaeger UI, and the collector logs connection refused or transport errors.

Solutions:

1. Verify the Hostname and Port are reachable from the collector and that the Port matches the Protocol (`4317` gRPC, `4318` HTTP).
2. Confirm Jaeger was started with OTLP ingestion enabled.

#### TLS handshake failures

Symptoms: the collector logs certificate verification or handshake errors when Enable TLS is set.

Solutions:

1. Provide the correct TLS Certificate Authority File, or enable Skip TLS Certificate Verification only for testing.
2. When the server requires mutual TLS, supply both the client certificate and private key files.

#### Spans are dropped under load

Symptoms: trace volume in Jaeger is lower than expected and the collector reports queue-full or dropped data.

Solutions:

1. Increase the sending queue Queue Size, or add consumers with Number of Consumers.
2. Enable persistent queuing so spilled batches buffer to disk instead of being dropped.

### Standalone Destination

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: jaeger
spec:
  type: jaeger_otlp
  parameters:
    - name: hostname
      value: jaeger.example.com
    - name: protocol
      value: grpc
    - name: grpc_port
      value: 4317
    - name: persistent_queue_storage_extension
      value:
        type: file_storage_persistent_queue
        parameters:
          - name: persistent_queue_directory
            value: ${OIQ_OTEL_COLLECTOR_HOME}/storage
          - name: timeout
            value: 1
          - name: persistent_queue_fsync
            value: true
```

### Related Resources

* [OTLP Exporter (gRPC) — OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlpexporter)
* [OTLP/HTTP Exporter — OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlphttpexporter)
* [Jaeger APIs (OTLP ingestion) — Jaeger documentation](https://www.jaegertracing.io/docs/1.76/architecture/apis/)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.bindplane.com/integrations/destinations/jaeger.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
