Ad Widget

Collapse

Template для Modbus-хостов

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Wadim_Sch
    Member
    • Feb 2022
    • 83

    #1

    Template для Modbus-хостов

    Хост для сбора Modbus параметров работает. За хост я считаю стойку (Rack), который считывает информацию с соответствующего конроллера (IP) и номера счетчика для каждой линии A и B.
    Один блок розеток в стойке подключен к линии А, второй к B.
    Плагин Modbus поставляется вместе с zabbix_agent2 и не требует установки и настройки.
    Некоторые настройки можно сделать непосредственно в файле zabbix_agent2.conf но по сути они не обязательные (if certain parameter is not specified for a named session, a value from key will be used) если в Item-e использовать полную строку:
    Code:
    modbus.get[tcp://10.34.230.102:502,4,3,512,1,uint64,mle,0
    В zabbix_agent2.conf можно настроить только:
    Endpoint: tcp://10.34.230.102:502
    SlaveID (номера счетчика): 4
    Timeout: X.
    Я пытаюсь cоздать Template, но так как раньше делал только Template-ы для SNMP, не соображу пока как это сделать.
    Настройки Item у меня следующие (я подчекнул что может меняться. IP-Контроллера и номер счетчика):​
    Click image for larger version  Name:	Modbus1.jpg Views:	0 Size:	35.2 KB ID:	488655
    Далее я забираю эту информацию в другой Item:​
    Click image for larger version  Name:	Modbus2.jpg Views:	0 Size:	40.5 KB ID:	488656
    Так как мне важно имя ключа Energy.Active.[X], которое используется потом на хосте-zabbix для суммирования результатов всех счетчиков определенного клиента.
    Далее я использую информацию из Item с ключем Energy.Active.[X] при расчете потребления за текущий месяц, которые также потом на хосте-zabbix суммируются.
    Click image for larger version  Name:	image.png Views:	0 Size:	17.4 KB ID:	488657
    Что хотелось бы в Template.
    Как то спрятать эту жудкую конструкцию modbus.get[tcp://10.34.230.102:502,4,3,512,1,uint64,mle,0 и принимать данные непосредственно в Item с ключем Energy.Active.[X]. Или оставить как есть, но каким-то образом изменять следующие парметры:
    modbus.get[tcp://10.34.230.102:502,4,3,512,1,uint64,mle,0
    или задавать их при создании хоста. Может быть макросы здесь помогут?​
    Attached Files
    Last edited by Wadim_Sch; 30-07-2024, 16:29.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Мне трудно давать конкретные рекомендации, поскольку я не знаю соотношения между различными типами объектов в вашем случае (стойки, линии, розетки, счётчики и т.п.).
    Если указанный в ключе элемента данных IP соответствует контроллеру, то однозначно имеет смысл вынести этот IP в макрос, который определять на уровне хоста.
    Если для разных контроллеров одни и те же счётчики имеют одинаковые номера, то можно их указать явно прямо в шаблоне (и этот шаблон тогда можно будет применять к разным хостам); иначе придётся либо выносить и их тоже в макросы (но тогда, скорее всего, таких макросов будет несколько - вряд ли у вас на одном хосте мониторится один-единственный параметр), либо как-то прикручивать LLD (но тогда нужно понимать, есть ли какой-то механизм, позволяющий найти нужные номера счётчиков для разных хостов).
    Далее я забираю эту информацию в другой Item:
    Я бы этот "другой item" делал бы не вычисляемым, а зависимым от исходного. Вычисляемый имеет смысл, если формула содержит ссылки на несколько других элементов данных либо когда нужно своё отдельное расписание; в данном случае ни того, ни другого здесь нет.

    Comment

    • Wadim_Sch
      Member
      • Feb 2022
      • 83

      #3
      На сегодняшний день modbus-Template выглядет так:
      Click image for larger version  Name:	image.png Views:	0 Size:	57.9 KB ID:	488749
      Он собирает пока только данные Wh с каждого из двух датчиков (для линии A и для линии B). Данные о токе, напряженнии и т.п. получить через Zabbix-модуля modbus пока не удается, да это и не приоритетная задача.
      Кстати спасибо за подсказку. "
      Я бы этот "другой item" делал бы не вычисляемым, а зависимым от исходного."
      Я никогда такой тип данных раньше не применял.

      Объясню подробнее как у нас всё устроено и как я настроил. Может быть кому-то пригодится:
      В серверной находятся всего два modbus-контроллера один на линию А и ещё один на линию B, с IP-Адресами: A-10.34.230.101 и B-10.34.230.102
      Каждый контроллер имеет 54 датчика со сквозной нумерацией 1-54. За каждый шкаф отвечают два датчика один от линии А, второй от линии B. (К линии A подключен блок розеток А, к линии B подключен блок розеток B)
      Номера датчиков в шкафу совпадают. То есть для шкафа Rack1.4 мы должны считывать параметры для Wh так:
      A: 10.34.230.101 датчик номер 4, регистр с Wh номер 512.
      B: 10.34.230.102 датчик номер 4, регистр с Wh номер 512.

      или в эквиваленте Zabbix-модуля modbus:

      modbus.get[tcp://10.34.230.101:502,4,3,512,1,uint64,mle,0]
      modbus.get[tcp://10.34.230.102:502,4,3,512,1,uint64,mle,0]

      Шкафы у нас имеют не сквозную нумерацию. Номер шкафа содержит номер ряда и номер шкафа в ряду. То есть например оба датчики в шкафу Rack2.2 имеют номер 14 и связать имя хоста/шкафа с номером датчика в шкафу невозможно.
      К тому же протокол modbus оказался каким-то суперприметивным. В контроллер нельзя записать какую либо текстовую информацию, с именем шкафа например, и соответственно считать это после (ну или это наши контроллеры такие).К тому же Zabbix-модуль может только цифровые данные получать.
      Поэтому строить Template с LLD не получится, во всяком случае LLD особо и не нужна так как в хосте всего 6 Item-ов.

      Про макросы на хостах (спасибо за подсказку).
      Я макросы раньше только в шаблонах использовал для быстрого изменения параметров триггеров.

      В шаблоне я сконфигурировал Item для сбора данных c modbus так:
      Code:
      modbus.get[tcp://10.34.230.101:502,{$SENSOR_NUMMER},3,512,1,uint64, mle,0]
      При этом на хосте связаным с этим шаблоном должен быть сконфигурирован макрос {$SENSOR_NUMMER} с номером датчика (например 4 для приведенного выше примера(
      Так же на хосте должен быть сконфигурирован макрос {$CLIENT_NAME}, который истользуется в Item-ах Energy.Active.A Energy.Active.B и в Energy.Active.CurrentMonth.A Energy.Active.CurrentMonth.B в тэгах для дальнейшего суммурования на хосте-Zabbix.
      Tag: PDU_Client Value: AllEnergy_{$CLIENT_NAME} и
      Tag: PDU_Client Value: EnergyCurrentMonth_{$CLIENT_NAME}
      Last edited by Wadim_Sch; 31-07-2024, 13:12.

      Comment

      Working...