VictoriaMetrics ecosystem. Краткий обзор

1. Анатомия экосистемы

  • VictoriaMetrics ecosystem состоит из нескольких компонентов.

    1. vmstorage, vminsert, vmselect — составляют ядро системы VictoriaMetrics Cluster.

    2. vmagent, vmauth, vmalert — дополнительные компоненты.

    3. vmctl, vmalert-tool, vmbackup, vmrestore — различные утилиты.

  • Каждый компонент экосистемы VictoriaMetrics компилируется в форме одного бинарника без зависимостей, поэтому эти компоненты могут работать почти в любом Linux’е без установки дополнительных пакетов.

  • vminsert и vmselect поддерживают различные форматы метрик, поэтому взаимодействовать с хранилищем возможно из различных инструментов, что удобно для бесшовного перехода из других систем мониторинга.

  • Относительно недавно в экосистему был добавлен VictoriaLogs, но я его пока не изучал.

2. Дебютная схема использования VictoriaMetrics

  1. Выделяем отдельный VLAN для организации хранения и обработки метрик, где и размещаем все необходимые компоненты.

  2. Выделяем две машины под vmauth-компоненты, являющимися легковесными прокси, которые будут заняты приёмом метрик с TLS-терминацией и аутентификацией. Все операции записи в кластер или чтения из него, должны проходить через vmauth. Назначаем на эти машины один плавающий Virtual IP и выпускаем для него TLS-сертификат.

  3. Пара машин с vminsert’ами будут заняты приёмом метрик из vmauth (возможно через vmagent’ы) и из vmalert, а также распределением метрик между vmstorage-нодами.

  4. Штук 10 хостов выделяем под vmstorage-ноды. Из-за особенностей механизма распределения метрик между vmstorage-узлами, о чём мы поговорим чуть позже, важно изначально определить достаточное количество vmstorage-нод, чтобы в дальнейшем избежать горизонтального масштабирования vmstorage. После начала заполнения хранилища метриками, оперируем только вертикальным наращиванием ресурсов.

  5. Ещё пара хостов требуется под vmselect. Сюда будут обращаться Grafana и vmalert.

  6. Ещё попробуем использовать пару vmagent’ов между vmauth и vminsert. vmagent умеют буферизировать получаемые метрики в том случае, если vminsert будет отключен. Поэтому идея такая: перед остановкой vmstorage-нод на обслуживание, выключаем vminsert’ы, после чего, в зависимости от размера дискового пространства под буферы, vmagent’ы накапливают метрики, что позволяет обслуживать vmstorage-ноды.

  7. vmalert читает метрики через vmselect’ы и отправляет сигналы в Alertmanager (компонент из Prometheus). Кроме того, если используются recording rules, vmalert может записывать в кластер через vminsert’ы предвычисленные агрегированные метрики, что позволяетт строить графики или алерты на основе этих предвычисленных метрик.

victoriametrics cluster debut scheme of using

3. Краткое описание компонентов VictoriaMetrics Cluster

3.1. vmstorage

  • Этот бинарник после запуска предоставляет высокоэффективное хранилище метрик.

  • Каждый экземпляр vmstorage самодостаточен и ничего не знает о других экземплярах, то есть между экземплярами нет никакого обмена информацией.

  • Метрики в хранилище могут быть записаны только vminsert’ами, а прочитаны только vmselect’ами.

  • Из минимально полезных опций: каталог для хранения метрик и время хранения метрик.

  • Метрики, в виде временных рядов, распредяются vminsert’ами более-менее равномерно между всеми vmstorage-нодами.

  • Весь временной ряд одной метрики хранится только в одном vmstorage-хранилище, то есть при потере одной vmstorage-ноды будут потеряны все метрики, хранившиеся на этой ноде.

3.2. vminsert

  • Этот бинарник отвечает за приём, подготовку, и распределение метрик между vmstorage.

  • На всех vminsert-экземплярах в опциях командной строки перечисляются адреса всех vmstorage-нод.

  • На основе этих опций вычисляются хеш-номера целевых vmstorage-хранилищ, важно совпадение протокола, адреса, номера порта, но не учитывается порядок следования.

  • Именно поэтому настройки каждого vminsert’а должны в точности совпадать, чтобы результаты вычисления хеш-чисел целевых vmstorage-нод совпадали на всех vminsert-нодах.

  • Только в этом случае метрики будут распределяться между хранилищами единообразно, образуя непрерывный временной ряд на вычисленной для этой метрики vmstorage-ноды.

  • Если одна или несколько vmstorage-нод пропадут из кластера, то vminsert’ы пересчитают хеш-номера оставшихся vmstorage-нод, распределяя метрики таким образом, чтобы минимизировать число перемещаемых временных рядов.

  • Если ранее пропавшие vmstorage-ноды появятся в сети, то vminsert’ы вновь перераспределят метрики между vmstorage-нодами первоначальным образом.

  • Куски временных рядов, ранее сохранённые на других vmstorage-нодах, не будут каким-то автоматическим образом перемещены в "правильное" хранилище для восстановления статуса "один непрерывный временной ряд в одном хранилище".

3.3. vmselect

  • Этот бинарник предназначен для сбора и агрегации запрашиваемых метрик из vmstorage, и подготовки их для чтения в запрашиваемом формате.

  • Настройки всех vmselect-нод должны в точности совпадать.