Observabilityintermediate

Prometheus vs VictoriaMetrics

Prometheus vs VictoriaMetrics compared on storage, retention, high availability, clustering, PromQL vs MetricsQL, agents, alerting and enterprise features, using Prometheus 3.15.1 and VictoriaMetrics v1.154.1.

Quick Answer

Keep Prometheus if one server per cluster with a few weeks of retention covers you: it is the reference implementation of PromQL, ships an OTLP receiver and an LTS line, and every exporter and dashboard targets it. Add or switch to VictoriaMetrics when you need months of retention, one place to query many Prometheus servers, or a horizontally scaled cluster: it accepts Prometheus remote write, scrapes prometheus.yml, answers the Prometheus query API and keeps 31 days by default. Downsampling and multiple retentions are Enterprise-only.

Last updated October 26, 2026. Covers Prometheus 3.15.1 and 3.13.5 LTS (21 Oct 2026) and VictoriaMetrics v1.154.1 (19 Oct 2026), with the Prometheus storage, agent, OTLP and release-cycle docs and the VictoriaMetrics single-node, cluster, MetricsQL, vmagent, vmalert and Enterprise docs.

Feature comparison of Prometheus vs VictoriaMetrics
FeaturePrometheusVictoriaMetrics
Licence
Apache-2.0
Apache-2.0 (community); commercial Enterprise edition
Latest Release (Oct 2026)
v3.15.1 (21 Oct 2026)
v1.154.1 (19 Oct 2026)
Long-Term Support
Yes: 3.13 LTS until 31 Jul 2027; minors every 6 weeks
LTS releases with Enterprise
Storage Model
Local TSDB with WAL, single node
Single-node binary or vminsert/vmselect/vmstorage cluster
Default Retention
15 days (time or size based)
31 days (-retentionPeriod, min 24h)
High Availability
Run duplicate servers; Alertmanager clusters and deduplicates alerts
Cluster -replicationFactor or replicated disks; vmagent can write to two instances
Horizontal Scaling
Not built in (remote storage needed)
Yes (cluster version)
Query Language
PromQL (reference)
MetricsQL (PromQL-compatible superset) + Prometheus query API
Ingestion Protocols
Scrape (Prometheus/OpenMetrics), OTLP receiver, remote write receiver
Prometheus remote write, OTLP, Influx, Graphite, OpenTSDB, DataDog, NewRelic, CSV, JSON
Scraping
Built in, full service discovery
Built in (-promscrape.config) and in vmagent
Lightweight Agent
Agent mode (--agent): no querying, alerting or local storage
vmagent: relabeling, disk buffering, stream aggregation, multi-remote
Alerting / Recording Rules
Built-in rules engine + Alertmanager
vmalert (Prometheus rule syntax) + Alertmanager
Multi-Tenancy
No
Cluster version (accountID/projectID)
Downsampling
Enterprise only
Backups
TSDB snapshot endpoint (needs --web.enable-admin-api)
vmbackup/vmrestore snapshots; automation in Enterprise

Prometheus

Apache-2.0-licensed monitoring system and time-series database written in Go. It scrapes targets, stores samples in a local TSDB, evaluates PromQL and recording/alerting rules, and hands alerts to Alertmanager.

Pros

  • Reference implementation of PromQL; every exporter, Helm chart and Grafana dashboard assumes it
  • LTS line: 3.13 is supported until 31 Jul 2027, and 3.13.5 shipped alongside 3.15.1 on 21 Oct 2026
  • Native OTLP receiver (--web.enable-otlp-receiver) at /api/v1/otlp/v1/metrics, with resource-attribute promotion
  • Agent mode (--agent) turns the same binary into a scrape-and-forward agent with a WAL buffer
  • Remote write and remote read let you keep Prometheus at the edge and put long-term data elsewhere
  • 3.15 added Unix socket scraping, the OpenMetrics 2.0 scrape format and a stable XOR2 chunk encoding

Cons

  • The storage docs say local storage is not clustered or replicated and is not durable against drive or node outages
  • Default retention is 15 days; longer history means more local disk or a remote storage system
  • No built-in global view across many Prometheus servers; that takes Thanos, Cortex, Mimir or VictoriaMetrics
  • No downsampling in Prometheus itself
  • OTLP receiver is off by default because Prometheus has no built-in authentication

Best For

