Плагин VictoriaMetrics

Мониторинг базы данных временных рядов VictoriaMetrics с подробными метриками по статистике хранилища, производительности запросов, частоте приёма данных и использованию ресурсов.

Обзор

Плагин VictoriaMetrics собирает подробные метрики из API VictoriaMetrics, в том числе:

  • Статистика хранилища — активные ряды, всего сэмплов, размер хранилища
  • Метрики приёма данных — принятые строки, частота приёма, точек данных в секунду
  • Производительность запросов — частота запросов, длительность запросов, медленные запросы
  • Статистика кеша — кеш индексов, кеш данных, статистика слияний
  • Использование ресурсов — использование памяти, использование диска, время CPU
  • Метрики хранения — период хранения данных, очистка старых данных

Требования

Версия VictoriaMetrics

  • Минимум: VictoriaMetrics 1.80
  • Рекомендуется: VictoriaMetrics 1.95 или новее
  • Протестировано с: VictoriaMetrics 1.85, 1.90, 1.95, 1.96

Зависимости Python

pip install requests>=2.28.0

Устанавливается автоматически при использовании PLUGINS=victoriametrics во время установки агента.

Доступ к VictoriaMetrics

Агенту нужен HTTP-доступ к API VictoriaMetrics (порт по умолчанию 8428).

Конфигурация

Базовая конфигурация

plugins:
  victoriametrics:
    enabled: true
    host: localhost
    port: 8428

С аутентификацией

plugins:
  victoriametrics:
    enabled: true
    host: localhost
    port: 8428
    username: admin
    password: password

С HTTPS

plugins:
  victoriametrics:
    enabled: true
    host: victoria.example.com
    port: 8428
    use_ssl: true
    verify_ssl: true

Все параметры конфигурации

plugins:
  victoriametrics:
    enabled: true                # Enable/disable plugin
    host: localhost              # VictoriaMetrics host
    port: 8428                   # VictoriaMetrics port
    username: ""                 # HTTP auth username (optional)
    password: ""                 # HTTP auth password (optional)
    use_ssl: false               # Use HTTPS
    verify_ssl: true             # Verify SSL certificates
    timeout: 10                  # Request timeout (seconds)

Переменные окружения

Конфигурацию можно переопределить с помощью переменных окружения:

export VICTORIAMETRICS_HOST="localhost"
export VICTORIAMETRICS_PORT="8428"

Настройка VictoriaMetrics

Установка

Установка из бинарного файла:

# Download latest release
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.95.1/victoria-metrics-linux-amd64-v1.95.1.tar.gz

# Extract
tar -xzf victoria-metrics-linux-amd64-v1.95.1.tar.gz

# Run VictoriaMetrics
./victoria-metrics-prod

Docker:

docker run -d \
  --name victoriametrics \
  -p 8428:8428 \
  -v /var/lib/victoria-metrics:/victoria-metrics-data \
  victoriametrics/victoria-metrics:latest

Как сервис systemd:

sudo nano /etc/systemd/system/victoriametrics.service
[Unit]
Description=VictoriaMetrics
After=network.target

[Service]
Type=simple
User=victoriametrics
WorkingDirectory=/var/lib/victoriametrics
ExecStart=/usr/local/bin/victoria-metrics-prod \
  -storageDataPath=/var/lib/victoriametrics \
  -httpListenAddr=:8428 \
  -retentionPeriod=12
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start victoriametrics
sudo systemctl enable victoriametrics

Собираемые метрики

Метрики приёма данных

Метрика Описание Единица Тип
rows_inserted_total Всего вставленных строк Количество Counter
rows_dropped_total Всего отброшенных строк Количество Counter
slow_inserts_total Всего медленных вставок строк Количество Counter
ingestion_rate Частота приёма (рассчитывается) Строк/с Gauge

Метрики хранилища

Метрика Описание Единица Тип
active_series Число активных временных рядов Количество Gauge
storage_size_gb Размер хранилища на диске (indexdb) ГБ Gauge
free_disk_gb Свободное место на диске ГБ Gauge

Метрики ресурсов

Метрика Описание Единица Тип
memory_usage_mb Резидентная память процесса МБ Gauge

Метрики HTTP

Метрика Описание Единица Тип
http_requests_total Всего HTTP-запросов Количество Counter

Метрики на дашборде

Дашборд StatusRadar отображает:

Карточка обзора

  • Active Series — текущее число временных рядов
  • Storage Size — общий размер данных на диске
  • Ingestion Rate — строк в секунду
  • Query Rate — запросов в секунду

График использования хранилища

  • Размер данных во времени
  • Размер индекса
  • Общий рост хранилища

График частоты приёма данных

  • Вставлено строк в секунду
  • Число активных временных рядов

График производительности запросов

  • Частота запросов
  • Средняя длительность запросов
  • Медленные запросы

График производительности кеша

  • Hit rate кеша
  • Размер кеша
  • Записи кеша

График использования памяти

  • Использование памяти во времени
  • Темп роста памяти

Установка

Быстрая установка

PLUGINS='victoriametrics' \
TOKEN='your-agent-token' \
bash -c "$(curl -sL https://statusradar.dev/install-agent.sh)"

Установка на существующий агент

  1. Настройте агент:

    sudo nano /opt/statusradar/config/agent.yaml

    Добавьте:

    plugins:
      victoriametrics:
        enabled: true
        host: localhost
        port: 8428
  2. Перезапустите агент:

    sudo systemctl restart statusradar-agent
  3. Проверьте:

    sudo journalctl -u statusradar-agent -n 50 --no-pager | grep victoriametrics

    Ожидается:

    INFO: Plugin victoriametrics: Metrics collected successfully
    INFO: Plugin victoriametrics: 12345 active series, 1.2 GB storage

Тестирование

Ручной тест плагина

cd /opt/statusradar
python3 plugins/victoriametrics_plugin.py

Ожидаемый вывод:

Plugin: victoriametrics
Enabled: True
Available: True

Collecting metrics...
{
  "vm_rows": 123456789,
  "vm_active_time_series": 12345,
  "vm_data_size_bytes": 1288490188,
  "vm_rows_per_second": 1250.5,
  "vm_requests_total": 45678,
  "vm_cache_hits_total": 89012,
  "vm_cache_misses_total": 3456,
  "vm_memory_bytes": 536870912
}

Проверка API VictoriaMetrics

# Metrics endpoint
curl http://localhost:8428/metrics

# Query API
curl 'http://localhost:8428/api/v1/query?query=up'

# Label values
curl 'http://localhost:8428/api/v1/label/__name__/values'

Устранение неполадок

Плагин не собирает метрики

Проверка 1: Запущен ли VictoriaMetrics?

sudo systemctl status victoriametrics
# Or check process:
ps aux | grep victoria-metrics

Проверка 2: Может ли агент получить доступ к VictoriaMetrics?

curl http://localhost:8428/metrics

Проверка 3: Проверьте логи агента

sudo journalctl -u statusradar-agent -n 100 --no-pager | grep victoriametrics

Распространённые ошибки

"Connection refused"

Ошибка:

ERROR: Plugin victoriametrics: Connection refused

Причины:

  1. VictoriaMetrics не запущен
  2. Неверный host/port
  3. Файрвол блокирует соединение

Решение:

# Check VictoriaMetrics is running
ps aux | grep victoria-metrics

# Check port
sudo netstat -tlnp | grep 8428

# Test connection
curl http://localhost:8428/metrics

"Authentication required"

Ошибка:

ERROR: Plugin victoriametrics: 401 Unauthorized

Решение:

Добавьте аутентификацию в конфигурацию:

plugins:
  victoriametrics:
    username: admin
    password: your-password

Влияние на производительность

На VictoriaMetrics

Минимальное влияние:

  • Эндпоинт метрик возвращает предварительно рассчитанную статистику
  • Нет накладных расходов на выполнение запросов
  • Время отклика: < 50 мс

Бенчмарк:

  • Накладные расходы: < 0.1% CPU
  • Нет измеримой деградации производительности

На агент

Использование ресурсов:

  • Память: +10 МБ
  • CPU: +2% во время сбора
  • Сеть: +2 КБ за сбор

Время сбора: < 0.3 секунды

Сценарии использования

1. Мониторинг роста хранилища

Отслеживайте:

  • Темп роста размера данных
  • Размер индекса
  • Число активных временных рядов

Оповещение при:

  • Быстром росте хранилища
  • Хранилище, приближающемся к лимиту диска
  • Избыточной кардинальности временных рядов

2. Мониторинг частоты приёма данных

Отслеживайте:

  • Строк в секунду
  • Всплески приёма
  • Медленные вставки

Оповещение при:

  • Падении частоты приёма (потеря данных)
  • Всплеске приёма (DDoS/баг)

3. Производительность запросов

Отслеживайте:

  • Частоту запросов
  • Длительность запросов
  • Медленные запросы

Оптимизируйте:

  • Шаблоны запросов
  • Использование индексов
  • Конфигурацию кеша

4. Использование ресурсов

Отслеживайте:

  • Использование памяти
  • Использование диска
  • Использование CPU

Оповещение при:

  • Памяти > 80%
  • Диске > 90%
  • Длительно высоком CPU

Лучшие практики

1. Установите период хранения

# Retain data for 12 months
./victoria-metrics-prod -retentionPeriod=12

