VictoriaMetrics: Alternativa Leve ao Prometheus para PME

O VictoriaMetrics é uma base de dados de séries temporais compatível com PromQL que consome até 7x menos RAM que o Prometheus. Funciona como single-binary, suporta remote_write, armazenamento de longo prazo e modo cluster — ideal para PME que precisam de monitorização escalável sem investir em infra-estrutura pesada.

ℹ O VictoriaMetrics é compatível com PromQL — as queries do Grafana funcionam sem alterações.

⚠ O VictoriaMetrics single-binary suporta até 1 milhão de métricas por segundo — suficiente para a maioria das PME.

Neste artigo:

1. Introdução ao VictoriaMetrics

O VictoriaMetrics é um sistema de monitorização e armazenamento de séries temporais de código aberto, desenvolvido em Go, que oferece compatibilidade total com o ecossistema Prometheus. A principal vantagem sobre o Prometheus é a eficiência: consome 7x menos RAM e até 1,7x menos espaço em disco, graças à compressão de dados optimizada.

Para uma PME com 20-50 servidores, o Prometheus pode precisar de 4 GB de RAM só para reter 30 dias de métricas. O VictoriaMetrics faz o mesmo com menos de 600 MB. Isto reduz custos de infra-estrutura e permite retenção mais longa — 90 dias ou mais — sem hardware adicional.

Principais características:

  • Single-binary — um ficheiro executável, sem dependências externas
  • Compatível com PromQL — queries do Grafana funcionam sem alterações
  • Suporta remote_write do Prometheus nativamente
  • Armazenamento de longo prazo sem necessidade de Thanos ou Cortex
  • Modo cluster horizontal com 3 componentes: vmselect, vminsert, vmstorage
  • Compressão eficiente — até 0,5 bytes por ponto de métrica
  • Suporte para métricas com alta cardinalidade sem degradação de desempenho

Documentação oficial em docs.victoriametrics.com e código-fonte no GitHub.

2. Instalação Single-Node

O modo single-node é a forma mais simples de começar. Um único contentor Docker expõe a API na porta 8428 e armazena dados localmente. Basta definir o período de retenção e o caminho de armazenamento.

# Instalar VictoriaMetrics single-node
docker run -d \
  --name victoriametrics \
  -v /vmdata:/storage \
  -p 8428:8428 \
  victoriametrics/victoriametrics \
  -retentionPeriod=90d \
  -storageDataPath=/storage

Após iniciar, o VictoriaMetrics fica disponível em http://localhost:8428. Verificar o estado com:

curl http://localhost:8428/health
# Resposta esperada: OK

Parâmetros importantes do single-node:

Parâmetro Descrição Pré-definido
-retentionPeriod Tempo de retenção dos dados 1 mês
-storageDataPath Caminho para armazenamento /storage
-httpListenAddr Endereço de escuta HTTP :8428
-memory.allowedBytes Limite de RAM para cache automático

3. Configurar Scraping

O VictoriaMetrics pode recolher métricas directamente via vmagent, um agente leve que substitui o Prometheus para scraping. O vmagent suporta a mesma configuração de scrape_configs do Prometheus.

# vmagent.yml — configurar scraping de alvos
scrape_configs:
  - job_name: "node_exporter"
    static_configs:
      - targets: ["node1:9100", "node2:9100", "node3:9100"]
    scrape_interval: 15s

  - job_name: "docker"
    static_configs:
      - targets: ["docker-host:9323"]
    scrape_interval: 30s

# Iniciar vmagent
docker run -d \
  --name vmagent \
  -v ./vmagent.yml:/etc/vmagent.yml \
  -p 8429:8429 \
  victoriametrics/vmagent \
  -promscrape.config=/etc/vmagent.yml \
  -remoteWrite.url=http://victoriametrics:8428/api/v1/write

O vmagent envia as métricas recolhidas para o VictoriaMetrics via remoteWrite.url. Suporta múltiplos destinos, relabeling e filtragem — exactamente como o Prometheus, mas com menor consumo de recursos.

4. Remote Write do Prometheus

Se já tem Prometheus a correr, não precisa de o substituir imediatamente. Basta adicionar remote_write para enviar métricas ao VictoriaMetrics. Este funciona como infra-estrutura de armazenamento de longo prazo, enquanto o Prometheus mantém as métricas recentes locais.

# Configurar remote_write no Prometheus
# prometheus.yml:
remote_write:
  - url: http://victoriametrics:8428/api/v1/write

Esta configuração permite uma migração gradual: o Prometheus continua a fazer scraping e alertas localmente, enquanto o VictoriaMetrics armazena o histórico completo. Posteriormente, pode substituir o Prometheus pelo vmagent e manter apenas o VictoriaMetrics.

Para saber mais sobre o ecossistema de telemetria, consulte o artigo sobre o Grafana Alloy: Pipeline de Telemetria Unificado para PME.

5. Cluster Mode para Escala

Quando o single-node não chega — mais de 1 milhão de métricas por segundo ou retenção superior a um ano — o VictoriaMetrics oferece modo cluster com 3 componentes independentes:

  • vmstorage — armazena séries temporais (não expõe API pública)
  • vminsert — recebe dados via remote_write e distribui pelos vmstorage
  • vmselect — executa queries PromQL e agrega resultados dos vmstorage
# Cluster mode (3 nós)
docker run -d --name vmselect -p 8481:8481 victoriametrics/vmselect --selectNode=vmselect:8481
docker run -d --name vminsert -p 8480:8480 victoriametrics/vminsert --insertNode=vminsert:8480
docker run -d --name vmstorage -v /vmdata:/storage victoriametrics/vmstorage -retentionPeriod=90d

O modo cluster permite adicionar nós vmstorage para aumentar capacidade horizontalmente. O vminsert e vmselect podem ser replicados para alta disponibilidade. Para uma PME típica, o single-node é suficiente — o cluster só se justifica com mais de 100 servidores monitorizados ou retenção superior a 12 meses.

Modo Métricas/seg Retenção RAM mínima
Single-node até 1 milhão 90 dias 512 MB
Cluster (3 nós) 10+ milhões 1+ ano 2 GB/nó

6. Integração com Grafana

A integração com Grafana é directa — o VictoriaMetrics fala PromQL, por isso basta adicionar uma fonte de dados do tipo Prometheus apontando para o endpoint do VictoriaMetrics.

# Grafana datasource
# URL: http://IP_DO_SERVIDOR:8428
# Type: Prometheus
# Nota: usar "victoriametrics" como hostname apenas se o Grafana
# estiver na mesma rede Docker do VictoriaMetrics

O hostname victoriametrics só é resolvido dentro da rede Docker onde o contentor corre. Se o Grafana estiver noutro servidor, usar o endereço IP ou um registo DNS (ex.: victoriametrics.exemplo.pt) apontando para o servidor.

No Grafana, ir a Configuration > Data Sources > Add data source, seleccionar Prometheus e definir o URL http://victoriametrics:8428. Todos os painéis existentes do Prometheus funcionam sem alterações — queries, variáveis e alertas incluídos.

Para configurar alertas, o VictoriaMetrics inclui o vmalert, que avalia regras Alertmanager-compatible e envia notificações. Pode reutilizar as mesmas regras de alerta do Prometheus sem modificações. Para uma abordagem mais ampla à monitorização, veja o artigo sobre monitoring com Prometheus e Grafana no Linux e o Dia 20 do Curso de Redes sobre SNMP, Zabbix e PRTG.

7. Erros Comuns e Lista de Verificação

Erros frequentes na implementação do VictoriaMetrics:

  • Esquecer o -retentionPeriod — sem este parâmetro, os dados são apagados após 1 mês. Definir explicitamente conforme as necessidades de retenção.
  • Não montar volume persistente — sem -v /vmdata:/storage, os dados perdem-se ao reiniciar o contentor.
  • URL errada no remote_write — o endpoint correcto é /api/v1/write (não /api/v1/import).
  • Misturar single-node com cluster — não apontar vmagent de cluster para endpoint de single-node; usam portas diferentes (8428 vs 8480/8481).
  • Não configurar -memory.allowedBytes — sem limite, o VictoriaMetrics pode consumir mais RAM do que o esperado em sistemas com muita RAM disponível.

Lista de verificação para implementação:

Item Verificação
Volume persistente Montar /storage em volume dedicado
Retenção Definir -retentionPeriod explicitamente
Health check Confirmar /health responde OK
Fonte de dados Grafana Testar query no Grafana Explore
Remote write Verificar métricas a chegar em /metrics
Backup Configurar cópia instantânea periódica de /storage

Artigos Relacionados: