Вопрос или проблема
Я извлекаю данные через SNMP с некоторых Dell iDRAC. Они предоставляют несколько измерений температуры системы:
- Температура на входе системной платы
- Температура CPU1
- Температура CPU2
- Температура CPU3
- Температура CPU4
- Температура окружающей среды шасси
Для каждой метрики также доступны различные пороговые значения. Для каждого значения temperatureProbeReading
есть соответствующее значение temperatureProbeUpperNonCriticalThreshold
и temperatureProbeUpperCriticalThreshold
. Метрики представлены с помощью snmp-exporter в следующем виде:
# HELP temperatureProbeReading 0700.0020.0001.0006 Этот атрибут определяет показания температурного датчика, тип которого отличается от temperatureProbeTypeIsDiscrete - 1.3.6.1.4.1.674.10892.5.4.700.20.1.6
# TYPE temperatureProbeReading gauge
temperatureProbeReading{temperatureProbeIndex="1",temperatureProbeLocationName="System Board Inlet Temp",temperatureProbechassisIndex="1"} 290
temperatureProbeReading{temperatureProbeIndex="2",temperatureProbeLocationName="CPU1 Temp",temperatureProbechassisIndex="1"} 490
temperatureProbeReading{temperatureProbeIndex="3",temperatureProbeLocationName="CPU2 Temp",temperatureProbechassisIndex="1"} 480
temperatureProbeReading{temperatureProbeIndex="4",temperatureProbeLocationName="CPU3 Temp",temperatureProbechassisIndex="1"} 430
temperatureProbeReading{temperatureProbeIndex="5",temperatureProbeLocationName="CPU4 Temp",temperatureProbechassisIndex="1"} 400
temperatureProbeReading{temperatureProbeIndex="6",temperatureProbeLocationName="Chassis Ambient Temp",temperatureProbechassisIndex="1"} 290
# HELP temperatureProbeUpperNonCriticalThreshold 0700.0020.0001.0011 Этот атрибут определяет верхний некритический порог температурного датчика - 1.3.6.1.4.1.674.10892.5.4.700.20.1.11
# TYPE temperatureProbeUpperNonCriticalThreshold gauge
temperatureProbeUpperNonCriticalThreshold{temperatureProbeIndex="1",temperatureProbeLocationName="System Board Inlet Temp",temperatureProbechassisIndex="1"} 420
temperatureProbeUpperNonCriticalThreshold{temperatureProbeIndex="2",temperatureProbeLocationName="CPU1 Temp",temperatureProbechassisIndex="1"} 980
temperatureProbeUpperNonCriticalThreshold{temperatureProbeIndex="3",temperatureProbeLocationName="CPU2 Temp",temperatureProbechassisIndex="1"} 980
temperatureProbeUpperNonCriticalThreshold{temperatureProbeIndex="4",temperatureProbeLocationName="CPU3 Temp",temperatureProbechassisIndex="1"} 980
temperatureProbeUpperNonCriticalThreshold{temperatureProbeIndex="5",temperatureProbeLocationName="CPU4 Temp",temperatureProbechassisIndex="1"} 980
temperatureProbeUpperNonCriticalThreshold{temperatureProbeIndex="6",temperatureProbeLocationName="Chassis Ambient Temp",temperatureProbechassisIndex="1"} 440
# HELP temperatureProbeUpperCriticalThreshold 0700.0020.0001.0010 Этот атрибут определяет верхний критический порог температурного датчика - 1.3.6.1.4.1.674.10892.5.4.700.20.1.10
# TYPE temperatureProbeUpperCriticalThreshold gauge
temperatureProbeUpperCriticalThreshold{temperatureProbeIndex="1",temperatureProbeLocationName="System Board Inlet Temp",temperatureProbechassisIndex="1"} 470
temperatureProbeUpperCriticalThreshold{temperatureProbeIndex="2",temperatureProbeLocationName="CPU1 Temp",temperatureProbechassisIndex="1"} 1030
temperatureProbeUpperCriticalThreshold{temperatureProbeIndex="3",temperatureProbeLocationName="CPU2 Temp",temperatureProbechassisIndex="1"} 1030
temperatureProbeUpperCriticalThreshold{temperatureProbeIndex="4",temperatureProbeLocationName="CPU3 Temp",temperatureProbechassisIndex="1"} 1030
temperatureProbeUpperCriticalThreshold{temperatureProbeIndex="5",temperatureProbeLocationName="CPU4 Temp",temperatureProbechassisIndex="1"} 1030
temperatureProbeUpperCriticalThreshold{temperatureProbeIndex="6",temperatureProbeLocationName="Chassis Ambient Temp",temperatureProbechassisIndex="1"} 470
Я хотел бы использовать эти значения в качестве порогов в некоторых визуализациях “Gauge”. Я немного изучил преобразования и “конфигурацию из результатов запросов“, что, кажется, может быть правильным путем, но я не совсем уверен, что понимаю поведение этой функции. Я хотел бы начать с следующего запроса:
temperatureProbeReading{instance="$instance"}/10
Это должно отобразить набор индикаторов, по одному для каждого местоположения датчика, и я хотел бы, чтобы каждый индикатор имел порог, вычисленный из соответствующих значений temperatureProbeUpperNonCriticalThreshold
и temperatureProbeUpperCriticalThreshold
. Просто создать индикаторы легко; только с помощью самого запроса я получаю:
Отлично! Но я не уверен, как настроить динамические пороги. Я начал с добавления дополнительных запросов для значений порогов…
…и теперь у меня слишком много индикаторов (чтобы было ясно, я это ожидал; я просто не уверен, является ли это необходимым первым шагом или нет).
Настройки “конфигурации из результатов запросов” не позволяют использовать значение из одного запроса в качестве порога для другого (в данном случае, у меня есть три запроса — A, B и C — и я хотел бы использовать результаты из B и C, чтобы установить порог для A [а затем скрыть B и C из визуализации]).
Есть ли способ сделать это? Я надеялся избежать необходимости создания шести отдельных визуализаций с статическими порогами.
Ответ или решение
Создание динамических порогов для визуализации датчиков температуры в Grafana может значительно улучшить удобство мониторинга систем, предоставляя гибкую настройку на основе текущих данных. Чтобы интегрировать динамические пороги температуры в ваши графики, сначала необходимо понять, как Grafana работает с запросами и как оно может использовать несколько запросов для настройки визуализации.
Теория: Понимание и настройка порогов в Grafana
Grafana предлагает визуализацию данных из различных источников, включая SNMP, через плагины, такие как snmp-exporter, который преобразует данные из MIB OID в метрики Prometheus. В вашем случае, вы извлекаете данные о температуре и пороговые значения для критически и некритически допустимых температур. Эти пороговые значения важны для настройки системных предупреждений и визуализации, так как они определяют, когда необходимо принять меры по предотвращению перегрева систем.
В Grafana для метрик можно установить статические пороги, однако более продвинутый подход предполагает использование динамических порогов на основе данных, поступающих в реальном времени. Чтобы реализовать это, вы используете функцию "Config from query results", которая позволяет задействовать результаты одного запроса для конфигурации другого.
Пример: Как настроить динамические пороги
Вы уже начали процесс, добавив дополнительные запросы для извлечения пороговых значений температуры из SNMP. Основная идея заключается в создании запросов, каждый из которых будет извлекать нужные метрики: A для показателей температуры, B для некритических порогов и C для критических. В вашем случае:
-
Запрос A: Извлечение текущей температуры (например,
temperatureProbeReading{instance="$instance"}/10
). Это ваши основные данные, которые вы хотите визуализировать на графике. -
Запрос B: Извлечение некритического температурного порога (например,
temperatureProbeUpperNonCriticalThreshold{instance="$instance"}/10
). -
Запрос C: Извлечение критического температурного порога (например,
temperatureProbeUpperCriticalThreshold{instance="$instance"}/10
).
После того как вы настроили эти запросы, вам нужно настроить Transformations
и Overrides
, чтобы использовать значения из B и C как пороги для A. Следуйте этим шагам:
- Перейдите в панель визуализации графиков Gauge в Grafana.
- Откройте раздел Query и создайте три упомянутых запроса (A, B, C).
- Перейдите на вкладку Transformations после Query.
- Используйте
Merge
илиJoin
для объединения результатов запросов B и C с запросом A на основе labeltemperatureProbeIndex
. - Перейдите в раздел Overrides в конфигурации панели, чтобы задать правила для отображения.
- Настройте пороги, используя функции передачи параметров из результатов запросов B и C как динамические пороги для запроса A.
Применение: Интеграция и визуализация
После того как вы настроили объединение данных в разделе Transformations и установили пороговые значения динамически через Overrides, ваши графики смогут гибко отображать температурные значения с учетом текущих порогов. Динамические пороги позволяют значительно улучшить видимость по монитору каждого элемента системы, создавая предупреждения в реальном времени, когда температура выходит за рамки допустимого, что особенно важно для предотвращения перегрева и сбоев в работе серверов.
В дополнение, стоит скрыть метрики запросов B и C для чистоты отображения. Это можно сделать через настройки панели, выбирая какие из результатов показывать или скрывать в визуализации. Эти шаги обеспечат более точное и оперативное управление вашими системами.
Таким образом, Grafana позволяет динамически интегрировать и визуализировать данные о температуре, что обеспечит эффективное и надежное решение для мониторинга состояния вашего оборудования, минимизируя риски и упрощая диагностику.