Перейти к содержанию

Использование расчётных метрик

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

  1. Во время сбора метрики
  2. Во время обработки результатов сбора перед отправкой метрик в базу
  3. Во время проверки порогов

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

Note

В случае метрик речь всегда идёт только о числовых значениях, работа с текстовыми метриками не поддерживается

Преобразование во время сбора метрик

Преобразования во время сбора реализуются в профиле (SA Profile) оборудования и работают во время сбора, до формирования результата. Поэтому во время процедуры сохраняется возможность обратиться к оборудованию для получения дополнительных сведений. Способ характеризуется следующими особенностями:

  • Можно добыть с оборудования дополнительные данные
  • Не доступны результаты предыдущих опросов
  • Нет доступа к данным из базы системы, только то что передано скрипту для работы - Capabilities и hints

Цель преобразований, обычно, преобразовать значения в соответствующий тип измерения для передачи в систему, однако не запрещено и произвести расчёт на базе доступных сведений с оборудования. Преобразователи передаются через параметр scale, он присутствует в конфигурации метрик (папка snmp_metrics) и методе set_metric, доступы следующие виды:

ФункцияОписаниеПример
целое числозначение метрики умножается на число"scale": "1"
percentвычисление процента, на основе абсолютного текущего и максимального значений"scale": "percent"
percent_usage"scale": "percent_usage"
percent_invert"scale": "percent_invert"
convert_percent_strконвертация текстового представления процента в числовой вид: "90 %" -> 90.0
sumсумма всех метрик"scale": "sum"
diffразница между значениями первой и второй метрик"scale": "diff"
subtract"scale": "subtract"
is1конвертация числового значения метрики (1 или 0) в логическое"scale": "is1"
invert0конвертирует 0 в 1 а 1 в 0"scale": "invert0"
scaleумножает значение метрики на указанное в скобках"scale": "scale(0.1)"
fix_rangeесли значение метрики выходит за указанный интервал - возвращает 0
convert_floatпреобразует строковое значение в число

Если необходимо задействовать преобразование в конфигурации метрики snmp_metrics, задаётся в качестве параметра конфигурации:

{
    "$metric": "Memory | Total",
    "$type": "oid",
    "oid": [
      "1.3.6.1.4.1.9.9.48.1.1.1.6.1",
      "1.3.6.1.4.1.9.9.48.1.1.1.5.1"
    ],
    "scale": "sum",
    "units": "byte"
}

В случае если для сбора метрик реализуется в рамках скрипта get_metrics, то преобразования можно выполнять инструмента языка Python:

    @metrics(["Memory | Total", "Memory | Usage"], volatile=False, access="S")  # SNMP version
    def get_memory_metrics(self, metrics):
        value_total = self.snmp.get("1.3.6.1.4.1.40418.7.100.1.11.6.0")  # bytes
        value_usage = self.snmp.get("1.3.6.1.4.1.40418.7.100.1.11.7.0")  # bytes
        for metric in metrics:
            if "Memory | Total" in str(metric):
                if value_total:
                    self.set_metric(
                        id=("Memory | Total", None), value=int(value_total), units="bytes"
                    )
            if "Memory | Usage" in str(metric):
                if value_total and value_usage:
                    self.set_metric(
                        id=("Memory | Usage", None),
                        value=int((value_usage * 100) / value_total),
                        units="%",
                    )

Преобразование во время нормализации результатов

После сбора метрики направляются для нормализации их значений, для их соответствия единицам измерения и дальнейшей обработки. В этот момент результаты можно использовать для расчёта дополнительных метрик на базе собранных с оборудования, ограничителем выступает пространство метрик (Metric Scope)

Настройка выполняется в разделе Выражение для преобразования (Compose Expression) настройках Типов метрик (Metric Type):

  • Входные метрики (Metric Input) - перечисление метрик для передачи в выражение
  • Выражение (Compose Expression) - выражение Python, куда в качестве переменных передаются значения метрик, указанных выше

