← Back to Articles

Настройка Grafana для мониторинга PLC: как я подружил её с ClickHouse

Если у Вас много данных (вы их собираете или работаете с big data) то их надо не только хранить, но и нормально показывать.

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

Для этого я настроил связку Grafana + ClickHouse для мониторинга данных кготорые мы собираем с PLC.

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

Зачем нам вообще Grafana

Grafana хороша тем, что превращает поток технических данных в понятные картинки. Для производства это особенно важно. А еще это просто красиво выглядит.

Когда у тебя есть промышленное оборудование, много сигналов и постоянный сбор данных, обычная таблица просто никого не удивит. Какие-то числа есть, но глазами их не прочитать (представьте недельный сбор на 1 млрд. сигналов?). А график сразу покажет, что происходит: сбор идёт ровно, появились провалы, выросло время опроса, поменялось состояние сигналов и т.д.

Для руководства это тоже работает очень хорошо. Можно показать один экран, где видно динамику и состояние системы в реальном времени. Это сильно упрощает отчетность: обсуждаем не мои догадки, а реальные факты на экране (используйте лайфхак).

ClickHouse в этой связке отвечает за быстрое хранение и выборку данных, а Grafana — за визуализацию. Грубо говоря, ClickHouse — это склад, Grafana — витрина.

С чего надо начинать: сначала проверить базу

Я специально не стал начинать с красивых графиков. Сначала надо было понять, что в базе вообще лежит и насколько этим данным можно доверять.

В ClickHouse уже была рабочая база с двумя важными сущностями: - таблица с полными выборками PLC; - каталог сигналов.

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

Надо проверить простые, но важные вещи:

  • сколько строк уже загружено;
  • есть ли дубликаты;
  • совпадает ли длина массива с количеством сигналов;
  • нет ли неполных выборок;
  • есть ли значения NULL;
  • совпадает ли каталог сигналов с фактическими позициями в массиве.

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

Разворачивание Grafana в Docker

Grafana была развёрнута в отдельном Docker-контейнере. Для настроек и дашбордов использовал постоянный Docker volume, чтобы всё не исчезло после перезапуска контейнера.

База: контейнер можно пересоздать, а рабочие настройки должны жить отдельно.

Дальше Grafana и ClickHouse были объединены общей Docker-сетью. Благодаря этому Grafana подключается к ClickHouse не через внешний интернет, а по внутреннему адресу контейнера и стандартному HTTP-порту ClickHouse.

Снаружи доступ к Grafana настроен через Nginx как reverse proxy, с HTTPS и SSL-сертификатом на своем домене. При этом внутренний порт Grafana напрямую в интернет не публикуется. Для производственного контура это нормальный минимум гигиены: наружу отдаём аккуратную точку входа, а не всё подряд.

Подключение ClickHouse к Grafana

Для подключения к ClickHouse я поставил официальный плагин Grafana для ClickHouse. После этого в Grafana появился новый datasource.

Отдельно был настроен пользователь ClickHouse для графиков. Важно: это не пользователь для входа в саму Grafana, а именно учётка, через которую Grafana читает данные из базы.

Я бы советовал для таких задач не использовать админинку. Лучше отдельный пользователь с минимально нужными правами на чтение. Дашборду обычно не нужно менять таблицы, удалять данные или создавать что-то в базе. Да и в целом это безопаснее.

После настройки datasource я проверил, что Grafana реально получает данные из ClickHouse. Это обязательный шаг до рисования панелей: сначала убеждаемся, что запросы работают, потом уже занимаемся красотой.

Какие панели я собрал

Стартовый дашборд получился простым. Я специально не хотел делать «космический корабль» из 40 графиков. На первом этапе важнее быстро видеть базовое состояние цепочки PLC → ClickHouse → Grafana.

1. Всего выборок PLC

Это самый простой индикатор: сколько полных выборок сохранено в ClickHouse.

Одна выборка — один цикл чтения оборудования, внутри которого лежат значения всех сигналов. Если число растёт после новой выгрузки, значит данные доходят до базы.

2. Частота исходного сбора

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

Если нормальный режим — примерно один опрос в секунду, то на графике ожидаешь видеть около 60 выборок в минуту. Если точка ниже, это не всегда авария: текущая минута могла ещё не завершиться или в ClickHouse выгрузилась только часть данных.

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

3. Время полного чтения PLC

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

Среднее значение по текущим данным было около 55–60 мс, а редкие верхние значения доходили примерно до 100 мс. Это уже похоже на нормальную техническую метрику: можно следить, не начинает ли опрос деградировать со временем не использую сложные sql-запросы.

4. Состояние сигналов

Ещё одна полезная панель — количество логических единиц и нулей в последней выборке.

Важно не путать: единица и ноль здесь не означают «хорошо» и «плохо». Это просто текущее логическое состояние сигналов. Но как быстрый обзор последнего состояния оборудования такая панель очень удобна.

5. Общее количество показаний снятых за все время

Отдельно хорошо считать общее количество отдельных показаний PLC. Это просто количество выборок, умноженное на количество сигналов.

Такая цифра помогает объяснить масштаб данных. Например, сотни тысяч выборок быстро превращаются в миллиарды отдельных значений. Для ClickHouse это нормальная рабочая история, а для человека на встрече такая цифра сразу делает задачу более осязаемой (используйте этот лайфхак, руководство любит большие красивые циферки).

Главный вывод: Grafana не просто красивая обложка для непонятных данных

Хороший дашборд начинается с:

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

И ещё: не надо сразу пытаться показать всё. Для первого рабочего дашборда достаточно нескольких честных графиков, которые отвечают на простые вопросы:

  • данные поступают или нет;
  • как часто идёт сбор;
  • сколько времени занимает чтение;
  • что сейчас видно по сигналам;
  • какой объём данных уже накоплен.

Практическая польза

Если вы настраиваете мониторинг промышленного оборудования через Grafana и ClickHouse, я бы шёл примерно так:

  1. Проверьте базу до Grafana. Графики не спасут плохие данные.
  2. Делайте отдельного пользователя ClickHouse только для чтения.
  3. Начинайте с 3–5 панелей, а не с огромного дашборда.
  4. Показывайте не только значения сигналов, но и здоровье самой цепочки сбора.
  5. Отдельно контролируйте свежесть данных, чтобы не смотреть на красивую, но устаревшую картинку.

Для меня эта задача стала хорошим напоминанием: на заводе ценность данных появляется не в момент, когда они попали в базу, а когда их можно быстро понять и удобно показать руководству. Grafana в связке с ClickHouse как раз решает эту задачу: от сырых выборок PLC до нормального визуального мониторинга, который удобно смотреть.

More articles