Ad Widget

Collapse

Триггер (data1,data1,nodata1..nodataN+1,data2,data2)

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • masterme
    Junior Member
    • Sep 2016
    • 2

    #1

    Триггер (data1,data1,nodata1..nodataN+1,data2,data2)

    Привет всем.

    Хочу сделать триггер для кошки о причине последней перезагрузки девайса.
    Допустим, итем опрашивается раз в 10 минут, до перезагрузки oid отдавал "reload", при недоступности в 20 минут данных, есс-но, нет, после загрузки oid отдает power-on. Как сделать чтобы триггер висел, например 20 минут и затем пропадал? Такая конструкция правильная?
    {Template:WhyReload.str(power-on)}=1 & {Template:WhyReload.diff()}=1

    При недоступности девайса для данных, вот эти значения nodata заполняют цепочку значений?
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Originally posted by masterme
    Привет всем.

    Хочу сделать триггер для кошки о причине последней перезагрузки девайса.
    Допустим, итем опрашивается раз в 10 минут, до перезагрузки oid отдавал "reload", при недоступности в 20 минут данных, есс-но, нет, после загрузки oid отдает power-on. Как сделать чтобы триггер висел, например 20 минут и затем пропадал? Такая конструкция правильная?
    Code:
    {Template:WhyReload.str(power-on)}=1 & {Template:WhyReload.diff()}=1
    При недоступности девайса для данных, вот эти значения nodata заполняют цепочку значений?
    Последнего вопроса, честно говоря, не понял.

    А как долго после перезагрузки этот oid будет отдавать именно "power-on"? Если более-менее долго, то Ваша конструкция вполне должна работать (разве что, начиная с версии Zabbix 2.4 вместо "&" нужно писать "and").

    Comment

    • masterme
      Junior Member
      • Sep 2016
      • 2

      #3
      Originally posted by Kos
      Последнего вопроса, честно говоря, не понял.

      А как долго после перезагрузки этот oid будет отдавать именно "power-on"? Если более-менее долго, то Ваша конструкция вполне должна работать (разве что, начиная с версии Zabbix 2.4 вместо "&" нужно писать "and").
      Спасибо за ответ.
      Смысл такой: если выдернуть питание и включить назад - то oid будет отдавать "power-on" всегда до следующего пропадания питания/перезагрузки. Если перегрузить устройство командой, то после перезагрузки до следующего перезапуска oid будет всегда отдавать "reload". Вот я и хотел сделать два триггера на эти события.

      Меня смущает вот что: пока устройство работает, заббикс раз в 10 мин успешно опрашивает и получает, например, power-on. Но внезапно устройство становится недоступным из-за питания, скажем, на час. snmpget на данный oid не получает ответа 6 раз. Затем устройство включается и вновь отдается "power-on" . В моей конструкции функция должна diff сравнивать последнее(power-on) и предыдущие(nodata) значения. nodata является полноценным значением?

      П.С. пока просто нет возможности проверить отработку триггера на настоящем железе

      Comment

      • Semiadmin
        Senior Member
        • Oct 2014
        • 1625

        #4
        Использование в триггерах айтемов, ставших неподдерживаемыми, существенно улучшено в версии 3.2. И функция nodata там работает по-другому. Предполагаю, что вашу задачу лучше решать в этой версии.

        Comment

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

          #5
          Ну, при таком поведении и таком триггере - если устройство будет перезагружено быстро (в течение 10 минут между интервалами опроса), то Вы о факте перезагрузки вообще не узнаете.

          Если хочется знать о перезагрузке наверняка, то для SNMP-устройства можно забирать стандартный счётчик sysUpTime и ругаться на перезагрузку при условии, что change()<0. Правда, это 32-битный счётчик, содержащий сотые доли секунды, поэтому через какое-то время (примерно год и 4 месяца) он переполняется и приходит ложное срабатывание.

          А если хочется непременно в оповещении видеть причину перезагрузки, то можно сформулировать триггер, например, как-то так:
          Code:
          {Template:WhyReload.count(10)}>0 and {Template:sysUpTime.change(0)}<0
          а в оповещении упоминать макрос {ITEM.VALUE1}. Второе условие в триггере будет приводить к тому, что триггер сработает только в случае, если аптайм вдруг стал меньше, чем был (признак факта перезагрузки), а первое условие выставит указанный макрос, а заодно подстрахует от ситуации, когда после перезагрузки новое значение аптайма уже пришло, а значение WhyReload - ещё нет (порядок-то опроса мы не регулируем). Срабатывать будет только в случае, когда WhyReload пришло недавно (в течение последних 10-ти секунд), а аптайм при этом поменялся в меньшую сторону. Закрываться будет при следующем получении аптайма. Но в любом случае, такой триггер будет срабатывать только после того, как устройство уже заработало вновь.

          В моей конструкции функция должна diff сравнивать последнее(power-on) и предыдущие(nodata) значения. nodata является полноценным значением?
          Нет, nodata не является значением. Храниться будут только те значения, которые реально получены Zabbix-сервером; в течение того времени, пока устройство выключено - никаких значений не будет (на графиках для числовых значений это отображается в виде разрывов линий).
          Просто обычно формула триггера пересчитывается только в случае, когда приходит новое значение, поэтому при отсутствии значений (например, сетевая проблема или устройство выключено) такие триггеры срабатывать не будут, потому что новых значений нет.
          Однако, есть несколько временнЫх функций (связанных со обработкой времени - date(), time(), nodata(), ещё некоторые - см. тут), при использовании которых триггер также пересчитывается и отдельным фоновым процессом timer каждые 30 секунд (независимо от поступления новых значений). Но в этом случае, например, функция last() отдаст реально последнее на данный момент значение (если оно ещё сохранилось в истории), независимо от того, было ли оно получено 5 секунд или 5 часов назад.
          Last edited by Kos; 23-09-2016, 12:06. Reason: добавлен комментарий про nodata()

          Comment

          Working...