Хабрахабр

[Перевод] Панель мониторинга Grafana для пивной системы BeerTender

Пояснение. BeerTender — устройство для охлаждения и розлива пива от Krups и Heineken. По заявлению производителей, оно сохраняет качества свежего пива в течение 30 дней после открытия кега. Конечно, системным администраторам и девопсам удобно отслеживать температуру и уровень пива в своём бочонке с помощью привычных онлайновых панелей мониторинга. В предыдущей статье рассказывалось, как подключить BeerTender к Warp 10, а сейчас мы настроим панель мониторинга Grafana

В один кластер Warp 10 стекаются все их данные мониторинга. OVHcloud, крупнейший европейский хостер и облачный провайдер, активно использует платформу Warp 10. Это 400 000 серверов, 27 дата-центров, в общей сложности несколько миллионов метрик в секунду!

О нём и поговорим. У них много панелей мониторинга, а теперь OVHcloud является мейнтейнером опенсорсного плагина Warp 10 Grafana, разработку которого мы начали некоторое время назад. Если хотите сами попробовать, данные в открытом доступе — можете скопировать WarpScript ниже.

Мы уже рассказывали, как подключить BeerTender к Warp 10

Установка

Во-первых, устанавливаем Grafana. Следуйте инструкциям на их веб-сайте.

Подключаемся к URL по умолчанию http://localhost:3000/, заходим по дефолтному паролю admin/admin, затем меняем пароль администратора.

Метод с grafana-cli не сработает. Для последней версии Grafana плагин придётся установить вручную. Нужно просто клонировать репозиторий плагина в каталог плагинов Grafana и везде исправить разрешения.

sudo systemctl stop grafana-server.service
sudo chown -R grafana:mygroup /var/lib/grafana/
sudo chmod g+rw /var/lib/grafana/plugins
git clone git@github.com:ovh/ovh-warp10-datasource.git /var/lib/grafana/plugins/ovh-warp10-datasource
sudo chown -R grafana:mygroup /var/lib/grafana/plugins
sudo systemctl start grafana-server.service

Конфигурация

В конфигурации Grafana зайдите в раздел Datasources и добавьте datasource с типом Warp 10. Убедитесь, что он указывает на нужный инстанс Warp 10. Можете указать такие же настройки, как у нас:

Пришло время снять данные с датчика BeerTender…

Отображение температуры

Создайте новый дашборд, добавьте панель с типом визуализации Graph (график) и зайдите в режим построения запроса (Queries):


Исходная температура (целочисленные значения c сенсора)

  • В источнике данных выберите Warp 10 (или значение по умолчанию)
  • Включите редактор WarpScript
  • Скопируйте WarpScript ниже
  • В правом верхнем углу выберите «Последние 30 дней»
  • Сохраните результат

"gCA1SVjbDkaxtmTx9ydI4TI2iGc5hFgcbCWnzMRZSt45XW8dZ53Z7VK_if28i0kXwNDLazXHgLrXUKgxLK0RbS79eJmBCpyBlIxw9US7bPfdWH4Fta51.kXN.D4Hsk5OZOwl.vLRBzMpP7F2pAMfclMXSGtCOT6F" 'rt' STORE [ $rt 'beertender.rawtemperature' NOW 30 d ] FETCH 0 GET

Этот скрипт будет отображать исходные значения от АЦП датчика. Обратите внимание, что редактор WarpScript в Grafana не такой мощный, как раньше, здесь больше нет автодополнения. Можете написать скрипт в WarpStudio или VSCode, так у вас будет подсветка синтаксиса и онлайн-документация, а затем скопировать и вставить результат в Grafana.

Автоматический интервал

В данном примере выбираем 30-дневный интервал и устанавливаем режим просмотра в графане за последние 30 дней. Если мы выбираем режим просмотра за последний день или год, WarpScript будет всегда запрашивать данные каждые 30 дней. Плагин решает эту проблему: для использования в WarpScript'е доступны две переменные — $end и $interval.

[ $rt 'beertender.rawtemperature' {} $end $interval ] FETCH 0

Температура пива

Я сделал несколько замеров воды, льда и горячей воды, сравнивая с эталонным датчиком… Получилось следующее:

T (°C) исходное значение
18,3 680
41,5 870
37,6 841
10 586
11 596
8 559
1 467
4,5 500
6,5 535

Вставим эти значения во временной ряд GTS и отсортируем результат по исходным значениям с датчика:

NEWGTS 'linearInterpolation' RENAME
680 NaN NaN NaN 18.3 ADDVALUE
870 NaN NaN NaN 41.5 ADDVALUE
841 NaN NaN NaN 37.6 ADDVALUE
586 NaN NaN NaN 10 ADDVALUE
596 NaN NaN NaN 11 ADDVALUE
559 NaN NaN NaN 8 ADDVALUE
467 NaN NaN NaN 1 ADDVALUE
500 NaN NaN NaN 4.5 ADDVALUE
535 NaN NaN NaN 6.5 ADDVALUE
SORT


Ожидаемая интерполяция

