VictoriaMetrics vs Thanos

VictoriaMetrics suits teams that want a single storage target fed by remote write on block storage. Thanos suits teams that already run Prometheus and want object storage with components added beside it. The choice turns on data-loss tolerance, skills and where your data should live.

On this page

VictoriaMetrics vs Thanos: when each one fits

VictoriaMetrics receives Prometheus data through remote write and stores it on block storage, while Thanos adds components beside existing Prometheus servers and keeps history in object storage. That single architectural split drives most of the decision. The VictoriaMetrics FAQ describes its loss window for recent data as a few seconds, while it states Thanos can lose up to 2 hours of recent data that has not yet been uploaded to object storage. If your platform team can accept a seconds-level window and wants one binary with no sidecar on each Prometheus, VictoriaMetrics is usually the simpler starting point. Its single-node version is the lowest-moving-part option, and its cluster version is available when one node is not enough. Confirm the loss window and sizing against your own ingest rate before you commit, since those figures are the vendor's own claims.

Thanos fits better when you already run several Prometheus servers that you want to keep as they are, and when object storage such as S3 or GCS is already approved and operated in your environment. The sidecar requires Prometheus compaction to be disabled by setting min and max block duration to equal values, so any team with strict Prometheus tuning needs to plan for that change. Thanos also has more moving parts, including Query, Store, Compact and optionally Receive, and the compactor must run as a singleton per bucket. Ask who on your team will own those components and whether they already know PromQL, since VictoriaMetrics uses MetricsQL. Check existing dashboards and alerting rules for PromQL dependence before choosing either path, and confirm the Enterprise feature set you need, such as downsampling or multiple retentions, against the current VictoriaMetrics README.

Which platform fits which scenario

This table maps common team situations to the platform that fits better, along with the trade-off that favors the other option. Read each row against your own Prometheus fleet, storage options and staffing, because the better fit depends on which constraint is hardest to change.

ScenarioBetter fitWhy
An existing Prometheus fleet that must stay unchangedThanosThe sidecar sits beside each Prometheus server, but it requires local compaction to be disabled by matching min and max block duration. Trade-off: VictoriaMetrics needs only remote write, which is simpler if you can change the Prometheus configuration.
A team with no object storageVictoriaMetricsVictoriaMetrics stores data on block storage, so no bucket is needed. Trade-off: Thanos can use any object storage, but it needs one, and a bucket adds a dependency to operate and back up.
A team that wants object storage retentionThanosThanos keeps historical blocks in S3 or GCS and treats any object storage as its only optional dependency. Trade-off: VictoriaMetrics uses block storage, so object storage retention is not its model.
A multi-tenant estateThanosThanos Receive identifies tenants with the THANOS-TENANT header by default. Trade-off: confirm the tenancy model and per-tenant controls you need in each platform's documentation before choosing, because Thanos Receive tenancy is a header convention rather than a full isolation model.
A small platform teamVictoriaMetricsA single small binary configured through command-line flags, with the same workload handled by one component, reduces moving parts. Trade-off: Thanos has more components (Sidecar, Query, Store, Compact) to run, but each is well documented and can be scaled separately.
A team that relies on MetricsQL functionsVictoriaMetricsVictoriaMetrics queries with MetricsQL in addition to PromQL, so teams using its extensions gain those functions. Trade-off: MetricsQL is a VictoriaMetrics extension, so dashboards and rules that depend on it are less portable to Thanos, which uses PromQL.
A team that must avoid running compaction-sensitive sidecarsVictoriaMetricsRemote write avoids the sidecar and its requirement that Prometheus local compaction be disabled, since the Thanos docs warn that otherwise uploaded data can be corrupted. Trade-off: remote write adds a network path from each Prometheus server to the store, which you must monitor.

How each design is built and what that means for operations

Both designs keep long-term Prometheus data, but they put different moving parts on your network and in your on-call rotation. The cards below walk through each component, what it means for upgrades and failure domains, and what your team should confirm before choosing.

VictoriaMetrics single-node