В составе системы включены 2 расчётные метрики пропускной способности порта Interface | Bandwidth | In | Ratio, Interface | Bandwidth | Out | Ratio, рассчитываются на базе загрузки (Load In) и текущей скорости (Speed).

Metric Type Compose Expression

Преобразование при работе с порогами

Иногда простого сравнения значения метрики с порогом оказывается недостаточно для принятия решения об аварийной ситуации, и требуется более комплексный анализ значения. В этом случае перед порогом значение преобразуется в Metric Action и только потом передаётся для сравнения.

Схема преобразования

Доступные преобразования в Metric Action

  • Расчёт входного значения на базе нескольких метрик
  • Оконная функция
  • Функция активации
  • Расчёт условия для для ключа

Для применения в пороге более одной метрики применяется подход аналогичный вычисляемой метрике. Для этого в разделе Преобразование (Compose Expression) перечисляются используемые метрики и выражение для вычисления результата:

  • Входные метрики (Metric Input) - перечисление метрик для передачи в выражение
  • Выражение (Compose Expression) - выражение Python, куда в качестве переменных передаются значения метрик, указанных выше

Результат вычисления передаётся на дальнейшую обработку. Например, в случае необходимости можно вычислить пропускную способность канала аналогично описанному в разделе Преобразование во время сбора метрик:

Оконные функции производят расчёты над набором значений, заданном периодом окна. Период может задаваться либо числом измерений, либо интервалом времени. По достижении максимального интервала последние значения будут замещаться предшествующими им.

ИмяОписание работыПараметры
Sum StepСуммирует разницу между соседними значения метрики, находящихся в пределах интервала окнаНаправление суммирования (Direction): по возрастанию (inc) - если следующее значение больше предыдущего, по убыванию (dec) - если следующее значение меньше предыдущего, абсолютное (abs) - модуль разницы значений
Exp DecayЭкспоненциальный распадk - постоянная распада, описывает скорость распада
PercentileВычисляет перцентиль значений метрики, находящихся в пределах интервала окнаp - значение перцентиля от 0 до 100
NthВозвращает значение метрики с заданным номером начиная с последнегоn - номер значения, при n = 1 возвращает последнее
Mean (Average)Вычисляет среднеарифмитическое значений метрики находящихся в пределах интервала окна-

Функции активации - преобразует входное значение метрики для последующего вычисления порога.

ИмяОписание работыПараметры
SoftPlusАппроксимирует входное значениеk - коэффициент аппроксимации
ReluЕсли значение отрицательное, то на выходе будет 0. В остальном выходное значение
IndicatiorЕсли значение положительное или 0 на выходе будет единица (1), если отрицательное - 0
LogisticМатематическая функция

Ключевое выражение позволяет использовать вычислимые условия на языке Python, для принятия решения - передавать ли результат преобразования дальше.

Пример такового преобразования:

Использование преобразования в настройках порогов

После настройки преобразования (Metric Action) его можно выбрать в настройках порога внутри правил для метрик (Metric Rules). В это случае с порогом будет сравниваться значение после выполнения преобразований

Note

Любые расчёты (как для порогов, так и для метрик) могут производиться только в рамках одного пространства метрик (Metric Scope)

Проверка преобразований

Для проверки Metric Action используется команда ./noc cdag, в качестве параметра ей передаётся имя Metric Action: ./noc cdag --config action://Test1, для неё доступны 2 действия:

  • cdag - графической представление Metric Action в формате .dot
  • metrics - проверить работу Metric Action отправив на вход набор метрик

Например, для проверки примера из предыдущего пункта необходимо отправить на вход набор метрик по интерфейсу, для этого выполняется команда ./noc cdag --config action://Test1 metrics --input iface://device10::1/1/15, где device10 имя устройства (Managed Object) из списка . В выводе распечатается результат расчёта Metric Action.