Grafana+Zabbix: Визуализация работы производственной линии

В этой статья я хочу поделиться опытом использования open source систем Zabbix и Grafana для визуализации работы производственных линий. Информация может быть полезна тем, кто ищет быстрый способ визуального отображения или аналитики собранных данных в проектах промышленной автоматизации или IoT. Статья не является подробным руководством, это скорее концепция системы мониторинга, основанная на открытом программном обеспечении для производственного предприятия.


Инструментарий

Zabbix — его мы используем давно для мониторинга ИТ инфраструктуры завода. Система оказалось настолько удобной и универсальной, что мы стали заводить в нее данные с производственных линий, датчиков и контроллеров. Это нам позволило собрать все данные метрик в одном месте, сделать простые графики расхода ресурсов и производительности оборудования, но очень не хватало аналитики и красивых графиков.
Grafana — это мощнейший инструмент для аналитики и визуализации данных. Большое количество плагинов позволяют забирать данные из различных источников (zabbix, clickhouse, influxDB), обрабатывать их на лету (считать среднее значение, сумму, разницу и т.д.) и рисовать всевозможные графики (от простых линий, спидометров, таблиц до сложных схем).
Draw.io — сервис, позволяющий в онлайн редакторе нарисовать от простой блок схемы до плана помещений. Есть много готовых шаблонов и нарисованных объектов. Данные можно экспортировать во все основные графические форматы или xml.


Собираем все вместе

Статей как установить и настроить Grafana и Zabbix написано много, я расскажу про основные моменты конфигурации.
На Zabbix сервере создается «узел сети» (host), которому будут принадлежать «элементы данных» (item) с метриками от наших датчиков. Имена узлов и элементов данных желательно продумать заранее и сделать максимально структурированными, так как к ним мы будем обращаться из графаны через регулярные выражения. Такой подход удобен тем, что можно одним запросом получать данные с группы элементов.

Для настройки графаны потребуется установить дополнительные плагины:


  • Zabbix by Alexander Zobnin (alexanderzobnin-zabbix-app) — интеграция с zabbix
  • natel-discrete-panel — плагин для дискретной визуализации на горизонтальном графике
  • pierosavi-imageit-panel — плагин для отображения данных поверх своей картинки
  • agenty-flowcharting-panel — плагин для динамической визуализации схемы из draw.io

Сама интеграция с заббиксом настраивается в графане, пункт меню Configuration\Data sources\Zabbix. Там нужно указать адрес api zabbix сервера, у меня это http://zabbix.local/zabbix/api_jsonrpc.php, и логин с паролем для доступа. Если все сделано правильно, при сохранении настроек будет сообщение с номером версии api: zabbix API version: 5.0.1


Создаем Dashboard

Вот тут начинается та самая магия графаны и ее плагинов.

Плагин natel-discrete-panel
У нас есть данные о статусах двигателей на линиях (работает = 1, не работает =0). При помощи графика discrete мы можем нарисовать шкалу, на которой будет видно: статус двигателя, сколько он проработал минутах/часах или % и как часто запускался.

image
Визуализация статусов двигателей

На мой взгляд, это один из лучших графиков для визуализации производительности оборудования. Сразу видно сколько времени оно простаивает, в каких режимах работает чаще. Данных может быть много, есть возможность их агрегации по диапазонам, преобразование по значениям (если значение »1», то отображать как «ON»)

Плагин pierosavi-imageit-panel
Imageit удобно использовать когда у вас уже есть нарисованная схема или план помещения, на которую вы хотите нанести данные с датчиков. В настройках визуализации нужно указать url адрес к картинке и добавить нужные вам элементы sensor. Элемент появляется на картинке и его можно разместить в нужном месте мышкой.

image
Схема печи с метриками температуры и давления

Плагин agenty-flowcharting-panel
Про создание визуализации FlowCharting я хотел бы рассказать более подробно, так как это невероятно функциональный инструмент. Он позволяет сделать динамическую мнемосхему, элементы которой будут реагировать на значения метрик (менять цвет, положение, название итд).


Получение данных