VictoriaMetrics single-node is one small binary with no dependencies, configured through command-line flags and distributed as binaries and Docker images. Prometheus remote write feeds it directly, so the deployment has one process to upgrade, back up and restore. The failure domain is that single process and its storage, so the recovery plan matters more than the design. Ask your team how a restore would be tested and who owns the flag configuration in version control.

VictoriaMetrics cluster on block storage

The cluster version is also open source under Apache License 2.0 and stores data on block storage, so it needs the same capacity planning for disks as the single-node build. It adds more components to run, so upgrades and failure handling involve coordinating several services rather than one binary. The README also notes support for NFS-based storage such as Amazon EFS and Google Filestore. Confirm the cluster topology, replication approach and disk layout with the vendor before you size on-call runbooks.

Thanos sidecar beside each Prometheus

The sidecar runs next to every Prometheus instance and uploads TSDB blocks to object storage as they are produced, typically every 2 hours. Prometheus compaction must be disabled by setting min and max block duration to equal values, because the sidecar docs warn that local compaction can corrupt uploaded data. Each Prometheus is therefore a managed dependency, and a configuration change on any one of them touches your long-term storage path. Plan for that coupling when you review Prometheus upgrades.

Thanos Receive for remote write

Thanos Receive implements the Prometheus Remote Write API, so Prometheus pushes metrics into a set of Receive components instead of a sidecar pairing. It uploads TSDB blocks to object storage every 2 hours by default and identifies tenants through the THANOS-TENANT header by default. Failure handling and tenant routing become part of your design, so ask who owns tenant configuration and how an outage in Receive affects the remote write queues on each Prometheus.

Thanos compactor as a singleton

The Thanos compactor downsamples raw data older than 40 hours to 5-minute resolution and downsamples 5-minute data older than 10 days to 1-hour resolution. It must run as a singleton against each object storage bucket, so two compactors pointed at one bucket is a configuration error you must prevent. Because it is a single writer per bucket, its health and restart behavior drive how quickly older data is compacted. Add its alerts to your on-call set and document who can restart it.

Query path and distributed operation

Thanos is built to run as a distributed system and is not recommended for production on a single node. Its query path combines Query, Query Frontend and Store components that fan requests out across Prometheus and object storage, so each component adds a failure domain and a version to keep aligned. The getting started guide also requires one or more Prometheus v2.2.1 or later installations with persistent disk. Ask your team to map each component to an owner, a dashboard and an alert before committing.

How much recent data each design can lose

The data-loss window is set by how long samples sit in a place that is not yet durable in the long-term store. The VictoriaMetrics FAQ, which is the vendor's own comparison, says Thanos can lose up to 2 hours of recent data that has not been uploaded to object storage, against a few seconds for VictoriaMetrics. These are vendor claims, so treat them as hypotheses to test. The Thanos window follows from block shape: the sidecar uploads TSDB blocks as Prometheus produces them every 2 hours, and Thanos Receive uploads every 2 hours by default. Until a block is uploaded, its samples exist only on the local disk of the Prometheus or Receive instance that wrote them.

Prometheus local retention determines what a fallback store has to cover. Prometheus keeps data for 15 days by default, configurable by time or size, and its storage docs state that local storage is not clustered or replicated. Blocks already uploaded to the bucket survive a server loss, but anything still on that disk within the retention window does not. With a Thanos sidecar, local compaction must be disabled by setting min-block-duration and max-block-duration to equal values, because the sidecar docs warn that otherwise uploaded data can be corrupted. Decide whether the 15-day local window is your recovery horizon or only a cache, and size the upload interval against that decision.

Test the window in your own environment before relying on either number. Run a controlled outage: write a known synthetic series at a steady rate, then stop the Prometheus process, sidecar or Receive pod, or the VictoriaMetrics node while the scrape loop continues. After recovery, count the missing samples. Repeat the outage at different points in the block cycle, since a 2-hour window will show different losses depending on where the cut falls. Ask each vendor how remote write retries and buffers during a receiver outage, because that is a separate loss path. Record the results for each design and keep the test script under change control.

Capabilities side by side: query language, ingestion and storage

This table sets VictoriaMetrics and Thanos against the capabilities that most often decide a long-term Prometheus storage choice. Check marks and crosses appear only where the answer is certain, and rows marked as vendor claims come from the VictoriaMetrics FAQ and README, so confirm them in your own tests before relying on them.

CapabilityVictoriaMetricsThanos
LicenseApache License 2.0 for single-node and cluster versions; Enterprise features are a separate tierApache-2.0; described as a CNCF Incubating project
Storage targetBlock storage on local or attached disks; supports NFS-based storage such as Amazon EFS and Google Filestore (vendor README)Object storage such as S3 or GCS, with Prometheus local disk still required for recent data
Ingestion pathStandard remote_write, plus InfluxDB line protocol, Graphite, OpenTSDB, CSV, JSON, DataDog, New Relic and OpenTelemetry metrics (vendor README)Sidecar beside each Prometheus instance, or Thanos Receive implementing the Prometheus Remote Write API
Prometheus configuration changePrometheus sends remote_write; no compaction change needed on the Prometheus side (vendor FAQ)Sidecar needs min and max block duration set equal to disable local compaction, per the Thanos sidecar docs
Query languageMetricsQL, with PromQL compatibility (vendor README and FAQ)PromQL
DownsamplingAvailable in Enterprise tier (vendor README)Thanos compactor downsamples raw data older than 40 hours to 5-minute resolution, then 5-minute data older than 10 days to 1-hour resolution
Multi-tenancyTenant handling is part of the cluster architecture; confirm tenant isolation model for your versionThanos Receive identifies tenants by the THANOS-TENANT header by default
Data-loss window on ingestA few seconds of recent data, per the vendor FAQUp to 2 hours of recent data not yet uploaded to object storage, per the vendor FAQ
DependenciesSingle small binary configured with command-line flags; no external dependencies (vendor README)Prometheus with persistent disk plus optional object storage; the compactor must run as a singleton per bucket

What is free and what is paid in each platform

The single-node and cluster versions of VictoriaMetrics are both open source under the Apache License 2.0, according to the VictoriaMetrics README. The software carries no license fee, so your spending goes to the infrastructure it runs on, the people who operate it, and any support agreement you choose to buy.

  • Single-node and cluster: both editions share the Apache-2.0 license, so moving from one binary to a cluster does not change the license terms you already accepted.
  • Core ingestion: remote write, InfluxDB, Graphite, OpenTSDB and OpenTelemetry ingestion are part of the open-source build, so early integration work does not depend on an Enterprise tier.
  • Release cadence: v1.154.0 was published on October 12, 2026, with releases about every two weeks, so you need a patching routine and a test environment that can absorb frequent upgrades.
  • Recurring costs: block storage growth, compute, and staff time for upgrades, backups and restore testing all fall to your team under the open-source build.

Ask the vendor in writing what support, if any, comes with the open-source build, and whether your backup and restore procedures are covered by documentation your team can test.

What drives running cost for each design

The main cost difference is where the bytes sit. With VictoriaMetrics, you pay for block storage and the compute that ingests and queries it. With Thanos, you pay for object storage plus the Prometheus servers that still need persistent disks, because the sidecar sits beside each one and the local TSDB remains part of the design. Ask the vendor or your own storage team to price both paths with the same series count and retention, since the storage class, replication and request charges on your platform decide which line is larger. Thanos also runs several components (Query, Store, Compact, and Receive or Sidecar), each with its own compute and monitoring footprint, so the infrastructure line grows with component count, not only with data volume.

Recurring costs are the ones that compound. Storage grows with active series and retention, so series cardinality is the first driver to measure: a single label that multiplies series count raises disk or bucket spend on either design. Downsampling reduces long-range storage on Thanos through its compactor, which the Thanos compactor docs describe as downsampling raw data older than 40 hours to 5-minute resolution and 5-minute data older than 10 days to 1-hour resolution. VictoriaMetrics Enterprise lists downsampling and multiple retentions among its features, so confirm whether your retention targets need that tier. Your people are the largest recurring line for most teams: on-call coverage, Prometheus and Thanos or VictoriaMetrics upgrades, and backup testing. Support subscriptions and any Enterprise license are optional costs that should appear as separate line items in a quote.

One-time costs are design, migration of existing rules and dashboards, and load testing against your real ingestion rate. Ask a partner to quote these as a fixed scope with named environments, retention targets per tier, and the upgrade cadence you expect to run, such as how often you will track VictoriaMetrics releases, which are published about every two weeks, or Thanos releases. Those four inputs turn an open-ended estimate into a comparable quote. If a quote omits Prometheus disk sizing, component count for high availability, or the rate of upgrades, ask for those assumptions in writing before comparing totals.

Moving from Thanos to VictoriaMetrics or back

This sequence moves long-term Prometheus metrics from one store to the other without a gap in dashboards or alerting, and leaves a verified record of what was migrated and what was rebuilt. It applies in either direction, so the same order of work covers a move to VictoriaMetrics and a return to Thanos.

  1. Inventory remote write, rules and consumers

    The platform team lists every Prometheus server, its remote write targets, its recording and alerting rules, and each Grafana data source, dashboard and external tool that reads the current store. For a Thanos estate, this also covers the sidecar settings and the Prometheus block duration values that must match. For a VictoriaMetrics estate, it covers the remote write endpoints feeding the store. The step is done when the team has a written list of every writer and reader, with its owner, so nothing is missed at cutover.

  2. Decide which history must move

    The team and its stakeholders decide how much historical data the new store must hold, which series are needed for compliance or capacity reviews, and which can simply age out. Historical data can be left in the old store and queried there during a transition, which keeps the migration smaller. The output is a written retention decision per data set, signed off by the owners of the affected dashboards and alerts. Confirm with each vendor how existing data can be copied or re-ingested, since tooling and supported paths differ.

  3. Stand up the new store beside the old

    The team deploys the target store in its own infrastructure, on block storage for VictoriaMetrics or with object storage buckets and the required Thanos components for Thanos, and configures Prometheus to write to it in addition to the existing path. Both stores then receive the same samples. The step is complete when the new store reports incoming samples for every Prometheus server on the inventory list, and the team has confirmed that retention, authentication and network paths work as documented.

  4. Compare queries and alerts in parallel

    Dashboard panels and alert rules are checked against both stores while data flows into each. Queries written in PromQL are expected to return matching results, and any MetricsQL-specific function must be found and rewritten or documented before it is used in a shared dashboard. Engineers compare series counts, label sets and recording rule output over a period they agree on. The step closes when differences are explained, and each difference has either a fix or an accepted reason recorded in the migration log.

  5. Point Grafana data sources at the new store

    The platform team changes the Grafana data source for each dashboard group to the new store, starting with low-risk dashboards and moving to operational and alerting views afterward. Dashboards written in PromQL and their variables transfer with the data source change, while panels that depend on store-specific features are reviewed one by one. The step is done when every dashboard in the inventory loads against the new store, and the owners of each group have signed off on the result.

  6. Verify alert routing and recording rules

    Alert rules and recording rules are confirmed to evaluate correctly in the new path, and Alertmanager receives the same alerts from the same conditions. The team runs controlled test alerts, confirms routing and silences behave as before, and checks that recording rule outputs match. Responders should confirm that the on-call runbooks reference the new data source. The step is complete when test alerts reach the expected receivers and a documented sign-off exists for each alert group.

  7. Rebuild stack-specific components and retire the old path

    The sidecar configuration, bucket layout, compactor schedules or VictoriaMetrics-specific settings are rebuilt for the target platform, and the team documents what each one does now. Once the new store has run in parallel and every dashboard and alert has been signed off, the old remote write path and the retired components are removed in a planned change. The step produces an updated architecture diagram, a runbook for the new store, and a record of the final state, so the old store can be decommissioned or kept read-only as the team decides.

What implementing each platform involves and where projects run long

A VictoriaMetrics rollout starts with three decisions that are hard to reverse: how much block storage the instance needs, whether single-node or cluster fits the expected series count, and how long data is kept. Each Prometheus server, or a central collector, sends samples through the standard remote write API, so the Prometheus side is mostly configuration: a remote_write block pointing at the ingestion endpoint, plus relabeling where series need trimming. Confirm the sizing inputs with the vendor and in your own environment (active series, sample rate, retention) before choosing a topology, and decide early whether features such as downsampling, multiple retentions or backup automation are needed, since the VictoriaMetrics README places those in its Enterprise tier. Those choices then drive the license and support conversation.

