Instalación y Configuración de VictoriaMetrics
VictoriaMetrics es una base de datos de series temporales (TSDB) de alto rendimiento compatible con Prometheus que ofrece un consumo de memoria y disco notablemente inferior al de su homólogo, con velocidades de escritura e ingestión superiores incluso en hardware modesto. Soporta PromQL, remote write de Prometheus, Graphite y OpenTSDB, lo que facilita su adopción en stacks de monitoreo existentes. Esta guía cubre la instalación en Linux tanto en modo single-node como en cluster, la configuración con Grafana y la migración desde Prometheus.
Requisitos Previos
- Ubuntu 20.04/22.04 o CentOS 8+/Rocky Linux 8+
- 1 GB de RAM por cada 10 millones de métricas activas
- SSD recomendado para mejor rendimiento de escritura
- Puerto 8428 (single-node) o 8480/8481/8482 (cluster)
Instalación Single-Node
# Descargar el binario de VictoriaMetrics
VM_VERSION=1.99.0
wget "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${VM_VERSION}/victoria-metrics-linux-amd64-v${VM_VERSION}.tar.gz" -P /tmp
cd /tmp && tar xzf victoria-metrics-linux-amd64-v${VM_VERSION}.tar.gz
# Mover los binarios al PATH del sistema
sudo mv victoria-metrics-prod /usr/local/bin/victoria-metrics
sudo chmod +x /usr/local/bin/victoria-metrics
# Crear usuario y directorio de datos
sudo useradd -r -s /bin/false victoriametrics
sudo mkdir -p /var/lib/victoriametrics
sudo chown -R victoriametrics:victoriametrics /var/lib/victoriametrics
# Crear el servicio systemd
sudo tee /etc/systemd/system/victoriametrics.service > /dev/null <<EOF
[Unit]
Description=VictoriaMetrics Time Series Database
After=network.target
[Service]
Type=simple
User=victoriametrics
Group=victoriametrics
ExecStart=/usr/local/bin/victoria-metrics \
-storageDataPath=/var/lib/victoriametrics \
-httpListenAddr=:8428 \
-retentionPeriod=12 \
-selfScrapeInterval=10s \
-loggerLevel=INFO
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable victoriametrics --now
# Verificar el estado
sudo systemctl status victoriametrics
# Probar la API
curl http://localhost:8428/health
curl http://localhost:8428/metrics | head -30
Parámetros importantes de VictoriaMetrics
| Parámetro | Descripción | Ejemplo |
|---|---|---|
-storageDataPath | Directorio de datos | /var/lib/victoriametrics |
-retentionPeriod | Retención de datos | 12 (meses) o 180d (días) |
-httpListenAddr | Puerto de escucha | :8428 |
-maxConcurrentInserts | Inserciones concurrentes | 8 |
-search.maxQueryDuration | Timeout de consultas | 30s |
-search.maxSamplesPerQuery | Límite de muestras por consulta | 1e9 |
-memory.allowedPercent | % de RAM usable | 60 |
Configuración de Prometheus para Remote Write
Configura Prometheus para enviar métricas a VictoriaMetrics via remote write:
# /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
# Configuración de remote write hacia VictoriaMetrics
remote_write:
- url: http://victoriametrics:8428/api/v1/write
queue_config:
max_samples_per_send: 10000
capacity: 20000
max_shards: 30
# Retransmitir datos si VictoriaMetrics no está disponible
remote_timeout: 30s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
# Reiniciar Prometheus para aplicar la configuración
sudo systemctl restart prometheus
# Verificar que los datos llegan a VictoriaMetrics
curl "http://localhost:8428/api/v1/query?query=up" | python3 -m json.tool
Integración con Grafana
Añade VictoriaMetrics como fuente de datos Prometheus en Grafana:
# Via API de Grafana
curl -X POST http://grafana:3000/api/datasources \
-u admin:contraseña_grafana \
-H "Content-Type: application/json" \
-d '{
"name": "VictoriaMetrics",
"type": "prometheus",
"url": "http://victoriametrics:8428",
"access": "proxy",
"isDefault": true,
"jsonData": {
"timeInterval": "15s",
"queryTimeout": "30s",
"httpMethod": "POST"
}
}'
En la interfaz de Grafana:
- Configuration → Data Sources → Add data source
- Selecciona Prometheus
- URL:
http://tu-ip-victoriametrics:8428 - En Scrape interval:
15s - Save & Test
VictoriaMetrics soporta PromQL, por lo que todos los dashboards de Grafana diseñados para Prometheus funcionan directamente.
Consultas PromQL en VictoriaMetrics
# Consultar métricas via API HTTP (compatible con Prometheus)
# Consulta instantánea
curl "http://localhost:8428/api/v1/query?query=up&time=$(date +%s)"
# Consulta en rango
curl "http://localhost:8428/api/v1/query_range" \
--data-urlencode "query=rate(node_cpu_seconds_total{mode='user'}[5m])" \
--data-urlencode "start=$(date -d '1 hour ago' +%s)" \
--data-urlencode "end=$(date +%s)" \
--data-urlencode "step=60"
# Listar métricas disponibles
curl "http://localhost:8428/api/v1/label/__name__/values" | python3 -m json.tool
# Listar series de una métrica
curl "http://localhost:8428/api/v1/series?match[]=node_cpu_seconds_total" | python3 -m json.tool
Gestión de Retención y Almacenamiento
# Ver estadísticas de almacenamiento
curl http://localhost:8428/api/v1/status/tsdb | python3 -m json.tool
# Las métricas de VictoriaMetrics muestran el estado interno
curl "http://localhost:8428/api/v1/query?query=vm_data_size_bytes" | python3 -m json.tool
# Verificar el tamaño del directorio de datos
du -sh /var/lib/victoriametrics/
# Forzar merge de partes del almacenamiento (reduce espacio, puede tardar)
curl -X POST http://localhost:8428/internal/force_merge?partition_prefix=all
Para cambiar la retención, edita el parámetro en el servicio systemd:
# Editar el servicio para cambiar la retención
sudo systemctl edit victoriametrics
# Añadir o modificar el flag de retención
[Service]
ExecStart=
ExecStart=/usr/local/bin/victoria-metrics \
-storageDataPath=/var/lib/victoriametrics \
-httpListenAddr=:8428 \
-retentionPeriod=6 \
-selfScrapeInterval=10s
sudo systemctl daemon-reload
sudo systemctl restart victoriametrics
Instalación en Cluster
El modo cluster de VictoriaMetrics separa los componentes de almacenamiento y consulta:
# Descargar los binarios del cluster
wget "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${VM_VERSION}/victoria-metrics-linux-amd64-v${VM_VERSION}-cluster.tar.gz" -P /tmp
cd /tmp && tar xzf victoria-metrics-linux-amd64-v${VM_VERSION}-cluster.tar.gz
sudo mv vmstorage-prod /usr/local/bin/vmstorage
sudo mv vminsert-prod /usr/local/bin/vminsert
sudo mv vmselect-prod /usr/local/bin/vmselect
Crear los servicios para cada componente:
# vmstorage: almacena los datos (escala horizontalmente)
sudo tee /etc/systemd/system/vmstorage.service > /dev/null <<EOF
[Unit]
Description=VictoriaMetrics Storage
After=network.target
[Service]
Type=simple
User=victoriametrics
ExecStart=/usr/local/bin/vmstorage \
-storageDataPath=/var/lib/vmstorage \
-httpListenAddr=:8482 \
-vminsertAddr=:8400 \
-vmselectAddr=:8401 \
-retentionPeriod=12
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
# vminsert: recibe datos y los distribuye entre los vmstorage
sudo tee /etc/systemd/system/vminsert.service > /dev/null <<EOF
[Unit]
Description=VictoriaMetrics Insert
After=network.target
[Service]
Type=simple
User=victoriametrics
ExecStart=/usr/local/bin/vminsert \
-httpListenAddr=:8480 \
-storageNode=vmstorage-1:8400,vmstorage-2:8400
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# vmselect: maneja las consultas y las distribuye entre los vmstorage
sudo tee /etc/systemd/system/vmselect.service > /dev/null <<EOF
[Unit]
Description=VictoriaMetrics Select
After=network.target
[Service]
Type=simple
User=victoriametrics
ExecStart=/usr/local/bin/vmselect \
-httpListenAddr=:8481 \
-storageNode=vmstorage-1:8401,vmstorage-2:8401 \
-dedup.minScrapeInterval=15s
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable vmstorage vminsert vmselect --now
En el cluster:
- Remote write de Prometheus:
http://vminsert:8480/insert/0/prometheus/api/v1/write - Consultas desde Grafana:
http://vmselect:8481/select/0/prometheus
VMAgent: Recolector Ligero
VMAgent es un agente de recolección de métricas ligero que reemplaza a Prometheus para el scraping:
# Descargar vmagent
wget "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${VM_VERSION}/vmutils-linux-amd64-v${VM_VERSION}.tar.gz" -P /tmp
cd /tmp && tar xzf vmutils-linux-amd64-v${VM_VERSION}.tar.gz
sudo mv vmagent-prod /usr/local/bin/vmagent
# Servicio de vmagent
sudo tee /etc/systemd/system/vmagent.service > /dev/null <<EOF
[Unit]
Description=VMAgent Metrics Scraper
After=network.target
[Service]
Type=simple
User=victoriametrics
ExecStart=/usr/local/bin/vmagent \
-promscrape.config=/etc/vmagent/scrape.yaml \
-remoteWrite.url=http://localhost:8428/api/v1/write \
-remoteWrite.tmpDataPath=/var/lib/vmagent \
-httpListenAddr=:8429
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
Solución de Problemas
VictoriaMetrics no arranca:
# Revisar logs del servicio
sudo journalctl -u victoriametrics -n 100 --no-pager
# Verificar permisos
ls -la /var/lib/victoriametrics/
sudo chown -R victoriametrics:victoriametrics /var/lib/victoriametrics/
Prometheus no puede hacer remote write:
# Verificar que VictoriaMetrics acepta el endpoint de remote write
curl -X POST http://localhost:8428/api/v1/write \
-H "Content-Type: application/x-protobuf" \
--data-binary ""
# Debe responder 204 No Content
# Revisar los logs de Prometheus para errores de remote write
sudo journalctl -u prometheus -n 50 | grep -i "remote"
Alto consumo de memoria:
# Limitar el porcentaje de RAM que puede usar VictoriaMetrics
# Añadir al ExecStart:
-memory.allowedPercent=50
# Ver el consumo actual de memoria
curl "http://localhost:8428/api/v1/query?query=process_resident_memory_bytes{job='victoria-metrics'}"
Consultas lentas:
# Activar el log de consultas lentas
# Añadir al ExecStart:
-search.logSlowQueryDuration=5s
# Ver las consultas más costosas
curl http://localhost:8428/metrics | grep vm_query
Conclusión
VictoriaMetrics es una alternativa a Prometheus para almacenamiento a largo plazo que destaca por su eficiencia en el uso de recursos, su compatibilidad total con el ecosistema Prometheus/Grafana y la facilidad de operación, especialmente en modo single-node donde un único binario gestiona toda la funcionalidad. Para entornos que requieren alta disponibilidad o ingesta de cientos de millones de métricas, el modo cluster proporciona escalabilidad horizontal sin la complejidad de otros sistemas distribuidos. La combinación de VMAgent + VictoriaMetrics reemplaza eficazmente a Prometheus en la mayoría de los casos de uso de monitoreo.


