VictoriaMetrics ecosystem. Краткий обзор
1. Анатомия экосистемы
-
VictoriaMetrics ecosystem состоит из нескольких компонентов.
-
vmstorage, vminsert, vmselect — составляют ядро системы VictoriaMetrics Cluster.
-
vmagent, vmauth, vmalert — дополнительные компоненты.
-
vmctl, vmalert-tool, vmbackup, vmrestore — различные утилиты.
-
-
Каждый компонент экосистемы VictoriaMetrics компилируется в форме одного бинарника без зависимостей, поэтому эти компоненты могут работать почти в любом Linux’е без установки дополнительных пакетов.
-
vminsert и vmselect поддерживают различные форматы метрик, поэтому взаимодействовать с хранилищем возможно из различных инструментов, что удобно для бесшовного перехода из других систем мониторинга.
-
Относительно недавно в экосистему был добавлен VictoriaLogs, но я его пока не изучал.
2. Дебютная схема использования VictoriaMetrics
-
Выделяем отдельный VLAN для организации хранения и обработки метрик, где и размещаем все необходимые компоненты.
-
Выделяем две машины под vmauth-компоненты, являющимися легковесными прокси, которые будут заняты приёмом метрик с TLS-терминацией и аутентификацией. Все операции записи в кластер или чтения из него, должны проходить через vmauth. Назначаем на эти машины один плавающий Virtual IP и выпускаем для него TLS-сертификат.
-
Пара машин с vminsert’ами будут заняты приёмом метрик из vmauth (возможно через vmagent’ы) и из vmalert, а также распределением метрик между vmstorage-нодами.
-
Штук 10 хостов выделяем под vmstorage-ноды. Из-за особенностей механизма распределения метрик между vmstorage-узлами, о чём мы поговорим чуть позже, важно изначально определить достаточное количество vmstorage-нод, чтобы в дальнейшем избежать горизонтального масштабирования vmstorage. После начала заполнения хранилища метриками, оперируем только вертикальным наращиванием ресурсов.
-
Ещё пара хостов требуется под vmselect. Сюда будут обращаться Grafana и vmalert.
-
Ещё попробуем использовать пару vmagent’ов между vmauth и vminsert. vmagent умеют буферизировать получаемые метрики в том случае, если vminsert будет отключен. Поэтому идея такая: перед остановкой vmstorage-нод на обслуживание, выключаем vminsert’ы, после чего, в зависимости от размера дискового пространства под буферы, vmagent’ы накапливают метрики, что позволяет обслуживать vmstorage-ноды.
-
vmalert читает метрики через vmselect’ы и отправляет сигналы в Alertmanager (компонент из Prometheus). Кроме того, если используются recording rules, vmalert может записывать в кластер через vminsert’ы предвычисленные агрегированные метрики, что позволяетт строить графики или алерты на основе этих предвычисленных метрик.
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-нод должны в точности совпадать.