A Thanos implementation has more moving parts. A sidecar must be deployed next to every Prometheus instance, which means a rollout across each server, not one central change. Because the sidecar uploads TSDB blocks as they are produced, the Prometheus min_block_duration and max_block_duration settings must be equal to disable local compaction; the Thanos sidecar docs warn that otherwise uploaded data can be corrupted, so this check belongs in the change plan for every server. The team also has to configure the object storage bucket, place the Thanos compactor as the single instance for that bucket, and deploy Query and Query Frontend components for users. Receive is the alternative path for teams that prefer remote write, and it adds its own tenant and upload configuration.

Projects usually run long in four places. First, retention and downsampling policy: Thanos compaction downsamples raw data after 40 hours and again after 10 days, so the retention targets agreed with the business must be settled before the bucket is populated. Second, cardinality surprises, which surface only after real traffic reaches the new store and can change sizing for either platform. Third, object storage permissions, where bucket policies, IAM roles and network paths for every Thanos component are often corrected during testing. Fourth, alert rule validation, because recording and alerting rules must be re-tested against the new query engine, and MetricsQL and PromQL differences should be checked query by query. Scope and timelines for any DeployOpen engagement are agreed in writing before work starts.

Questions buyers ask before choosing VictoriaMetrics or Thanos

How much effort does each design take to run, and can one engineer own it?

One engineer can own a small VictoriaMetrics deployment, but a Thanos stack usually needs more shared ownership. VictoriaMetrics runs as a single small binary configured through command-line flags, so the moving parts stay few. Thanos is built as a distributed system, and its getting started guide does not recommend production on a single node. A typical Thanos layout includes a sidecar per Prometheus, Query, Store, Compact and possibly Receive and Ruler, each with its own scaling and health checks. The compactor must run as a singleton against each object storage bucket, which creates a clear ownership point. Effort rises with the number of Prometheus servers, retention length and the availability you require on the write path. Ask for a component inventory, an upgrade procedure and an on-call runbook sized to your estate before you decide.

Does an existing Prometheus fleet have to change for each option?

Yes, both options change the Prometheus servers, but the amount of change differs. VictoriaMetrics accepts data through the standard remote_write API, so each Prometheus needs a remote write block pointing at the VictoriaMetrics endpoint, and local alerting and scraping keep working. Thanos with the sidecar requires a sidecar beside every Prometheus instance. When the sidecar uploads blocks, you must set the Prometheus min and max block duration to equal values to disable local compaction, because the Thanos sidecar docs warn that otherwise uploaded data can be corrupted. Thanos Receive avoids sidecars by accepting remote write, but Prometheus still needs its remote write target changed. Test the configuration changes on one Prometheus instance first, and confirm your Prometheus version and retention settings match the plan.

How does the data-loss window affect alerting?

The data-loss window matters most for alerts that depend on recent samples. The VictoriaMetrics FAQ, a vendor comparison, says Thanos can lose up to 2 hours of recent data that has not yet been uploaded to object storage, against a few seconds for VictoriaMetrics. If a Prometheus or sidecar fails before an upload, the recent window may be missing from long-term storage, and any alert that evaluates against that storage can miss or delay a condition. Prometheus itself values reliability over precision, according to its overview docs, so it is not a substitute for exact accounting. Decide where critical alert rules are evaluated, keep a short local path for them, and test failure cases such as a lost Prometheus node or a network partition in staging before you rely on either design for paging.

Does MetricsQL break existing PromQL dashboards?

Most basic PromQL dashboards should run, but you need to verify them panel by panel. The VictoriaMetrics README says the project is a drop-in replacement for Prometheus in Grafana and can be queried with PromQL or its MetricsQL language. MetricsQL is the vendor's own query language, so any panel that uses MetricsQL-specific syntax or functions will not port cleanly back to Prometheus or Thanos. Thanos keeps standard PromQL because it sits on top of Prometheus. Export your dashboard definitions, run each panel against both backends over the same time window, and compare the results. Pay attention to recording rule names, range selectors and staleness behavior, since differences there often show up as small numeric shifts rather than errors.

