Ad Widget

Collapse

Принудительная запись при отсутствии данных

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • shkiper
    Senior Member
    • Mar 2016
    • 123

    #1

    Принудительная запись при отсутствии данных

    Есть элемент данных с ключом mqtt.get (zabbix 5.2), работает нормально На его основе есть вычисляемый элемент данных с функцией sum(5m), тоже работает нормально,
    но только если есть данные по mqtt.get
    Если данных нет, полчаса или час например, то и в вычисляемый элемент не заносится ничего, данные начинают поступать, только когда опять начинают поступать данные по mqtt
    Как сделать так, что-бы в случае отсутствия данных, в значение записывался ноль?

    Предобработку по диапазону пробовал, это не работает
    Надо чтоб в условии предобработки было что-то типа nodata

  • Semiadmin
    Senior Member
    • Oct 2014
    • 1625

    #2
    MQTT у меня нет, но не думаю, что данные от mqtt.get чем-то принципиально отличаются от данных других активных проверок. Попробовал суммировать вычисляемым с sum(5m) данные от zabbix trapper - вполне успешно получается 0 при отсутствии данных за период, и даже при отсутствии данных вообще. Zabbix 5.2.6, не исключено, что раньше это работало по-другому.

    Comment

    • Kos
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2015
      • 3404

      #3
      Originally posted by shkiper
      Есть элемент данных с ключом mqtt.get (zabbix 5.2), работает нормально На его основе есть вычисляемый элемент данных с функцией sum(5m), тоже работает нормально,
      [...]
      Как сделать так, что-бы в случае отсутствия данных, в значение записывался ноль?
      Дополнить формулу в вычисляемом элементе данных домножением результата на выражение (count(5m)>0) от того же исходного элемента данных.
      С учётом того, что в Zabbix-е результат логической операции (например, сравнения) - это всегда ноль или единица, то при наличии каких-то данных за 5 минут эта конструкция будет фиктивной (домножить на один), а при отсутствии - принудительно обнулит результат (домножить на ноль).

      Comment

      • shkiper
        Senior Member
        • Mar 2016
        • 123

        #4
        спасибо за ответы
        в общем проблема в том что, когда по mqtt.get не приходят данные, то их просто нет, вычисляемый элемент с ф-цией агрегации (по ЭД с ключом mqtt.get) и с установленным периодом - не работает
        если бы он что-нибудь писал или возвращал ошибку, это можно было бы обработать и сконвертировать, но он не пишет ничего
        причем если в момент этой "пустоты" попадают ЭД которые агрегируют данные за больший период, они тоже не отрабатывают, например - по mqtt.get нет данных час, и в этот момент по расписанию должен отработать ЭД подсчитывающий за 12 часов, так вот - он не отработает, я этого совершенно не ожидал и заметил через две недели, после запуска
        наверно это связано с тем что у mqtt.get нет периода и какие-то свои особенности работы со временем
        я пытался пропустить через предобработку - через регулярку, типа - если пустая строка, то писать ноль
        но нет даже пустой строки
        вышел из положения создав еще один промежуточный вычисляемый элемент, с ф-цией last
        т.е. - раз в минуту берет последнее показание счетчика
        и уже по нему агрегирую показания за: 5 мин, час, смену и т.д.
        так работает

        Comment

        Working...