One Prometheus per cluster or environment with days to weeks of retention, and teams that want the standard, vendor-neutral setup.

VictoriaMetrics

Apache-2.0-licensed time-series database and monitoring stack written in Go, available as a single-node binary or a vminsert/vmselect/vmstorage cluster, with vmagent, vmalert and vmauth as companions and a paid Enterprise edition.

Pros

  • Drop-in remote storage for Prometheus and implements the Prometheus query API, so Grafana's Prometheus datasource keeps working
  • Single-node binary can scrape a prometheus.yml itself via -promscrape.config
  • Default retention is 31 days, with a single -retentionPeriod flag for longer
  • Ingests Prometheus remote write, InfluxDB line protocol, Graphite, OpenTSDB, OpenTelemetry, DataDog, NewRelic, CSV and JSON
  • Cluster version scales vmstorage horizontally, adds -replicationFactor and multi-tenancy via accountID/projectID
  • vmagent buffers to disk when remote storage is down and can replicate to several remote-write targets

Cons

  • Downsampling, multiple retentions, backup automation and mTLS between cluster components are Enterprise-only
  • MetricsQL differs from PromQL in edge cases: no rate/increase extrapolation and NaN results are dropped
  • The cluster needs at least 2N-1 vmstorage nodes to keep replication factor N with N-1 nodes down, and the docs suggest 10+ storage nodes
  • Single-node has no replication; durability depends on the disk underneath plus vmbackup snapshots
  • Its resource-efficiency figures (up to 7x less RAM and storage than Prometheus) are the vendor's own claims

Best For

Long retention, many Prometheus servers that need one query endpoint, high-cardinality workloads, and teams that want to scale out metrics storage without Thanos or Mimir.

Where Prometheus storage stops

Prometheus keeps samples in a local TSDB, with a write-ahead log protecting data that is still in memory. Its storage docs are direct about the limits: local storage is not clustered or replicated, so it is not arbitrarily scalable or durable in the face of drive or node outages. Retention defaults to 15 days unless you set --storage.tsdb.retention.time or --storage.tsdb.retention.size, and the docs estimate 1 to 2 bytes per sample for sizing disk. The usual answer to these limits is remote write. Prometheus sends every ingested sample to a remote endpoint and can read it back with remote read, so the local TSDB becomes a short buffer while history lives elsewhere. Prometheus can also run in agent mode with --agent, which disables querying, alerting and local storage and keeps only a WAL until data is delivered. For availability, there is no built-in replication; the common pattern is to run two identical Prometheus servers. Alertmanager handles the duplicate alerts: its docs say it deduplicates, groups and routes alerts from clients such as Prometheus, and that Alertmanagers can form their own HA cluster. Prometheus should be pointed at the full list of Alertmanagers, not at a load balancer. Querying two replicas or many clusters as one is where Thanos, Mimir or VictoriaMetrics comes in.

VictoriaMetrics single-node versus cluster

VictoriaMetrics ships the same storage engine in two shapes. Single-node is one binary that accepts Prometheus remote write and many other protocols, answers the Prometheus query API, and can scrape targets from a prometheus.yml with -promscrape.config. Its -retentionPeriod defaults to 31 days with a 24-hour minimum. Backups are instant snapshots archived with vmbackup and restored with vmrestore. The cluster splits work across vminsert, vmselect and vmstorage. vminsert spreads series across storage nodes by consistent hashing on the metric name and labels, vmselect fans queries out to all storage nodes, and storage nodes share nothing. Durability is left to the disks by default; -replicationFactor=N on vminsert stores N copies on distinct nodes, which needs at least 2N-1 vmstorage nodes to tolerate N-1 failures and can multiply resource use by up to N. The docs add that replication does not replace backups. The cluster also brings multi-tenancy, with tenants identified by accountID and optional projectID and created on first write. The docs recommend single-node below about a million data points per second ingestion because it is simpler to run, and suggest at least 10 vmstorage nodes if you do run a cluster.

PromQL versus MetricsQL in practice

VictoriaMetrics describes MetricsQL as backwards-compatible with PromQL, so dashboards built on Grafana's Prometheus datasource should keep working after pointing them at VictoriaMetrics. The differences that show up in real dashboards are documented. First, MetricsQL does not extrapolate rate() and increase(). Prometheus extrapolates to the window edges, so a counter that went up by 3 can show a fractional increase such as 3.2; MetricsQL returns the integer you expect. It also counts the last raw sample before the lookbehind window, which Prometheus ignores. Alerts with thresholds tuned against Prometheus output can therefore fire slightly differently, so recheck them during migration. Second, MetricsQL drops NaN values from results, where Prometheus returns NaN series. Grafana draws nothing for NaN anyway, so graphs usually look the same, but alert expressions that test for NaN behave differently. Third, MetricsQL lets you omit the square-bracket window in rollup functions and picks one from the step and scrape interval, and it adds functions PromQL lacks. Using them ties your queries to VictoriaMetrics, so teams that want to stay portable often restrict themselves to PromQL syntax. The docs ask users to file issues for any other PromQL discrepancy.

Agents, alerting and the Enterprise line

On the collection side, both projects have an agent. Prometheus agent mode keeps Prometheus's service discovery and relabeling and forwards everything over remote write. vmagent does the same with Prometheus-style scrape configs, and adds disk buffering at -remoteWrite.tmpDataPath when the remote is down, replication or sharding across several remote-write targets, and stream aggregation before data leaves the node. It switches to the standard Prometheus remote write protocol when the target is not VictoriaMetrics, so it can also feed other backends. For rules, Prometheus evaluates alerting and recording rules in-process. VictoriaMetrics moves this to vmalert, which uses Prometheus rule syntax, queries one datasource over the Prometheus HTTP API, writes recording-rule results by remote write and sends alerts to the same Alertmanager. Existing rule files usually move over unchanged. The catch is the Enterprise edition. Downsampling, multiple retention periods, backup automation, anomaly detection, mTLS between cluster components, Kafka and Google PubSub integrations, multi-tenant vmalert, advanced vmauth features and FIPS builds are Enterprise-only, with pricing by contact and trial licences for non-production evaluation. If keeping a year of data cheaply depends on downsampling, price Enterprise before you commit.

Verdict

Use Prometheus on its own if each cluster or environment has one Prometheus, you query them separately, and 15 days to a few weeks of history is enough. It is the standard, it has an LTS line, and nothing in your exporters, alerts or dashboards needs translating. Add VictoriaMetrics as remote storage once you need months of retention, a single query endpoint across many Prometheus servers or clusters, or storage that survives the loss of one node; keep Prometheus or switch to vmagent for scraping. Replace Prometheus outright with single-node VictoriaMetrics when you want one binary that scrapes, stores and serves queries with a 31-day default and simple retention settings. Go to the VictoriaMetrics cluster only when ingestion approaches a million data points per second, the threshold below which its own docs recommend single-node. If you need downsampling, budget for VictoriaMetrics Enterprise or look elsewhere.

All Comparisons

Prometheus vs VictoriaMetrics — FAQ

Common questions answered from the comparison above

Is VictoriaMetrics a drop-in replacement for Prometheus?

Largely. It accepts Prometheus remote write, can scrape a prometheus.yml with -promscrape.config, and implements the Prometheus query API, so Grafana's Prometheus datasource works. MetricsQL differs from PromQL in a few cases, notably rate/increase extrapolation and NaN handling, so recheck alert thresholds.

Can I use VictoriaMetrics as long-term storage for Prometheus?

Yes. Point Prometheus remote_write at VictoriaMetrics and keep a short local retention in Prometheus. Grafana then queries VictoriaMetrics for history and for a view across all Prometheus servers that write to it.

How long does Prometheus keep data by default?

15 days, unless you set --storage.tsdb.retention.time or --storage.tsdb.retention.size. VictoriaMetrics single-node keeps 31 days by default via -retentionPeriod.

Is VictoriaMetrics free?

The community edition is Apache-2.0 and free, including the cluster version. Enterprise adds downsampling, multiple retentions, backup automation, mTLS and other features, with pricing by contact.

Does Prometheus support high availability?

Not through clustering. Its local storage is single-node and not replicated. The usual pattern is two identical Prometheus servers with an Alertmanager cluster deduplicating alerts, plus remote storage such as VictoriaMetrics, Thanos or Mimir for a merged view.

When do I need the VictoriaMetrics cluster version?

VictoriaMetrics recommends single-node for ingestion below about a million data points per second. Use the cluster when you need more than one machine can handle, application-level replication or multi-tenancy.

Get the next comparison by email

One email a week: new and trending developer tools, fresh comparisons, and what shipped. Unsubscribe in one click.