> 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-metrics.md).

# VictoriaMetrics

The VictoriaMetrics destination sends metrics from a Bindplane pipeline to a VictoriaMetrics server using the OpenTelemetry protocol over HTTP (OTLP/HTTP). Telemetry is written to the server's `/opentelemetry` ingestion path with protobuf encoding and gzip compression. This destination exports metrics only.

### Supported Telemetry

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

### Prerequisites

You need a reachable VictoriaMetrics server that accepts OpenTelemetry ingestion:

* A VictoriaMetrics single-node or cluster instance reachable from the collector, addressable by hostname or IP and TCP port (single-node defaults to `8428`).
* The OTLP/HTTP ingestion path enabled. VictoriaMetrics accepts OTLP metrics at `/opentelemetry/v1/metrics`; this destination targets the `/opentelemetry` base path and the exporter appends the OTLP metrics suffix.
* Any authentication your server enforces. VictoriaMetrics has no built-in auth on the ingestion path, so credentials are typically applied at a reverse proxy or `vmauth` in front of the server. Supply those as additional request headers (for example an `Authorization` header).
* For TLS, a server certificate trusted by the collector, plus a CA certificate and (for mutual TLS) a client certificate and private key on the collector host.

See the VictoriaMetrics OpenTelemetry integration guide for ingestion details: <https://docs.victoriametrics.com/victoriametrics/integrations/opentelemetry/>.

### Configuration

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

**Connection**

| Parameter | Type    | Required | Default   | Description                                                        |
| --------- | ------- | -------- | --------- | ------------------------------------------------------------------ |
| Hostname  | String  | Yes      | *(empty)* | Hostname or IP address of the VictoriaMetrics server.              |
| Port      | Integer | No       | `8428`    | TCP port to which the exporter sends metrics. Valid range 1–65535. |

**Advanced**

| Parameter          | Type | Required | Default   | Description                                                                                                          |
| ------------------ | ---- | -------- | --------- | -------------------------------------------------------------------------------------------------------------------- |
| Additional Headers | Map  | No       | *(empty)* | Additional headers attached to each request. Use this to pass an `Authorization` header or other proxy/auth headers. |

**TLS**

| Parameter                         | Type    | Required | Default   | Description                                                                                      |
| --------------------------------- | ------- | -------- | --------- | ------------------------------------------------------------------------------------------------ |
| Enable TLS                        | Boolean | No       | `false`   | Use TLS for the connection. When enabled, the endpoint uses `https`.                             |
| 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 CA 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 used 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 used for mutual TLS. Shown when Enable TLS and Mutual TLS are on. |

\* Required only when both 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        | Integer | No       | `5`     | Seconds to wait after the first failure before retrying. Shown when retry is on.                                           |
| Max interval            | Integer | No       | `30`    | Upper bound in seconds on retry backoff. Shown when retry is on.                                                           |
| Max elapsed time        | Integer | No       | `300`   | Maximum seconds spent trying to send a batch before giving up, to avoid a never-ending retry loop. Shown when retry is on. |

**Sending Queue**

| Parameter                 | Type      | Required | Default                                              | Description                                                                                                          |
| ------------------------- | --------- | -------- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| Enable Sending Queue      | Boolean   | No       | `true`                                               | Buffer telemetry before sending to help avoid loss during a temporary network outage.                                |
| Number of Consumers       | Integer   | No       | `10`                                                 | Number of consumers that dequeue batches. Shown when the sending queue is on.                                        |
| Queue Size                | Integer   | No       | `5000`                                               | Maximum number of batches kept in memory before dropping. Shown when the sending queue is on.                        |
| Enable Persistent Queuing | Boolean   | No       | `true`                                               | Buffer telemetry to disk so data survives network outages or collector restarts. Shown when the sending queue is on. |
| Persistent Queue Storage  | Extension | Yes      | File storage at `${OIQ_OTEL_COLLECTOR_HOME}/storage` | Storage extension used for the persistent queue. Shown when both the sending queue and persistent queuing are on.    |

### Examples

#### Send metrics to a single-node VictoriaMetrics server

This destination sends metrics over plaintext HTTP to a VictoriaMetrics server at `victoriametrics.internal:8428`.

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: victoria-metrics
spec:
  type: victoria_metrics
  parameters:
    - name: hostname
      value: victoriametrics.internal
    - name: port
      value: 8428
```

#### Send metrics over TLS with a bearer token

This destination connects over HTTPS, validates the server certificate against a CA file on the collector host, and passes an `Authorization` header for a `vmauth` proxy in front of VictoriaMetrics.

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: victoria-metrics-tls
spec:
  type: victoria_metrics
  parameters:
    - name: hostname
      value: victoriametrics.example.com
    - name: port
      value: 8428
    - name: enable_tls
      value: true
    - name: ca_file
      value: /opt/tls/ca.crt
    - name: headers
      value:
        Authorization: Bearer REPLACE_WITH_TOKEN
```

### Configuration Tips

* Metrics are exported with `proto` encoding and `gzip` compression, matching what the VictoriaMetrics OTLP ingestion path expects. No configuration is needed to change this.
* VictoriaMetrics has no native auth on the ingestion path. Front it with a reverse proxy or `vmauth` and pass credentials through Additional Headers.
* Leave the persistent queue enabled in production so buffered metrics survive collector restarts. The default storage directory is `${OIQ_OTEL_COLLECTOR_HOME}/storage`.

### Troubleshooting

#### Metrics are not arriving at VictoriaMetrics

Symptoms: the destination reports send errors, or no series appear in VictoriaMetrics.

Solutions:

1. Confirm the hostname and port reach the VictoriaMetrics server and that the OTLP ingestion path `/opentelemetry/v1/metrics` is enabled.
2. If a proxy or `vmauth` fronts the server, verify the auth header in Additional Headers is correct and the request is not rejected with a 401/403.

#### TLS handshake failures

Symptoms: connection errors mentioning certificate verification or an unknown authority after Enable TLS is turned on.

Solutions:

1. Provide a CA file that signs the server certificate, or as a temporary measure enable Skip TLS Certificate Verification to confirm TLS is the cause.
2. For mutual TLS, confirm the client certificate and private key paths exist on the collector host and the server is configured to trust the client certificate.

#### Dropped metrics during outages

Symptoms: gaps in metrics after a network interruption or collector restart.

Solutions:

1. Keep the sending queue and persistent queuing enabled so batches buffer to disk instead of being dropped.
2. Increase Queue Size if bursts exceed the in-memory buffer, and confirm the persistent queue storage path is writable.

### Standalone Destination

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: victoria-metrics
spec:
  type: victoria_metrics
  parameters:
    - name: hostname
      value: victoriametrics.internal
    - name: port
      value: 8428
```

### Related Resources

* [OTLP/HTTP Exporter — OpenTelemetry Collector reference](https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/otlphttpexporter/README.md)
* [VictoriaMetrics OpenTelemetry integration guide](https://docs.victoriametrics.com/victoriametrics/integrations/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-metrics.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.