Самый простой способ интерполяции — сначала построить кривую, а затем применить функцию ATTICK для считывания с неё значений в градусах. Исходные данные с датчика поступают в виде целых чисел.

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

[ $linearInterpolation bucketizer.last 0 1 0 ] BUCKETIZE 0 GET
INTERPOLATE 'truthtableGTS' STORE

Теперь нужно написать свой маппер, чтобы заменить каждое значение с датчика реальным физическим значением температуры, и привести результат в используемый графаной формат. Отлично.

За три месяца накопится 270 тыс. Предупреждение: значения поступают каждые 10 секунд. Слишком много для Grafana… Просто сохраним максимальное значение каждого часа. значений. В WarpScript это BUCKETIZE с бакетизатором bucketizer.max.

Можете скопировать в Grafana этот WarpScript:

// raw value interpolation "gCA1SVjbDkaxtmTx9ydI4TI2iGc5hFgcbCWnzMRZSt45XW8dZ53Z7VK_if28i0kXwNDLazXHgLrXUKgxLK0RbS79eJmBCpyBlIxw9US7bPfdWH4Fta51.kXN.D4Hsk5OZOwl.vLRBzMpP7F2pAMfclMXSGtCOT6F" 'rt' STORE NEWGTS 'linearInterpolation' RENAME
680 NaN NaN NaN 18.3 ADDVALUE
870 NaN NaN NaN 41.5 ADDVALUE
841 NaN NaN NaN 37.6 ADDVALUE
586 NaN NaN NaN 10 ADDVALUE
596 NaN NaN NaN 11 ADDVALUE
559 NaN NaN NaN 8 ADDVALUE
467 NaN NaN NaN 1 ADDVALUE
500 NaN NaN NaN 4.5 ADDVALUE
535 NaN NaN NaN 6.5 ADDVALUE
SORT 'linearInterpolation' STORE [ $linearInterpolation bucketizer.last 0 1 0 ] BUCKETIZE 0 GET
INTERPOLATE 'truthtableGTS' STORE [ $rt 'beertender.rawtemperature' {} NOW $end $interval ] FETCH // subsampling, keep max of every hour
[ SWAP bucketizer.max 0 1 h 0 ] BUCKETIZE
UNBUCKETIZE // do not try to interpolate missing buckets.
// interpolation
[ SWAP <% 'l' STORE [ $l 0 GET //same tick NaN NaN NaN //no latitude/longitude/elevation $truthtableGTS $l 7 GET 0 GET ATTICK 4 GET //take the interpolated value ]
%> MACROMAPPER 0 0 0 ] MAP 'temperature (°C)' RENAME


5°C, нормально для пива


Панель мониторинга BeerTender, первая версия

Уровень в бочонке

Уровень в бочонке замеряет тензометр… Но это дешёвый трёхпроводной датчик на ржавой металлической подставке. С такого оборудования невозможно получить точную информацию. Поэтому неудивительно, что на выходе действительно зашумлённый результат, и абсолютным значениям нельзя доверять. Для нашего BeerTender я нашёл экспериментальную формулу, чтобы Grafana отображала текущий уровень в процентах.

Даже если вы хотите отобразить одно значение, его нужно представить в одной точке данных GTS. Совет: плагин Warp 10 получает данные только из GTS.

Вот WarpScript, который берёт последнюю точку данных и превращает её в процентное значение, а также создаёт временной ряд с одной точкой:

"gCA1SVjbDkaxtmTx9ydI4TI2iGc5hFgcbCWnzMRZSt45XW8dZ53Z7VK_if28i0kXwNDLazXHgLrXUKgxLK0RbS79eJmBCpyBlIxw9US7bPfdWH4Fta51.kXN.D4Hsk5OZOwl.vLRBzMpP7F2pAMfclMXSGtCOT6F" 'rt' STORE //read for beer level
[ $rt 'beertender.rawvalue' {} NOW -1 ] FETCH 0 GET VALUES 0 GET 'rawSensorValue' STORE //raw correction: // empty: 30.8e6
// full (and cold): 30.5e6 30.8e6 $rawSensorValue - 0 MAX 2800 / 100 MIN 'beerlevelPercent' STORE $beerlevelPercent
NEWGTS 'Barre Level (%25)' RENAME
1 NaN NaN NaN $beerlevelPercent ADDVALUE

Этот WarpScript использовать в качестве запроса для панели с типом визуализации Gauge:


Симпатичный индикатор

Если вам интересно, можете посмотреть и исходные данные… Теперь у нас есть токен для доступа к уникальной статистике по потреблению пива!

Выводы

  • Если данные мониторинга за последнее время находятся под вашим контролем, Grafana может легко интегрировать источник данных Warp 10.
  • Плагин Grafana ожидает временной ряд GTS или список GTS.
  • OVHcloud — текущий мейнтейнер плагина. Не стесняйтесь вносить свой вклад!
  • Читайте документацию для дополнительной информации.
  • Если хотите обогатить визуализацию данных, можете брать наши готовые веб-компоненты.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть