Skip to content
Go back

Loki vs Vector for Log Shipping

By SumGuy 10 min read
Loki vs Vector for Log Shipping
Contents

Promtail Was Fine Until It Wasn’t

Promtail wins if Loki is your only destination and your logs are already simple, and Vector wins the moment you need multiple destinations, in-agent transforms, or redaction.

You’ve got logs flooding in from containers, servers, and applications. You set up Promtail, Grafana’s purpose-built agent for Loki, and it’s been humming along fine for months. Dead simple. Scrape logs, attach labels, ship to Loki. Done.

Then someone asks: “Why are we not archiving cold logs to S3?” Or: “Can we forward these security events to a separate system?” Or worse: “The overhead on that edge node is killing us; we need filtering.”

And you realize Promtail isn’t really designed for that. It’s the specialized pickup truck for one job: grab logs, label ‘em, send to Loki. Which is great until you need the pickup truck to also carry building materials and tow a trailer.

Enter Vector. Datadog’s open-source observability agent: the Swiss Army knife of log shipping. It transforms logs, fans them out to multiple sinks, filters, samples, and does it all in a single binary with zero runtime overhead.

Vector isn’t Loki’s replacement. It’s Promtail’s replacement, the agent that ships logs to Loki. The confusion is real, and it matters for your architecture.


Which Log Shipper Should You Actually Deploy?

PromtailVector
StatusEOL since March 2026, no patchesActively maintained
Footprint~20 to 30 MB memory~50 to 150 MB memory
DestinationsLoki onlyLoki, S3, Kafka, Splunk, and more
TransformsMinimal, relabeling onlyVRL: parse, redact, sample
Best fitSimple, Loki-only setupsMulti-destination, complex pipelines

What’s a Log Shipper, Really?

Before we get into the face-off, let’s nail what these tools actually do.

A log shipping agent sits on your servers or in your containers. Its job is:

  1. Scrape logs from files, journald, syslog, containers, wherever
  2. Parse unstructured blobs into structured data (if you’re smart about it)
  3. Enrich with metadata: hostnames, service names, environment labels
  4. Transform if needed: redact secrets, drop spam, sample high-volume streams
  5. Ship to a backend: Loki, S3, Datadog, Splunk, Kafka, wherever

Promtail does 1, 3, and 5 beautifully. It’s laser-focused. Vector does all five and then some.


Promtail: The Specialist Tool

Promtail is Grafana’s agent for Loki. Built for one job. Here’s what it brings:

The Good

The Problem

Here’s where the honest truth gets uncomfortable: Promtail is dead. It hit end-of-life on March 2, 2026: no more security patches, no more bug fixes, nothing. Grafana moved everyone to Alloy, their unified telemetry collector (logs, metrics, traces, profiles, all in one). Promtail’s binary still runs, but you’re running unpatched software now, and that’s a different risk calculation than “maintenance mode.”

If you’re starting fresh, Alloy is the play (Grafana ships a convert command to translate your old Promtail config). But Alloy is heavier, more complex, and if you only need logs, you’re paying for features you won’t touch.

Real talk: Promtail’s biggest limitation is inflexibility. You’re limited to what it can do out of the box. Parsing complex JSON logs? You can do it, but it’s clunky. Redacting sensitive data? There’s no built-in secret-scrubber. Sampling to reduce cardinality? Nope. Multi-destination shipping? Absolutely not.


Vector: The Flexible Heavy

Vector is Datadog’s open-source Swiss Army knife. It’s not built for Loki, it’s built to ship logs (and metrics, and traces) to anywhere.

The Good

The Catch


The Real Showdown: When Do You Pick Each?

Pick Promtail if:

Pick Vector if:


A Concrete Example: Loki + Vector

Here’s what a minimal Vector config looks like shipping to Loki:

sources:
docker_logs:
type: docker_logs
transforms:
parse_json:
type: remap
inputs: [docker_logs]
source: |
. = parse_json!(.message)
if exists(.password) {
.password = redact(string!(.password), filters: [r'\S+'])
}
sinks:
loki_hot:
type: loki
inputs: [parse_json]
endpoint: "http://loki:3100"
encoding:
codec: json
labels:
service: "{{ service }}"
environment: "production"
s3_archive:
type: aws_s3
inputs: [parse_json]
bucket: "logs-archive"
key_prefix: "logs/{{ year }}/{{ month }}/{{ day }}/"
compression: gzip
encoding:
codec: json

One Vector binary. Two sinks. JSON parsing, redaction, and labeling, all declarative. Loki gets hot logs. S3 gets the archive. Done in about 30 lines.

Compare that to Promtail: you can’t do the S3 piece. You’d need a separate tool (Fluent Bit, Filebeat, rsyslog) for the archive path. Suddenly you’re managing two agents and two configs.


The Label Cardinality Trap (Applies to Both)

Here’s where both agents can burn you: unbounded label cardinality.

Loki stores logs indexed by labels. If you attach a unique label value on every log (like a request ID or timestamp), you’ve created a cardinality explosion. Loki will either OOM or become unusable.

# BAD — don't do this
relabel_configs:
- source_labels: [__docker_label_request_id]
target_label: request_id

If request_id is unique per log, you’ve wrecked yourself.

Both Promtail and Vector let you shoot yourself in the foot here. The fix is the same: be disciplined about labels. Attach labels for dimensions you’ll actually query by, like service, environment, version, region. Don’t attach event-level cardinality. That’s what the log body is for.

Vector’s VRL makes this easier to control explicitly:

.service = "my-app"
.env = "prod"
del(.request_id) # drop the high-cardinality field before it becomes a label

Promtail forces you into Prometheus relabeling, which is more implicit.


Fluent Bit: The Third Player (Briefly)

One mention: Fluent Bit is another option. It’s lightweight, mature, and widely used. But it’s not Loki-native, and its output plugin ecosystem is more fragmented. If you’re doing multi-destination shipping, Vector’s VRL + unified config is cleaner. If you’re purely Loki and want something between Promtail and Vector, Fluent Bit works, but Vector’s overhead is worth the flexibility.


Performance and Resource Reality

In production, here’s what matters:

If you’re scraping gigabytes of logs per second, Vector’s transform logic adds maybe 5% overhead. Not a blocker.

The real question isn’t resource usage, it’s operational complexity. More config means more bugs. More tooling means more to maintain.


Alloy: The Future (If You’re Starting Now)

If you’re planning a greenfield observability stack, Alloy is worth serious consideration. It’s Grafana’s unified telemetry collector, handling logs, metrics, traces, profiles, all in one. It’s meant to replace Promtail, Grafana Agent, and eventually more.

But Alloy is newer, has a smaller community, and is heavier than Promtail. Unless you’re already using Grafana for metrics and traces, it’s overkill.

For pure log shipping in 2026? Vector or Promtail, and that choice depends on your architecture, not on Alloy.


Pick the Shipper That Survives Your Workload

Here’s my honest take:

Promtail still works if you’re using Loki and your logs are simple. It’s lightweight and it ships logs reliably. But it’s officially EOL as of March 2026 with no patches coming, so for anything new I’d reach for Alloy instead. Promtail is now a “keep it running if it’s already running” tool, not a “deploy it fresh” one.

Vector is the play if you need flexibility. Multi-destination shipping, complex transforms, VRL-based redaction: Vector handles all of it in one agent. Yes, it’s heavier and more complex. But if you’re doing observability at any real scale, you’re probably doing all three anyway.

The mistake I see most: picking the wrong tool for the wrong reasons. Don’t pick Promtail because “it’s simpler” if you actually need transforms. Don’t pick Vector because “it’s fancy” if you’re going to run Loki and nothing else.

Know your requirements. Make the call. Move on.

Your future self, the one debugging a log shipping bottleneck at 2 AM, will appreciate the clarity.


Share this post on:

Send a Webmention

Written about this post on your own site? Send a webmention and it'll show up above once verified.


Previous Post
Mimir + Grafana: Long-Term Prometheus Storage
Next Post
Prometheus Federation for Multi-Site Home Labs

Discussion

Powered by Garrul . Sign in with GitHub or Google, or post anonymously.

Related Posts