← Назад к вопросам

Как работать с VictoriaMetrics

2.0 Middle🔥 111 комментариев
#Мониторинг и логирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Работа с VictoriaMetrics: от развертывания до эксплуатации

VictoriaMetrics — это высокопроизводительная, экономичная и масштабируемая система мониторинга с открытым исходным кодом, совместимая с Prometheus. Работа с ней охватывает установку, конфигурацию, запросы, эксплуатацию и интеграцию.

Установка и развертывание

Существует несколько способов развертывания в зависимости от масштаба:

  • Single-node (одноузловая версия): Идеальна для тестирования или небольших проектов. Все компоненты (хранение, прием, запрос) работают в одном процессе.
  • Cluster version (кластерная версия): Для высокодоступных и масштабируемых продакшен-сред. Состоит из отдельных компонентов:
    *   `vmstorage` — хранение данных.
    *   `vminsert` — прием и распределение данных.
    *   `vmselect` — выполнение запросов.
    *   `vmagent` — сбор метрик и их проксирование.

Пример развертывания single-node через Docker:

docker run -d -p 8428:8428 -v /path/to/data:/victoria-metrics-data victoriametrics/victoria-metrics

Пример minimal конфигурации кластера в docker-compose:

version: '3'
services:
  vmstorage:
    image: victoriametrics/vmstorage:latest
    command: -retentionPeriod=12 -storageDataPath=/storage
    volumes: ["./vmstorage-data:/storage"]
  vminsert:
    image: victoriametrics/vminsert:latest
    command: -storageNode=vmstorage:8482
    ports: ["8480:8480"]
  vmselect:
    image: victoriametrics/vmselect:latest
    command: -storageNode=vmstorage:8482
    ports: ["8428:8428"]

Конфигурация и отправка метрик

VictoriaMetrics поддерживает множество протоколов приема данных: Prometheus remote_write, InfluxDB line protocol, Graphite, OpenTSDB, CSV. Основной — совместимость с Prometheus.

Пример записи метрики напрямую через API (аналог Prometheus pushgateway):

echo "custom_metric{job=\"test\",instance=\"host1\"} 42.5" | curl -X POST --data-binary @- http://victoria-host:8428/api/v1/import/prometheus

Основной способ — использование vmagent для сбора и отправки метрик. Он более ресурсоэффективен, чем Prometheus, и поддерживает фильтрацию, маршрутизацию и буферизацию.

Пример конфигурации vmagent (prometheus.yml-совместимый файл):

global:
  scrape_interval: 15s
scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['node-exporter:9100']
remote_write:
  - url: http://vminsert:8480/insert/0/prometheus/api/v1/write

Запросы к данным (PromQL и расширения)

VictoriaMetrics предоставляет мощный HTTP API, совместимый с Prometheus Querying API (PromQL), а также расширяет его (MetricsQL) для большей эффективности и удобства.

Базовые запросы через HTTP:

# Мгновенный запрос
curl -G 'http://localhost:8428/api/v1/query' --data-urlencode 'query=sum(rate(http_requests_total[5m])) by (service)'

# Запрос по диапазону (для графика)
curl -G 'http://localhost:8428/api/v1/query_range' \
  --data-urlencode 'query=node_memory_Active_bytes' \
  --data-urlencode 'start=2023-10-01T10:00:00Z' \
  --data-urlencode 'end=2023-10-01T12:00:00Z' \
  --data-urlencode 'step=1m'

Примеры полезных функций MetricsQL:

  • rollup() — автоматический выбор агрегации (delta, increase, rate) в зависимости от графика.
  • label_transform() — манипуляции с лейблами прямо в запросе.
  • time() — возвращает временную метку, полезна для вычислений.
# MetricsQL: Автоматический rate/delta для счетчиков и дельта для gauge
rollup(http_requests_total[5m])
# Ретеншен данных
vm_retention_seconds

Эксплуатация и мониторинг

  • Хранение: VictoriaMetrics использует собственный эффективный формат хранения. Важно мониторить:
    *   **`vm_rows_inserted_total`** — темп приема.
    *   **`vm_free_disk_space_bytes`** — свободное место.
    *   **Число active time series** — ключевой показатель нагрузки.
  • Ретеншен: Управляется флагом -retentionPeriod (месяцы по умолчанию). Для long-term хранения используется vmbackup и vmrestore.
  • Масштабирование: Кластерная версия позволяет масштабировать компоненты независимо. Добавление узлов vmstorage увеличивает емкость, узлов vmselect — производительность запросов.
  • Alerting: Совместима с Alertmanager от Prometheus. Можно использовать встроенное решение vmalert, которое поддерживает recording rules и алерты, запрашивая VM через API.

Пример записи recording rule в vmalert:

groups:
  - name: example
    rules:
      - record: job:http_requests:rate5m
        expr: rate(http_requests_total[5m])

Интеграция и экосистема

  • Grafana: Официально поддерживаемый источник данных. В настройках datasource указывается URL VictoriaMetrics (например, http://vmselect:8428).
  • Kubernetes: Для мониторинга Kubernetes есть VictoriaMetrics Operator и helm-чарты, которые автоматизируют развертывание кластера, настройку vmagent и vmalert.
  • Миграция с Prometheus: Постепенная миграция проста благодаря полной совместимости с API. Можно настроить Prometheus на remote_write в VictoriaMetrics, а позже переключить Grafana и alerting.

Ключевые преимущества для DevOps-инженера:

  1. Высокая эффективность: Меньшее потребление RAM/CPU и диска по сравнению с оригинальным Prometheus.
  2. Простота эксплуатации: Отсутствие сложного шардинга, встроенные инструменты бэкапа.
  3. Отличная совместимость: Минимальные изменения при миграции с Prometheus.
  4. Мощные расширения запросов (MetricsQL): Упрощают сложные запросы.

Работа с VictoriaMetrics требует понимания принципов мониторинга Prometheus, но в долгосрочной перспективе она часто оказывается более надежным и экономичным решением, особенно для сред с большим объемом метрик.