Создание любого элемента визуализации в графане начинается с запроса данных из источника, в нашем случае это zabbix. При помощи запросов нужно получить все метрики, которыми мы хотим воспользоваться на схеме. Реквизиты метрик — это имена элементов данных в заббиксе, можно указать как отдельную метрику, так и множество с фильтрацией через регулярное выражение. В моем примере поле Item содержит выражение:»/(^линия 1)|(наличие)|(кабачок)/» — это означает: отобрать все метрики, имя которых строго начинается с «линия 1» или содержит слово «наличие» или содержит слово «кабачок»

image
Пример настройки запроса данных о двигателях первой линии и наличии сырья


Преобразование данных

Исходные данные могут быть не всегда в том виде, в котором нам нужно их отобразить. Например, у нас есть ежеминутные данные о весе продукта в емкости (кг), и нам нужно отобразить скорость заполнения в т/час. Я это делаю следующим образом: беру данные о весе и преобразую их функцией графаны delta, которая считает разницу между значениями метрики, так текущий вес превращается в кг/мин. Затем умножаю на 0.06 для приведения результата в тонны/час. Так как метрика веса используется в нескольких запросах, я указываю для нее новый псевдоним (setAlias) и буду его использовать в правиле визуализации.

image
Пример использования параметра delta и множителя и переименования метрики в запросе

Вот еще пример преобразования данных: мне нужно было подсчитать кол-ва замесов (начало цикла = пуск двигателя). Метрика считается на основе статуса двигателя «линия 1 — насос откачки из бака 1 (статус)». Преобразование: данные исходной метрики меняем функцией delta (разница значений), таким образом в метрике будет значение »+1» для пуска двигателя,»-1» для остановки и »0» когда двигатель не меняет свой статус. Затем убираю все значения меньше 1 и суммирую их. В результате получается кол-во пусков двигателя.

image
Пример преобразования данных из текущего статуса в кол-во пусков


Теперь про саму визуализацию

В настройках отображения есть кнопка «Edit Draw», она запускает редактор, в котором можно нарисовать схему. У каждого объекта на схеме есть свои параметры. Например, если указать настройки шрифта в редакторе — они будут применяться к визуализации данных в графане.

image
Так выглядит редактор в Draw.io

После сохранения схемы, она появится в графане и можно будет создавать правила изменения элементов.
В параметрах () мы указываем:


  • Options — задается имя правила (Rule name), название или псевдоним метрики, данные которой будут использоваться (Apply to metrics). Тип агрегации данных (Aggregation) влияет на конечный результат метрики, так Last — означает, что будет выбрано последнее значение, avg — среднее значение за период, выбранный в верхнем правом углу.
  • Thresholds — параметр пороговых значений, описывает логику применения цвета, то есть выбранный цвет будет применяться к элементам на схеме в зависимости от данных метрики. В моем примере при значении метрик »0» — статус «Ok» цвет будет зеленый, при значении »>1» статус Critical и цвет будет красный.
  • Color/Tooltip Mappings» и «Label/Text Mappings» — выбор элемента схемы и сценария его поведения. В первом сценарии объект будет закрашен, во втором — на нем будет текст с данными из метрики. Для выбора объекта на схеме нужно нажать знак цепи и кликнуть мышкой на схеме.

image
На этом примере я закрашиваю насос и его стрелку красным цветом если он работает и зеленым если нет

При помощи плагина flowcharting мне удалось нарисовать схему всей линии, на которой:
1) меняется цвет агрегатов в соответствии с их статусом
2) есть сигнализация отсутствия продукта в емкостях
3) отображается настройка частот двигателей
4) скорость заполнения/сброса первого бака
5) подсчитывается кол-во циклов работы линии (замесы)

image
Визуализация работы производственной линии


Результат

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


Заключение

Мне очень понравилась связка Zabbix+Grafana и я рекомендую обратить на нее внимание, если вам нужно быстро обработать данные с контроллеров или датчиков без программирования или внедрения сложных коммерческих продуктов. Безусловно, это не заменит профессиональные SCADA системы, но будет достаточено как инструмент централизованного мониторинга всего производства.

© Habrahabr.ru