> 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/victoria-logs.md).

# VictoriaLogs

The VictoriaLogs destination sends logs from a Bindplane pipeline to a VictoriaLogs server using the OTLP/HTTP protocol. It posts gzip-compressed, protobuf-encoded OTLP logs to the VictoriaLogs OpenTelemetry ingestion endpoint. Logs are the only signal this destination exports.

### Supported Telemetry

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

### Prerequisites

* A reachable VictoriaLogs server, addressed by hostname or IP and a TCP port (the OTLP ingestion port defaults to `9428`). Bindplane sends to the `/insert/opentelemetry` path on that endpoint.
* Any authentication or TLS the server requires. VictoriaLogs does not require credentials by default. If the endpoint sits behind a reverse proxy, a managed gateway, or VictoriaLogs Cloud, supply the bearer token, basic-auth header, or tenant header it expects through Additional Headers, and configure TLS if the endpoint is HTTPS.

See the VictoriaLogs [OpenTelemetry data ingestion docs](https://docs.victoriametrics.com/victorialogs/data-ingestion/opentelemetry/) for endpoint and header details.

### Configuration

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

**Connection**

| Parameter | Type   | Required | Default   | Description                                                  |
| --------- | ------ | -------- | --------- | ------------------------------------------------------------ |
| Hostname  | String | Yes      | *(empty)* | Hostname or IP address of the VictoriaLogs server.           |
| Port      | Int    | Yes      | `9428`    | TCP port the destination sends logs to. Valid range 1–65535. |

**Advanced**

| Parameter          | Type | Required | Default   | Description                                                                                                                          |
| ------------------ | ---- | -------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Additional Headers | Map  | No       | *(empty)* | Extra headers attached to each request. Use for an auth token, basic-auth header, or a tenant header when the endpoint requires one. |

**TLS**

| Parameter                         | Type    | Required | Default   | Description                                                                                                  |
| --------------------------------- | ------- | -------- | --------- | ------------------------------------------------------------------------------------------------------------ |
| Enable TLS                        | Boolean | No       | `false`   | Use TLS for the connection. When enabled, the endpoint is sent over `https`; otherwise over `http`.          |
| Skip TLS Certificate Verification | Boolean | No       | `false`   | Skip verification of the server's certificate. Shown when Enable TLS is on.                                  |
| TLS Certificate Authority File    | String  | No       | *(empty)* | Path to a certificate authority file used to validate the server's certificate. Shown when Enable TLS is on. |
| Mutual TLS                        | Boolean | No       | `false`   | Use client TLS authentication (mTLS). Shown when Enable TLS is on.                                           |
| TLS Client Certificate File       | String  | Yes      | *(empty)* | Path to the client certificate for mutual TLS. Shown when Enable TLS and Mutual TLS are on.                  |
| TLS Client Private Key            | String  | Yes      | *(empty)* | Path to the client private key for mutual TLS. Shown when Enable TLS and Mutual TLS are on.                  |

**Retry on Failure**

| Parameter               | Type    | Required | Default | Description                                                                                                                     |
| ----------------------- | ------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Enable Retry on Failure | Boolean | No       | `true`  | Resend telemetry that failed to transmit to the destination.                                                                    |
| Initial interval        | Int     | No       | `5`     | Seconds to wait after the first failure before retrying. Shown when Retry on Failure is on.                                     |
| Max interval            | Int     | No       | `30`    | Upper bound in seconds on the retry backoff. Shown when Retry on Failure is on.                                                 |
| Max elapsed time        | Int     | No       | `300`   | Maximum seconds spent retrying a batch before giving up, to avoid a never-ending retry loop. Shown when Retry on Failure is on. |

**Sending Queue**

| Parameter                 | Type      | Required | Default                                              | Description                                                                                                      |
| ------------------------- | --------- | -------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| Enable Sending Queue      | Boolean   | No       | `true`                                               | Buffer telemetry before sending so data is not lost during a temporary network outage.                           |
| Number of Consumers       | Int       | No       | `10`                                                 | Number of consumers that dequeue batches. Shown when Sending Queue is on.                                        |
| Queue Size                | Int       | No       | `5000`                                               | Maximum number of batches held in memory before new ones are dropped. Shown when Sending Queue is on.            |
| Enable Persistent Queuing | Boolean   | No       | `true`                                               | Buffer telemetry to disk so data survives network outages or collector restarts. Shown when Sending Queue is on. |
| Persistent Queue Storage  | Extension | Yes      | File storage at `${OIQ_OTEL_COLLECTOR_HOME}/storage` | Storage extension backing the persistent queue. Shown when Sending Queue and Persistent Queuing are on.          |

### Examples

#### Send logs to a VictoriaLogs server over plain HTTP

Point the destination at a VictoriaLogs server reachable on the default ingestion port. No TLS or auth is configured, which suits an in-cluster or trusted-network endpoint.

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: victoria-logs
spec:
  type: victoria_logs
  parameters:
    - name: hostname
      value: victoria-logs.internal
    - name: port
      value: 9428
```

#### Send logs over TLS with a tenant header

Enable TLS and attach an auth header for a VictoriaLogs endpoint fronted by a gateway that expects a bearer token.

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: victoria-logs
spec:
  type: victoria_logs
  parameters:
    - name: hostname
      value: logs.example.com
    - name: port
      value: 443
    - name: enable_tls
      value: true
    - name: headers
      value:
        Authorization: Bearer REPLACE_WITH_TOKEN
```

### Configuration Tips

* VictoriaLogs ingests over OTLP/HTTP at the `/insert/opentelemetry` path. Bindplane builds that path automatically, so set only the hostname and port. The scheme follows the Enable TLS setting (`https` when on, `http` when off).
* The destination sends protobuf-encoded logs with gzip compression by default, which lowers egress bandwidth to the server.
* Leave the sending queue and persistent queue enabled for production. Persistent queuing buffers logs to disk so a collector restart or a VictoriaLogs outage does not drop data.

### Troubleshooting

#### Connection refused or no logs arriving

Symptoms: the collector logs connection-refused or timeout errors, and no logs appear in VictoriaLogs.

Solutions:

1. Confirm the hostname and port reach the VictoriaLogs OTLP listener (default `9428`), and that no firewall blocks the path.
2. Confirm Enable TLS matches the endpoint's scheme. A TLS-enabled destination sends `https`; a server listening on plain HTTP rejects it, and vice versa.

#### TLS certificate errors

Symptoms: handshake failures or certificate-verification errors when Enable TLS is on.

Solutions:

1. Provide the server's CA in the TLS Certificate Authority File, or for a self-signed test endpoint enable Skip TLS Certificate Verification.
2. For mutual TLS, confirm both the TLS Client Certificate File and TLS Client Private Key are set and readable by the collector.

#### Logs are dropped under load

Symptoms: the collector reports dropped batches or a full queue while VictoriaLogs is slow or briefly unreachable.

Solutions:

1. Increase Queue Size, or raise Number of Consumers to drain batches faster.
2. Keep Persistent Queuing enabled so buffered logs survive restarts instead of being lost from memory.

### Standalone Destination

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: victoria-logs
spec:
  type: victoria_logs
  parameters:
    - name: hostname
      value: victoria-logs.internal
    - name: port
      value: 9428
```

### Related Resources

* [OTLP/HTTP Exporter (otlphttpexporter)](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlphttpexporter)
* [VictoriaLogs OpenTelemetry data ingestion](https://docs.victoriametrics.com/victorialogs/data-ingestion/opentelemetry/)


---

# 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/victoria-logs.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.
