Настройка запроса для метрики

Запросы для метрик используют модель данных VictoriaMetrics и язык запросов MetricsQL .

Типы метрик

  • Counter возрастающие значения. Например, количество запросов или ошибок;

  • Gauge текущее значение, которое может увеличиваться или уменьшаться. Например, использование CPU или оперативной памяти (RAM);

  • Histogram распределение значений. Например, время ответа сервера;

  • Summary предварительно агрегированные значения. Например, суммарное количество кластеров.

Операторы сравнения и вложенные запросы

Лейблы можно объединить по операторам сравнения и вложенным запросам для получения конкретного значения.

Операторы сравнения

Типы операторов:

  • = точное совпадение;

  • != — исключает точное совпадение;

  • =~ совпадение по регулярному выражению;

  • !~ — исключает совпадение по регулярному выражению;

  • > — больше указанного значения;
  • < — меньше указанного значения.

Вложенные запросы

  • AND И. Используется для вывода данных, которые удовлетворяют нескольким условиям одновременно. Лейблы перечисляются через запятую.
    Например, вывести объём диска виртуальной машины с виртуальным IP-адресом 10.130.00.00 И именем vm_name:
  • OR ИЛИ. Используется для вывода значений из множества. Внутри лейбла обозначается как |.
    Например, вывести объём диска виртуальных машин с виртуальным IP-адресом 10.130.20.20 ИЛИ 10.130.20.30 ИЛИ 10.130.20.40:

Математические и логические операторы

В запросе можно использовать математические и логические операторы:

  • математические — для арифметических вычислений над числовыми значениями метрик. Например, +, -, *;

    Чтобы получить алерт, когда свободной оперативной памяти (RAM) на виртуальной машине осталось меньше 1 ГБ, используйте запрос:

    Максимальный объём оперативной памяти, который может быть выделен виртуальной машине - Объём оперативной памяти, который доступен для использования = Объём свободной оперативной памяти виртуальной машины.

  • логические or, and, unless. Работают с наборами метрик, сравнивая их между собой на уровне лейблов.
    Допустим, есть два набора метрик:

    Набор A: [metric{a="1"}, metric{a="2"}, metric{a="3"}]

    Набор B: [metric{a="2"}, metric{a="3"}, metric{a="4"}]

    Результаты операций:

    • A or B (объединение) = [1, 2, 3, 4] — все уникальные значения из обоих наборов;

    • A and B (пересечение) = [2, 3] — только общие значения;

    • A unless B (дополнение) = [1] — значения из A, которых нет в B.

      Чтобы определить выключенные или зависшие виртуальные машины (включенные, но не использующие CPU), используйте запрос:


Агрегация данных

Агрегацию можно использовать для объединения данных с целью их обобщения и получения сводной информации. Например, чтобы узнать общее количество запросов ко всем серверам или среднюю загрузку процессора по всем узлам кластера.

По запросу:

получим 2 значения на графике (по одному для каждого сервера).

Чтобы получить суммарный объём дисков всех серверов, используйте агрегацию:

В результате получим одну линию на графике.

Чтобы сгруппировать результат агрегации по нескольким лейблам, используйте запрос:

В результате получим несколько линий на графике. Каждая линия — сумма значений метрики libvirt_domain_block_stats_capacity_bytes для уникальной пары значений лейблов region и instance.

Виды агрегаций

  • AVG — среднее значение метрики. Например, чтобы узнать среднее количество запросов на очистку кеша диска среди всех виртуальных машин, используйте запрос:
  • BOTTOMK наименьшие значения метрики. Например, чтобы узнать 5 наименьших значений по количеству запросов на очистку кеша диска среди всех виртуальных машин, используйте запрос:
  • COUNT — количество значений метрики. Например, чтобы узнать сколько раз происходили запросы на очистку кеша диска всех виртуальных машин, используйте запрос:
  • COUNT_VALUES — количество одинаковых значений для указанного лейбла и группировка результата по этому значению. Например, чтобы узнать количество виртуальных машин с одинаковым именем среди всех виртуальных машин, используйте запрос:
  • GROUP — группировка значений. Например, чтобы узнать объём оперативной памяти (RAM), используемый гостевой ОС для кеширования данных на диске виртуальных машин, сгруппированных по зоне доступности (region), используйте запрос:GROUP BY — группирует значения по лейблам, указанным в запросе;
    GROUP WITHOUT — группирует значения по всем лейблам, кроме указанных в запросе;
  • MAX — максимальное значение метрики. Например, чтобы узнать максимальный объём оперативной памяти (RAM) среди всех виртуальных машин, используйте запрос:
  • MIN — минимальное значение метрики. Например, чтобы узнать минимальный объём оперативной памяти (RAM) среди всех виртуальных машин, используйте запрос:
  • SUM — сумма значений метрики. Например, чтобы узнать суммарный объём оперативной памяти (RAM) у всех виртуальных машин, используйте запрос:
  • TOPK — наибольшие значения метрики. Например, чтобы определить 5 виртуальных машин с наибольшим потреблением оперативной памяти (RAM), используйте запрос:
  • QUANTILE — вычисление квантиля для значений метрики. Например, чтобы вычислить 95 процентиль объёма оперативной памяти (RAM) виртуальных машин, используйте запрос:Полученное количество байт означает, что 95% всех виртуальных машин используют объём памяти, равный этому значению или меньше.

Функции rate и irate 

Функции полезны для анализа метрик, которые представляют собой счётчики (например, количество запросов, байтов, переданных по сети, или использованное время CPU). Применяются к возрастающим метрикам, чтобы показать прирост за определённое время.

Функции:

  • работают только с метриками типа Counter;

  • вычисляют скорость в секунду (независимо от выбранного интервала);

  • автоматически корректируются при сбросах метрики на 0. Например, при перезапуске сервиса.

Функция rate

Функция rate вычисляет среднюю скорость изменения метрики за указанный интервал времени.

Функция rate учитывает пропущенные выборки (missing samples). Функция использует экстраполяцию для корректного расчёта, даже если начало и конец временного интервала не совпадает точно с точками выборки, или если часть выборок в середине интервала пропущена. Она стремится предоставить наиболее точную среднюю скорость, покрывая весь указанный диапазон.

Например, чтобы узнать среднее количество запросов на очистку кеша диска в секунду за последние 5 минут, используйте запрос:

Если в первые 4 минуты было 0 запросов, а в последнюю минуту — 60 запросов (1 в секунду), то результат будет 0.2 (среднее за 5 минут).

Функция irate

Функция irate вычисляет мгновенную скорость изменения метрики, используя только 2 последних значения за указанный интервал времени.

Например, чтобы узнать мгновенную скорость запросов на очистку кеша диска в секунду за последние 5 минут, используйте запрос:

Если в последние 2 секунды было 20 запросов, результат будет 10 (10 запросов в секунду), даже если в предыдущие 4 минуты 58 секунд запросов не было.

Пример настройки запроса для метрики

Например, построим График для анализа объёма оперативной памяти (RAM), которая используется для кеширования данных на диске виртуальной машины с именем compute-ins-0066 в дата-центре, ID которого d3p1k01:

Мониторинг по заданному запросу выводит график: