Вторая серия. Гайды по настройке диагностики и оповещений в Zabbix для Scada-систем WinCC
Я, Арсений Тиунов, менеджер по визуализации, продолжаю рассказывать о мониторинге SCADA-систем WinCC на производствах «Северстали».
В прошлой части мы поговорили о тех возможностях, которые есть у WinCC и Zabbix для того, чтобы стать отличным диагностическим комплексом. Теперь же хотим поделиться настройками обоих видов диагностики и триггеров для эффективного мониторинга.
![](https://habrastorage.org/getpro/habr/upload_files/34c/591/417/34c591417e52a2b6d5063ebbf7c01c36.jpg)
Гайд 1: как настроить предиктивную диагностику WinCC в Zabbix
Для начала работы мониторинга производительности WinCC на основе системных тегов не требуется каких-либо настроек (вмешательств в проект WinCC). Эти системные теги создаются в проекте автоматически еще на этапе разработки.
Аналогично автоматически создаются и Windows Performance Counters в момент установки SCADA-системы WinCC. В Zabbix существует возможность считывать эти значения, обращаясь к счетчикам производительности в ОС Windows.
![](https://habrastorage.org/getpro/habr/upload_files/b6c/5ba/56f/b6c5ba56f7bbee76b5107acca0c05f96.png)
![](https://habrastorage.org/getpro/habr/upload_files/dac/176/2dd/dac1762dd5bc00d2e4afdff59aefac87.png)
В Zabbix надо создать шаблон (в нашем примере это «asutp_scada»), который удобно масштабируется на любое количество подключенных узлов. Ключ для нужных нам метрик нужно выбрать вида «perf_counter[метрика WinCC]»:
![](https://habrastorage.org/getpro/habr/upload_files/77f/29a/ddc/77f29addc16dd3ba66bf74a36f1cf12c.png)
![](https://habrastorage.org/getpro/habr/upload_files/f46/c8d/378/f46c8d3785e3629426503b4c37e5b17a.png)
Важно отметить, что сбор метрик вида «perf_сounters» можно настроить через LLD (низкоуровневое обнаружение). LLD даёт возможность автоматического создания элементов данных (триггеров, и т.д.),тем самым автоматизируя и упрощая работу для специалиста.
Приведу пример: обычные метрики (redundancy, alarmlogging и др.) можно копипастить с одного узла на другой, а вот с именами соединений всё сложнее - они уникальны и не повторяются. А данные по этим соединениям нам бы пригодились. Полезно регистрировать обмен данными по каждому программируемому логическому контроллеру (ПЛК) или OPC-протоколу, фиксировать нормальный режим работы или наоборот, возникновение проблемы.
Для этого мы должны создать в нашем шаблоне правила обнаружения:
![](https://habrastorage.org/getpro/habr/upload_files/810/0bb/387/8100bb3878cf51ab81bf4c7918ad074c.png)
Прототипы элементов данных при этом будут выглядеть так:
![](https://habrastorage.org/getpro/habr/upload_files/03b/320/cb5/03b320cb5a92d8a6229a5b74a96b70bd.png)
Как видим, каждое выражение в фигурных скобках {#INSTANCE} - это именно та переменная часть, которую необходимо обнаружить. А для нас это отличный способ не писать имена 20 - 30 ПЛК. Эти данные Zabbix может “обнаружить” самостоятельно при применении Вашего шаблона на новом хосте. Быстро, правильно и универсально для любого количества соединений и хостов.
Для старта диагностики метрик WinCC этих настроек достаточно. Можно начинать!
Гайд 2: настраиваем ситуативную диагностику WinCC в Zabbix
Для работы с системными сообщениями потребуется больше усилий, но и ценность такой диагностики возрастает. Выполните следующие шаги.
Создайте теги статуса для системных сообщений:
![](https://habrastorage.org/getpro/habr/upload_files/197/710/00b/19771000b91babcc04810e0febbe30d5.png)
Настройте системные сообщения — привяжите каждому из них тег статуса:
![](https://habrastorage.org/getpro/habr/upload_files/7b3/150/cc0/7b3150cc0d4d39b0289c9b493d2f505f.png)
Создайте VBS-скрипт для подсчета записанных тегов статуса системных сообщений:
![](https://habrastorage.org/getpro/habr/upload_files/de6/2ba/ce7/de62bace724c066c3ed0ca49acf81e43.png)
На этом этапе важно проверить:
совпадение имени (case sensitive) указанного узла с тем, как вы его указали в Zabbix
точный путь к zabbix_sender.exe и имя proxy-сервера
Получаемые счетчики по приоритетам нужно отправить в Zabbix с помощью zabbix_sender.exe (кроссплатформенная утилита, как правило она находится в папке ..\bin\win64) прямо из VBS-скрипта WinCC:
![](https://habrastorage.org/getpro/habr/upload_files/907/f57/ea6/907f57ea63866ded28d610823cbc3771.png)
![](https://habrastorage.org/getpro/habr/upload_files/25e/a3f/5a9/25ea3f5a96d100ed2b09d9a8ca697c60.png)
Гайд 3: как настроить оповещения в Zabbix
Собранные метрики бесполезны, если они не экономят нам время для анализа и реакции на сбойные ситуации. А еще лучше, если они заранее предупредят нас о том, что сбой возможен именно на этом узле. Идеально, если будет оповещение (триггер), что именно этот элемент WinCC нужно проверить и исправить его работу в запланированное для этого время.
Вот пример наших настроек в процессе сбора метрик:
![](https://habrastorage.org/getpro/habr/upload_files/86b/d36/0e2/86bd360e2bb77be6b7b5c95dd31013c1.png)
Здесь еще есть над чем работать, ведь процесс точной подстройки триггеров для WinCC у нас продолжается (по мере увеличения количества подключенных хостов).
А по-настоящему точной подстройка становится благодаря возможности для каждого специалиста сделать её такой для каждого отдельного сервера. В таблице выше, например для очереди скриптов, можно изменить значение параметра $SCRIPT.ACTION.CNT на новое (отличное от прописанного в шаблоне). Подсказать какое значение нужно установить поможет Zabbix, записывая графики метрик работы этого узла.
Вы спросите: «А зачем делать точную настройку? Пусть Zabbix шлёт сообщения о каждой ненулевой метрике проблемы!» Хочется привести в пример нашу повседневную жизнь: пациенты на приёме у врача по-разному живут со своими болячками. Норма артериального давления для каждого возраста разная. Показатели здоровья молодого человека будут существенно отличаться у человека в возрасте.
Хочется верить, что мы разожгли ваш интерес к тому, как это работает на практике. В следующей части расскажем об этом на примере реальных кейсов.