Рассчитайте хранение:

Disk needed = (Ingestion rate × Average sample size × Retention seconds)

Example:
10k samples/sec × 1 byte × 31536000 sec (1 year) = 315 GB

2. Отслеживайте кардинальность

Высокая кардинальность = проблемы с памятью

Проверьте активные ряды:

curl 'http://localhost:8428/api/v1/query?query=vm_active_time_series'

Снизьте кардинальность:

  • Избегайте меток высокой кардинальности (ID, временные метки)
  • Используйте релейблинг для отбрасывания ненужных меток
  • Агрегируйте на источнике

3. Оптимизируйте хранилище

Включите дедупликацию:

./victoria-metrics-prod -dedup.minScrapeInterval=60s

Установите лимит памяти:

./victoria-metrics-prod -memory.allowedPercent=80

4. Настройте кеш

# Index cache
./victoria-metrics-prod -storage.cacheSizeIndexDBDataBlocks=8GB

# Storage cache
./victoria-metrics-prod -storage.cacheSizeStorageTSID=2GB

5. Отслеживайте производительность слияний

# Check merge metrics
curl http://localhost:8428/metrics | grep vm_merge

Медленные слияния указывают на:

  • Недостаточный дисковый ввод-вывод
  • Слишком много мелких частей
  • Давление на память

Тонкая настройка производительности VictoriaMetrics

Оптимизация памяти

# Limit memory usage
./victoria-metrics-prod \
  -memory.allowedPercent=80 \
  -search.maxMemoryPerQuery=2GB

Оптимизация хранилища

# Storage path
./victoria-metrics-prod \
  -storageDataPath=/mnt/fast-ssd/victoria-metrics

Используйте SSD для лучшей производительности.

Оптимизация запросов

# Limit concurrent queries
./victoria-metrics-prod \
  -search.maxConcurrentRequests=16 \
  -search.maxQueueDuration=30s

Расширенная конфигурация

Мониторинг кластера

Мониторинг нескольких экземпляров VictoriaMetrics:

plugins:
  victoria_node1:
    enabled: true
    host: vm-node1.internal
    port: 8428

  victoria_node2:
    enabled: true
    host: vm-node2.internal
    port: 8428

Docker-контейнер

Мониторинг VictoriaMetrics в Docker:

plugins:
  victoriametrics:
    enabled: true
    host: victoriametrics-container
    port: 8428

Примеры конфигураций

Базовая production-конфигурация

plugins:
  victoriametrics:
    enabled: true
    host: localhost
    port: 8428

С аутентификацией

plugins:
  victoriametrics:
    enabled: true
    host: victoria.internal
    port: 8428
    username: admin
    password: ${VICTORIA_PASSWORD}

Высокодоступный кластер

plugins:
  victoria_storage1:
    enabled: true
    host: vm-storage1.internal
    port: 8428

  victoria_storage2:
    enabled: true
    host: vm-storage2.internal
    port: 8428

Ограничения

Текущие ограничения

  1. Нет кардинальности по отдельным метрикам — только общее число рядов
  2. Нет деталей медленных запросов — лог запросов не анализируется
  3. Нет статуса резервных копий — метрики резервного копирования не собираются

Масштабируемость

Протестировано с:

  • 10М+ активных временных рядов
  • 1М+ сэмплов в секунду
  • Хранилищем размером в ТБ

Производительность:

  • Отклик эндпоинта метрик постоянен независимо от размера данных

Чек-лист мониторинга

Критично:

  1. Хранилище, приближающееся к лимиту диска
  2. Взрывной рост кардинальности
  3. Падение частоты приёма данных
  4. Память > 90%

Важно: 5. Рост числа медленных запросов 6. Backlog слияний 7. Низкий hit rate кеша

Пороги оповещений

vm_data_size_percent: > 85
vm_active_time_series: > 1000000
vm_rows_per_second: < baseline × 0.5
vm_memory_percent: > 85
cache_hit_rate: < 80

Устранение проблем производительности

Высокое использование памяти

Симптом: Память > 80%

Решения:

  1. Уменьшите размеры кеша
  2. Снизьте -memory.allowedPercent
  3. Уменьшите конкурентность запросов
  4. Добавьте больше RAM

Медленные запросы

Симптом: Высокая длительность запросов

Решения:

  1. Оптимизируйте шаблоны запросов
  2. Уменьшите временной диапазон
  3. Увеличьте размер кеша
  4. Добавьте больше ядер CPU

Рост хранилища

Симптом: Быстрый рост использования диска

Решения:

  1. Уменьшите период хранения
  2. Включите дедупликацию
  3. Снизьте кардинальность
  4. Агрегируйте на источнике

Следующие шаги

On this page