What do Enterprise features add, and does the free trial apply?

The VictoriaMetrics README lists anomaly detection, backup automation, multiple retentions, downsampling, long-term support release lines and support from the core team as Enterprise features. The single-node and cluster versions are both open source under the Apache License 2.0, so the core storage and query path do not require a paid edition. The README also says Enterprise and LTS releases are publicly available and can be evaluated with a free trial license, which lets you test those features before buying. Enterprise pricing is not part of the supplied facts, so request current terms, the support scope and the trial conditions in writing. Thanos is Apache-2.0 licensed, and you should confirm with its community or any commercial provider whether paid support applies to your estate.

What skills does the internal team need for each option?

For VictoriaMetrics, the team needs Prometheus and PromQL familiarity, Linux administration, block storage sizing and backup, and the discipline to manage flag-based configuration under version control. For Thanos, the team also needs object storage operations such as bucket policy, lifecycle and access control, plus enough Kubernetes or service management experience to run several components with health checks and rolling upgrades. Both designs need someone who understands retention, cardinality and dashboard ownership. Thanos also asks the team to understand how sidecars, block upload timing and the singleton compactor interact during failures. Map each skill to a named person before you commit, and note where the knowledge sits with only one person.

Can our team run this ourselves, and what does upkeep look like?

A team can run either design itself if it already operates Prometheus, owns the storage platform and can staff an on-call rotation. Upkeep is recurring. VictoriaMetrics publishes releases about every two weeks, with v1.154.0 published on October 12, 2026, so your team needs a regular upgrade routine and a test environment. Thanos published v0.42.0 on July 8, 2026 and v0.42.4 on July 30, 2026, so component upgrades also need planning across several parts of the stack. Prometheus minor releases stop receiving bug fixes after six weeks, according to its release cycle page, which adds to the patch workload. Budget time for upgrades, backups and restore tests as ongoing work, not one-time setup.

When should we bring in outside help for this work?

Bring in outside help when the scope spans several clusters, object storage policy, compliance evidence for retention or backup, or when the team lacks on-call capacity. DeployOpen plans, implements, customizes, integrates, hardens, backs up, upgrades, documents and supports self-hosted open-source platforms inside the client's own infrastructure. Most engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts. Ongoing support, upgrades and testing are available as retainers. DeployOpen does not publish a price list, and a quote follows from the written scope. Ask any partner for a restore test, a handover plan and a runbook for the alerting path. DeployOpen prepares evidence for compliance assessments but does not issue audit reports or certifications.

How DeployOpen helps you choose and implement long-term Prometheus storage

DeployOpen starts with your Prometheus estate, retention goals and data-loss tolerance, then helps you decide between VictoriaMetrics on block storage and Thanos on object storage. We plan, implement, document and support the chosen design inside your own cloud accounts, data centers or air-gapped networks.

How we scope

  • Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts.
  • The written scope lists your Prometheus servers, remote write or sidecar layout, retention targets and recovery-point expectations.
  • Scope also records whether you need Enterprise features, and which ones, so licensing questions are settled before build.

How we build

  • We deploy VictoriaMetrics single-node or cluster, or Thanos components, inside your infrastructure and wire them to Prometheus.
  • We configure ingestion, relabeling, Alertmanager integration and object storage or block storage according to the agreed design.
  • We test query behavior, outage handling and restore paths against the data-loss window agreed in scope.

How we hand over

  • You receive architecture documentation, configuration records and runbooks for backup, upgrade and scaling tasks.
  • Handover covers the Thanos compactor singleton or VictoriaMetrics storage sizing decisions, with the reasoning behind each choice.
  • Your team walks through restore and upgrade procedures so the platform can be operated after the engagement ends.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers after handover.
  • A retainer can cover version upgrades, such as tracking release lines for your chosen storage component.
  • Ask for the support scope, response arrangements and upgrade approach in writing before you sign.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.