VictoriaLogs only supports OTLP over HTTP (not gRPC). Make sure to select HTTP as the protocol when creating the destination.
Prerequisites
- A running VictoriaLogs instance (managed or self-hosted)
- A Sawmills pipeline with a log source configured (e.g., OTLP, Loki, Datadog)
VictoriaLogs Cloud (Managed)
1. Get your VictoriaLogs Cloud credentials
- Log in to VictoriaMetrics Cloud
- Create a VictoriaLogs deployment (type: “Vlogs single”)
- Note the Access endpoint from the deployment overview (e.g.,
https://gw-c21-1a.cloud.victoriametrics.com) - Go to the Access Tokens tab and copy your deployment access token
2. Create an OTLP destination in Sawmills
Navigate to your pipeline, click + Add Destination, select OTLP, and fill in:3. Configure authentication
Expand Advanced Options and under Additional Headers, click + Add Header:
Leave the other advanced settings at their defaults:
- Timeout: 30 seconds
- Compression: gzip
4. Deploy and verify
- Click Save, then deploy the pipeline
- Send test logs through your pipeline source
- Verify logs arrive in VictoriaLogs using the Explore tab in VictoriaMetrics Cloud, or query via the API:
VictoriaLogs Self-Hosted
1. Identify your VictoriaLogs endpoint
The default OTLP ingestion endpoint for self-hosted VictoriaLogs is:/v1/logs automatically when sending log data.
If VictoriaLogs runs in the same Kubernetes cluster as the Sawmills collector, use the in-cluster DNS:
2. Create an OTLP destination in Sawmills
Navigate to your pipeline, click + Add Destination, select OTLP, and fill in:
No authentication headers are needed for self-hosted VictoriaLogs (unless you have placed an auth proxy like
vmauth in front of it).
3. Deploy and verify
- Click Save, then deploy the pipeline
- Query VictoriaLogs to confirm logs are arriving:
Multi-Tenancy
VictoriaLogs supports multi-tenancy viaAccountID and ProjectID HTTP headers. Tenants are created implicitly on first write — no server-side setup required.
When to use multi-tenancy
- Isolate logs by team, environment, or business unit within a shared VictoriaLogs instance
- Separate infrastructure logs from application logs
- Provide per-tenant query isolation (each tenant can only see its own data)
How to configure
Create a separate OTLP destination for each tenant, all pointing to the same VictoriaLogs endpoint. Under Advanced Options → Additional Headers, set:
Example setup with two tenants:
Destination 1 — “VL Infra Logs”
Destination 2 — “VL App Logs”
Then use Sawmills filter rules on each destination to route the right logs to each tenant (e.g., filter by
service.name, k8s.namespace.name, or other attributes).
Querying a specific tenant
Pass the sameAccountID header when querying to isolate reads:
If no
AccountID header is set, logs are stored and queried under the default tenant (0, 0). ProjectID is an optional second dimension for finer grouping within an account.Multi-tenancy with VictoriaLogs Cloud
VictoriaMetrics Cloud uses deployment-level isolation — each deployment is a separate tenant. Multi-tenancy viaAccountID/ProjectID headers is typically not needed. Create separate Cloud deployments if you need tenant isolation.
How it works
The data flow through Sawmills is:otlphttp exporter to send logs. VictoriaLogs receives them at its /insert/opentelemetry/v1/logs endpoint using protobuf encoding.
What gets preserved:
- All OpenTelemetry resource attributes (e.g.,
service.name,host.name,k8s.*) - Log severity and body
- Scope name and version
- Sawmills-injected metadata (
sawmills.pipeline_id,sawmills.pipeline_name,sawmills.collector_id)
VL-Stream-Fields header (comma-separated field names) under Additional Headers.