Ad Widget

Collapse

Настройка Zabbix SNMP traps

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • natalia
    Senior Member
    • Apr 2013
    • 159

    #1

    Настройка Zabbix SNMP traps

    Помогите пож-та разобраться ...

    У меня трапы посылаются из java code from App servers to localhost : with "Error" status (когда есть проблема) и "OK" (когда проблема исчезла) .
    какой метод мне подходит ?
    как мне настроить перенаправку трапов к заббих серверу ?
    что должно быть в item/trigger что бы каждый трап был отдельным alert in dashboard и "нормал" alert ack. the "error" alert. ?

    zabbix 2.0.6

    Спасибо за помощь!
  • Jimson
    Senior Member
    • Jan 2008
    • 1327

    #2
    Есть два разных подхода к использованию трапов железками, некоторые используют оба: трапы как события и трапы как алерты. В первом случае все предельно ясно, это просто журнал который мы будем писать в итем типа log, можно сделать какие то триггеры которые будут по регулярным выражениям срабатывать, но возникнут проблемы с тем как "гасить" такие триггеры.
    Во втором случае мы сталкиваемся с алерт системой, для каждого алерта обычно определены ID, Severity, State (active/clean), некое указание на подсистему где произошла авария и собственно описание алерта. По сути такие трапы это независимые триггеры, и такая схема на сколько я понимаю в zabbix не поддерживается. Разве что вы заведете вручную для каждого Alert ID отдельный триггер.

    По поводу как принимать триггеры в Zabbix. Тут часто данная тема поднимается, все начинают настраивать по официальной документации. Вполне рабочий вариант при условии что для каждого SNMP agent-а у нас заведен отдельный zabbix хост.
    В качестве альтернативы можно предложить записывать трапы скриптов через zabbix_sender API, т.е. через траппер. Этот вариант пригодится если хост опеределяется одним из параметров трапа, а не адресом агента.

    Comment

    • natalia
      Senior Member
      • Apr 2013
      • 159

      #3
      Originally posted by Jimson
      Есть два разных подхода к использованию трапов железками, некоторые используют оба: трапы как события и трапы как алерты. В первом случае все предельно ясно, это просто журнал который мы будем писать в итем типа log, можно сделать какие то триггеры которые будут по регулярным выражениям срабатывать, но возникнут проблемы с тем как "гасить" такие триггеры.
      Во втором случае мы сталкиваемся с алерт системой, для каждого алерта обычно определены ID, Severity, State (active/clean), некое указание на подсистему где произошла авария и собственно описание алерта. По сути такие трапы это независимые триггеры, и такая схема на сколько я понимаю в zabbix не поддерживается. Разве что вы заведете вручную для каждого Alert ID отдельный триггер.

      По поводу как принимать триггеры в Zabbix. Тут часто данная тема поднимается, все начинают настраивать по официальной документации. Вполне рабочий вариант при условии что для каждого SNMP agent-а у нас заведен отдельный zabbix хост.
      В качестве альтернативы можно предложить записывать трапы скриптов через zabbix_sender API, т.е. через траппер. Этот вариант пригодится если хост опеределяется одним из параметров трапа, а не адресом агента.
      мой вариант : трапы как алерты

      я думаю создать вручную для каждого Alert ID отдельный триггер это возможно или использовать ЛЛД (взять данные о всех трапов из general xml file)

      попыталась настроить "Bash скрипт и zabbix_sender" : с Zabbix server работает , а на других agent hosts не работает - 1. не могу найти zabbix_sender на agent host, 2. скопировала zabbix_sender from zabbix server, но трапы не доходят, может не подходит метод "Bash скрипт и zabbix_sender" ?

      Спасибо !!!

      Comment

      • Jimson
        Senior Member
        • Jan 2008
        • 1327

        #4
        Вы заразились в соседнем топике, я ничего не понял в последнем абзаце.

        zabbix_sender - утилита, как ей пользоваться вы наверняка разберетесь.

        Есть еще понятие "zabbix sender API", это собственно описание того как именно указанная утилита отсылает данные zabbix-серверу. Протокол очень простой и следовательно при минимальных навыках программирования на perl/python/php/java/etc можно написать нормальный скрипт, который будет отсылать данные серверу самостоятельно и не придется постоянно дергать утилиту. Надо оно вам или нет решать вам, зависит от объема данных, например, у меня поток трапов примерно 1.5 миллиона событий в месяц.

        zabbix_sender посылает данные на элементы данных типа "траппер" (НЕ SNMP ТРАППЕР!), это отдельный тип элемента данных, при чем там у вас "агент" я не понял

        Перефразируйте что у вас там не работает.

        P.S. Как заводить пачку триггеров решать только вам, можно и через LLD, хорошая идея... Правило LLD в виде внешнего скрипта, который сканирует некий текстовый файл с описанием алертов и формирует JSON, в котором будут определены макросы необходимые для формулы прототипа триггера. Есть только одна проблема: важность триггера нельзя задать динамически, поэтому прийдется сделать несколько правил дискаверинга отдельно для каждого Severity.

        Comment

        • natalia
          Senior Member
          • Apr 2013
          • 159

          #5
          Originally posted by Jimson
          Во втором случае мы сталкиваемся с алерт системой, для каждого алерта обычно определены ID, Severity, State (active/clean), некое указание на подсистему где произошла авария и собственно описание алерта. По сути такие трапы это независимые триггеры, и такая схема на сколько я понимаю в zabbix не поддерживается. Разве что вы заведете вручную для каждого Alert ID отдельный триггер.
          я посылаю трапы :

          snmptrap -v 1 -c public 127.0.0.1 '.1.3.6.1.6.3.1.1.5.1' '0.0.0.0' 6 33 '55' .1.3.6.1.6.3.1.1.5.1 s "test02"
          snmptrap -v 1 -c public 127.0.0.1 '.1.3.6.1.6.3.1.1.5.1' '0.0.0.0' 6 33 '55' .1.3.6.1.6.3.1.1.5.1 s "test01"

          определила в zabbix :





          в dashboard вижу только один alert (т.к. в триггере regexp ),
          как сделать что б были 2 alerts в dashboard ?
          Last edited by natalia; 11-06-2014, 07:23.

          Comment

          • Jimson
            Senior Member
            • Jan 2008
            • 1327

            #6
            Вам надо вначале научиться использовать триггеры
            То что у вас нам сконфигурировано так и должно работать: в каждый момент времени будет только один триггер в состоянии проблема.

            Comment

            • vvlad
              Member
              • Apr 2011
              • 83

              #7
              Уж если идти по пути "Отдельный аларм - отдельный тригер", то необходимо к всему прочему к каждому тригеру отдельный элемент данных заводить. И выражение тригера строить так, чтобы он переходил в ПРОБЛЕМА при появлении в значении этого элемента строки Error

              Comment

              • Jimson
                Senior Member
                • Jan 2008
                • 1327

                #8
                Originally posted by vvlad
                Уж если идти по пути "Отдельный аларм - отдельный тригер", то необходимо к всему прочему к каждому тригеру отдельный элемент данных заводить. И выражение тригера строить так, чтобы он переходил в ПРОБЛЕМА при появлении в значении этого элемента строки Error
                Вот не надо тут Камаза костылей, вполне хватит одного.
                Для каждого аларма должен быть создан уникальный триггер, который анализом текстового элемента данных примет решение переключаться ему или нет. Гистерезис и regexp хватит за глаза.

                Code:
                (
                {TRIGGER.VALUE} = 0 &
                   RealHost:alarmkey.regexp("AlarmCode:56") = 1 &
                   RealHost:alarmkey.regexp("AlarmAction:1") = 1
                ) | (
                {TRIGGER.VALUE} = 1 &
                   (
                   RealHost:alarmkey.regexp("AlarmCode:56") = 0 |
                   RealHost:alarmkey.regexp("AlarmAction:0") = 1
                   )
                )
                RealHost:alarmkey это обычный элемент данных шаблона, а триггер может создаваться через LLD правило, правил должно быть по кол-ву различных Severity, ну а дальше уже зависит от особенностей аларм системы.

                Comment

                • natalia
                  Senior Member
                  • Apr 2013
                  • 159

                  #9
                  Originally posted by Jimson
                  Вот не надо тут Камаза костылей, вполне хватит одного.
                  Для каждого аларма должен быть создан уникальный триггер, который анализом текстового элемента данных примет решение переключаться ему или нет. Гистерезис и regexp хватит за глаза.

                  Code:
                  (
                  {TRIGGER.VALUE} = 0 &
                     RealHost:alarmkey.regexp("AlarmCode:56") = 1 &
                     RealHost:alarmkey.regexp("AlarmAction:1") = 1
                  ) | (
                  {TRIGGER.VALUE} = 1 &
                     (
                     RealHost:alarmkey.regexp("AlarmCode:56") = 0 |
                     RealHost:alarmkey.regexp("AlarmAction:0") = 1
                     )
                  )
                  RealHost:alarmkey это обычный элемент данных шаблона, а триггер может создаваться через LLD правило, правил должно быть по кол-ву различных Severity, ну а дальше уже зависит от особенностей аларм системы.
                  Большое спасибо за объяснения и пример !!!!!!!!

                  У меня возможны ~200 трапов :

                  они различаются : Specific: <1-200>

                  и след. параметрами :
                  - [1] - trap name
                  - [2] - host name
                  - [8] - status (ERROR or OK)
                  - [9] - alert text


                  Вот примет "ERROR" и "OK" трапа :

                  Generic: 6; Specific: 60; Enterprise: .1.3.6.1.4.1.12345.2;
                  Variables:

                  [1] .1.3.6.1.4.1.12345.2.1.1 (OctetString): com.cassandra.impl.event.DStoreConnectionErrorEven t
                  [2] .1.3.6.1.4.1.12345.2.1.2 (OctetString): abc180
                  [3] .1.3.6.1.4.1.12345.2.1.3 (OctetString): null.null
                  [4] .1.3.6.1.4.1.12345.2.1.4 (OctetString): The host abc11(10.11.12.13):9970 is down. Unable to connect to cassandra node/s, [abc11(10.11.12.13):9970]
                  [5] .1.3.6.1.4.1.12345.2.1.5 (OctetString): DStore
                  [6] .1.3.6.1.4.1.12345.2.1.6 (OctetString): null
                  [7] .1.3.6.1.4.1.12345.2.1.7 (OctetString): click.logging.Context
                  [8] .1.3.6.1.4.1.12345.2.60.1 (OctetString): Error
                  [9] .1.3.6.1.4.1.12345.2.60.2 (OctetString): The host abc11(10.11.12.13):9970 is down. Unable to connect to cassandra node/s, [abc11(10.11.12.13):9970]
                  [10] .1.3.6.1.4.1.12345.2.60.3 (OctetString): [abc11(10.11.12.13):9970]



                  Generic: 6; Specific: 60; Enterprise: .1.3.6.1.4.1.12345.2;
                  Variables:

                  [1] .1.3.6.1.4.1.12345.2.1.1 (OctetString): com.cassandra.impl.event.DStoreConnectionErrorEven t
                  [2] .1.3.6.1.4.1.12345.2.1.2 (OctetString): abc180
                  [3] .1.3.6.1.4.1.12345.2.1.3 (OctetString): null.null
                  [4] .1.3.6.1.4.1.12345.2.1.4 (OctetString): The host abc11(10.11.12.13):9970 is restored.
                  [5] .1.3.6.1.4.1.12345.2.1.5 (OctetString): DStore
                  [6] .1.3.6.1.4.1.12345.2.1.6 (OctetString): null
                  [7] .1.3.6.1.4.1.12345.2.1.7 (OctetString): click.logging.Context
                  [8] .1.3.6.1.4.1.12345.2.60.1 (OctetString): OK
                  [9] .1.3.6.1.4.1.12345.2.60.2 (OctetString): The host abc11(10.11.12.13):9970 is restored.
                  [10] .1.3.6.1.4.1.12345.2.60.3 (OctetString): []


                  если я правильно поняла , нужно создать 200 триггеров ,

                  к примеру для "Specific: 60" :

                  (
                  {TRIGGER.VALUE} = 0 &
                  RealHost:alarmkey.regexp("Specific: 60") = 1 &
                  RealHost:alarmkey.regexp("60.1 (OctetString): Error") = 1
                  ) | (
                  {TRIGGER.VALUE} = 1 &
                  (
                  RealHost:alarmkey.regexp("Specific: 60") = 1 |
                  RealHost:alarmkey.regexp("60.1 (OctetString): OK") = 1
                  )


                  RealHost надо как то заменит на данные из трапа ( [2] - host name ) и как то добавить :[9] - alert text ...

                  я правильно поняла ?

                  Спасибо !

                  Comment

                  • Jimson
                    Senior Member
                    • Jan 2008
                    • 1327

                    #10
                    Не уверен. Алармы это "лампочки", представьте себе панель лампочек, какие то из них горят, какие то нет. И не надо путать лампочку с таблом на котором отображается произвольный текст, второе можно представить как журнал, но не как аларм.
                    Так вот что у вас идентифицирует однозначно лампочку? Мне сложно судить об этом по паре трапов не зная системы и ее специфики. Может быть вот это ".1.3.6.1.4.1.12345.2.60.3 (OctetString): [abc11(10.11.12.13):9970]", тогда в качестве кода аларма надо использовать "[abc11(10.11.12.13):9970]", а в качестве AlarmAction Error/OK, при этом триггер вы назовете "The host abc11(10.11.12.13):9970 is down.".

                    И все таки подумайте внимательно на счет лампочек и журналов, ваши трапы больше смахивают на обычный журнал.

                    Comment

                    • natalia
                      Senior Member
                      • Apr 2013
                      • 159

                      #11
                      Originally posted by Jimson
                      Не уверен. Алармы это "лампочки", представьте себе панель лампочек, какие то из них горят, какие то нет. И не надо путать лампочку с таблом на котором отображается произвольный текст, второе можно представить как журнал, но не как аларм.
                      Так вот что у вас идентифицирует однозначно лампочку? Мне сложно судить об этом по паре трапов не зная системы и ее специфики. Может быть вот это ".1.3.6.1.4.1.12345.2.60.3 (OctetString): [abc11(10.11.12.13):9970]", тогда в качестве кода аларма надо использовать "[abc11(10.11.12.13):9970]", а в качестве AlarmAction Error/OK, при этом триггер вы назовете "The host abc11(10.11.12.13):9970 is down.".

                      И все таки подумайте внимательно на счет лампочек и журналов, ваши трапы больше смахивают на обычный журнал.
                      вы правы, то что мне надо больше похоже на обычный журнал.
                      но каждый из 200 возможных трапов должен быть в dashboard отдельной строкой, т.е. если пришли 5 разных трапов с одного host (abc180) должно быть 5 строк в dashboard ;
                      и еще трапы посылаются всегда на localhost но должны быть в dashboard from host (abc180)

                      например : пришли 2 трапа на localhost на host (abc180)

                      Generic: 6; Specific:60; Enterprise: .1.3.6.1.4.1.12345.2;
                      Variables:

                      [1] .1.3.6.1.4.1.12345.2.1.1 (OctetString): com.cassandra.impl.event.DStoreConnectionErrorEven t
                      [2] .1.3.6.1.4.1.12345.2.1.2 (OctetString): abc180
                      [3] .1.3.6.1.4.1.12345.2.1.3 (OctetString): null.null
                      [4] .1.3.6.1.4.1.12345.2.1.4 (OctetString): The host abc11(10.11.12.13):9970 is down. Unable to connect to cassandra node
                      [5] .1.3.6.1.4.1.12345.2.1.5 (OctetString): DStore
                      [6] .1.3.6.1.4.1.12345.2.1.6 (OctetString): null
                      [7] .1.3.6.1.4.1.12345.2.1.7 (OctetString): click.logging.Context
                      [8] .1.3.6.1.4.1.12345.2.60.1 (OctetString): Error
                      [9] .1.3.6.1.4.1.12345.2.60.2 (OctetString): Unable to connect to cassandra node

                      Generic: 6; Specific:110; Enterprise: .1.3.6.1.4.1.12345.2;
                      Variables:

                      [1] .1.3.6.1.4.1.12345.2.1.1 (OctetString): com.cassandra.impl.event.DStoreConnectionErrorEven t
                      [2] .1.3.6.1.4.1.12345.2.1.2 (OctetString): abc180
                      [3] .1.3.6.1.4.1.12345.2.1.3 (OctetString): null.null
                      [4] .1.3.6.1.4.1.12345.2.1.4 (OctetString): Unable to connect to jboss:11111
                      [5] .1.3.6.1.4.1.12345.2.1.5 (OctetString): DStore
                      [6] .1.3.6.1.4.1.12345.2.1.6 (OctetString): null
                      [7] .1.3.6.1.4.1.12345.2.1.7 (OctetString): click.logging.Context
                      [8] .1.3.6.1.4.1.12345.2.60.1 (OctetString): Error
                      [9] .1.3.6.1.4.1.12345.2.60.2 (OctetString): Unable to connect to jboss:11111
                      [10] .1.3.6.1.4.1.12345.2.60.3 (OctetString):

                      в dashboard должно быть :

                      abc180 Unable to connect to cassandra node
                      abc180 Unable to connect to jboss:11111

                      посоветуйте пож-та как мне лутше все это определить ?

                      спасибо !
                      Last edited by natalia; 24-10-2013, 14:42. Reason: add lines

                      Comment

                      • Jimson
                        Senior Member
                        • Jan 2008
                        • 1327

                        #12
                        Журнал в нынешнем виде вообще невозможно нормально отобразить в zabbix, нет соответсвующего класса для комплексных экранов. На dashboard тем более ничего такого нет, для него есть виджеты родных событий и триггеров, состояния хостов, групп и тп.

                        Вообщем для вменяемой визуализации надо будет дописывать код или реквестить (ZXBNEXT) и ждать. Есть еще некий zbxlog, можно найти тут на форуме, я его не тестил, ничего сказать не могу.

                        На счет "localhost" не совсем понятно, куда посылаются трапы вообще не важно, важно лишь ОТКУДА они посылаются. Впрочем и откуда тоже не очень важно, если вы будете писать сами обработчик трапов и отдавать их в zabbix через trapper API.

                        Вам надо определиться что вы хотите получить в итоге не в фантазиях ("я хочу что бы вон в том углу нарисовалась вот такая штука"), а опираясь на функционал zabbix. Если хотите получить триггеры и zabbix-events, придется придумать как завести огромное кол-во триггеров на каждую возможную ошибку, которая может встретится в ваших траппах. На форуме вам с этим врядли помогут (точнее подсказать то можно, например, можно триггеры создавать через тот же LLD где в качестве правила будет тоже элемент данных типа траппер, в этом случае мы можем на этапе распарсивания траппов не только отсылать строчку лога на нужный хост, но и создать триггер, но опять же, это немаленькая задача для программирования костылей и если вы в состоянии такие костыли писать, то вам уже все понятно и вы ушли писать, а не задаете вопросы на форуме. Без обид).

                        Comment

                        • vvlad
                          Member
                          • Apr 2011
                          • 83

                          #13
                          Хотелось бы уточнить: трапы, которые Вы обрабатывать собираетесь, - это именно алармы, имеющие трап открывающий, и трап закрывающий? Или же просто нотификации о совершении того или иного аварийного события?

                          Comment

                          • natalia
                            Senior Member
                            • Apr 2013
                            • 159

                            #14
                            Originally posted by vvlad
                            Хотелось бы уточнить: трапы, которые Вы обрабатывать собираетесь, - это именно алармы, имеющие трап открывающий, и трап закрывающий? Или же просто нотификации о совершении того или иного аварийного события?
                            Я даже не знаю как ответить ...мне нужно что б zabbix поймал трапы кот. посылаются из java code в случаи разных апликативных проблем и показать их в dashboard. Для каждого такого трапа приходит "OK" когда проблема исчезает.

                            Comment

                            • natalia
                              Senior Member
                              • Apr 2013
                              • 159

                              #15
                              Originally posted by Jimson
                              Журнал в нынешнем виде вообще невозможно нормально отобразить в zabbix, нет соответсвующего класса для комплексных экранов. На dashboard тем более ничего такого нет, для него есть виджеты родных событий и триггеров, состояния хостов, групп и тп.

                              Вообщем для вменяемой визуализации надо будет дописывать код или реквестить (ZXBNEXT) и ждать. Есть еще некий zbxlog, можно найти тут на форуме, я его не тестил, ничего сказать не могу.

                              На счет "localhost" не совсем понятно, куда посылаются трапы вообще не важно, важно лишь ОТКУДА они посылаются. Впрочем и откуда тоже не очень важно, если вы будете писать сами обработчик трапов и отдавать их в zabbix через trapper API.

                              Вам надо определиться что вы хотите получить в итоге не в фантазиях ("я хочу что бы вон в том углу нарисовалась вот такая штука"), а опираясь на функционал zabbix. Если хотите получить триггеры и zabbix-events, придется придумать как завести огромное кол-во триггеров на каждую возможную ошибку, которая может встретится в ваших траппах. На форуме вам с этим врядли помогут (точнее подсказать то можно, например, можно триггеры создавать через тот же LLD где в качестве правила будет тоже элемент данных типа траппер, в этом случае мы можем на этапе распарсивания траппов не только отсылать строчку лога на нужный хост, но и создать триггер, но опять же, это немаленькая задача для программирования костылей и если вы в состоянии такие костыли писать, то вам уже все понятно и вы ушли писать, а не задаете вопросы на форуме. Без обид).
                              Если чесно я совсем запуталась. Мне кажется то что я пытаюсь сделать многие используют и должно быть готовое решение.

                              По док. ( https://www.zabbix.com/documentation...types/snmptrap) конфигурию snmptt , item,trigger для каждого из возможных трапов, почему все так запутано ...я могу написать скрипт,но пока не понимаю что к чему. я навечек в заббех (~1 мес.) и моя задача перевести prodaction monitoring 2000 комр. с " hp openview " на zabbix.в hp openview все намного проще.
                              Можете более конкретно описать решение ?
                              Спасибо !

                              Comment

                              Working...