Ad Widget

Collapse

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

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

    #16
    УРА ! ЕСТЬ РЕШЕНИЕ !

    1. Настоила "3. Bash скрипт и zabbix_sender " - Пост "Настройка Zabbix SNMP traps" (не могу почему то добавить ссылку)
    2. меняю скрипт snmptrap.sh передавать нужные мне параметры в zabbix_sender
    3. copy snmptrap.sh, zabbix_sender на каждый host
    4. Создаю итем для каждого трапа, для моего примера : zabbixTrap [60],zabbixTrap [110] - позже переделаю на discovery
    5. Создаю триггеры : к примеру
    {Template APP SNMP:zabbixTrapKey[60].regexp(Error)}#0
    {Template APP SNMP:zabbixTrapKey[110].regexp(Error)}#0
    6. assign "Template APP SNMP" на каждый host
    7. ТЕСТ - посылаю трапы

    snmptrap -c public -v 1 127.0.0.1 1.3.6.1.4.1.12345.60 '0.0.0.0' 6 3 1 1.3.6.1.4.1.12345.60.1.1 s Error1.3.6.1.4.1.12345.60.1.2 s host1
    snmptrap -c public -v 1 127.0.0.1 1.3.6.1.4.1.12345.110 '0.0.0.0' 6 3 1 1.3.6.1.4.1.12345.110.1.1 s Error1.3.6.1.4.1.12345.110.1.2 s host1

    каждый трап это отдельный алерт в dashboard и ack. когда приходить "ОК" :

    snmptrap -c public -v 1 127.0.0.1 1.3.6.1.4.1.12345.60 '0.0.0.0' 6 3 1 1.3.6.1.4.1.12345.60.1.1 s OK 1.3.6.1.4.1.12345.60.1.2 s host1

    snmptrap -c public -v 1 127.0.0.1 1.3.6.1.4.1.12345.110 '0.0.0.0' 6 3 1 1.3.6.1.4.1.12345.110.1.1 s OK 1.3.6.1.4.1.12345.110.1.2 s host1


    Всё оказывается не так сложно

    ВСЕМ СПАСИБО ЗА ПОМОЩЬ !
    Last edited by natalia; 29-10-2013, 09:26.

    Comment

    • Jimson
      Senior Member
      • Jan 2008
      • 1327

      #17
      Originally posted by natalia
      3. Создаю итем для каждого трапа
      И что является признаком "каждого трапа" в вашем случае?

      Comment

      • natalia
        Senior Member
        • Apr 2013
        • 159

        #18
        Originally posted by Jimson
        И что является признаком "каждого трапа" в вашем случае?
        "Specific" : 1-189
        каждый вид трапов имеет разные Specific

        Comment

        • gdgsoft
          Senior Member
          • Apr 2009
          • 202

          #19
          На пост можно не обращать внимание, т.к. писал его с первой страницы


          Я наверное не совсем въехал в вопрос, но....
          То что я вижу по скриншотам работать не будет никогда.

          1) Элемент создан с типом "Zabbix trapper". С этим для данной реализации я полностью согласен.
          2) Тестовые трапы отправляются с помощью команды snmptrap. С этим я тоже полностью согласен.

          А теперь вопрос, есть ли между этим "прокладка" и как она настроена?
          Дело в том, что "Zabbix trapper" слушает порт 10051 (или 10050).
          Snmptrap отправляет трап в 162 порт?
          Скажите, как это все должно в результате сойтись?

          Если я все правильно понял, то на сервере, который принимает трапы, дожен работать демон snmptrapd, который будет передавать посланный вами трап в описанныей в его конфиге обработчик, а тот в свою очередь будет пихать с помощью zabbix_sender данные в элемент с типом "Zabbix trapper".
          Last edited by gdgsoft; 29-10-2013, 23:06. Reason: Не дочитал до конца.
          Zabbix 2.4.2
          PHP 5.4.5
          Oracle Linux 6.5
          VmWare ESXi 4

          MariaDB 10.0.15
          Oracle Linux 6.5
          Supermicro SYS-6027TRF(64Gb+RAID-10 600Gb SAS15k)

          Comment

          • natalia
            Senior Member
            • Apr 2013
            • 159

            #20
            Originally posted by gdgsoft
            То что я вижу по скриншотам работать не будет никогда.
            скриншоты я уже поменяла

            type: "Zabbix trapper".
            key : zabbixTrapKey[60]
            trigger : {Template APP SNMP:zabbixTrapKey[60].regexp(Error)}#0

            Originally posted by gdgsoft
            А теперь вопрос, есть ли между этим "прокладка" и как она настроена?
            Дело в том, что "Zabbix trapper" слушает порт 10051 (или 10050).
            Snmptrap отправляет трап в 162 порт?
            Скажите, как это все должно в результате сойтись?

            Если я все правильно понял, то на сервере, который принимает трапы, дожен работать демон snmptrapd, который будет передавать посланный вами трап в описанныей в его конфиге обработчик, а тот в свою очередь будет пихать с помощью zabbix_sender данные в элемент с типом "Zabbix trapper".
            вы совершенно правильно сами ответили на вопрос

            на каждом host кот. посылает трап есть snmptrapd,snmptrap.sh,zabbix_sender :

            Настройка snmptrapd : /etc/snmp/snmptrapd.conf
            disableAuthorization yes
            traphandle default ./usr/local/bin/snmptrap.sh
            Настроить скрипт /usr/local/bin/snmptrap.sh
            # CONFIGURATION
            ZABBIX_SERVER="Zabbix server";
            ZABBIX_PORT="10051";
            ZABBIX_SENDER="/usr/local/bin/zabbix_sender";
            # END OF CONFIGURATION

            read hostname
            read ip
            read uptime
            read oid
            read address
            read community
            read enterprise

            oid=`echo $oid|cut -f2 -d' '`
            address=`echo $address|cut -f2 -d' '`
            community=`echo $community|cut -f2 -d' '`
            enterprise=`echo $enterprise|cut -f2 -d' '`

            oid=`echo $oid|cut -f11 -d'.'`
            community=`echo $community|cut -f2 -d'"'`
            str="$hostname $address $community $enterprise $oid"

            #$ZABBIX_SENDER -z "$ZABBIX_SERVER" -p $ZABBIX_PORT -s "$HOST" -k $KEY -o "$str"
            $ZABBIX_SENDER -c /etc/zabbix/zabbix_agentd.conf -k zabbixTrapKey[60] -o "$str"
            значение key:zabbixTrapKey[60] будет браться из трапа (60 это "Specific") - это я еще не наладила

            и значения $hostname $address $community $enterprise $oid нужно исправить, но в вообщем все работает

            спасибо va0816 за пост "Настройка Zabbix SNMP traps" (не могу почему то добавить ссылку)

            Comment

            • vvlad
              Member
              • Apr 2011
              • 83

              #21
              На каждом хосте zabbix_sender и snmptrapd совершенно не обязателен. Достаточно настроить на одном, и этот хост указывать системам, способным отсылать трапы, в качестве хоста-получателя трапов.

              Кстати, в Вашем случае, поскольку на каждую аварию вы имеете трапы как сообщающие о начале аварии, так и о ее завершении, можно обойтись одним элементом данных. как тут выше справедливо отметили. Правда выражение тригеров в таком случае будет несколько "заковырестее".

              Comment

              • natalia
                Senior Member
                • Apr 2013
                • 159

                #22
                Originally posted by vvlad
                На каждом хосте zabbix_sender и snmptrapd совершенно не обязателен. Достаточно настроить на одном, и этот хост указывать системам, способным отсылать трапы, в качестве хоста-получателя трапов.
                в этом и была проблема,я не могу менять посылку трапов ,они посылаются из кода (java) на localhost
                Originally posted by vvlad
                Кстати, в Вашем случае, поскольку на каждую аварию вы имеете трапы как сообщающие о начале аварии, так и о ее завершении, можно обойтись одним элементом данных. как тут выше справедливо отметили. Правда выражение тригеров в таком случае будет несколько "заковырестее".
                не уверена, мне нужно что б каждый трап высвечивался отдельной строкой в дашборде

                Comment

                • vvlad
                  Member
                  • Apr 2011
                  • 83

                  #23
                  В Dashboard висят именно тригеры. И на каждый аларм тригер нужен свой. Но всю эту пачку тригеров можно привязать к одному элементу данных.

                  Comment

                  • natalia
                    Senior Member
                    • Apr 2013
                    • 159

                    #24
                    Originally posted by vvlad
                    В Dashboard висят именно тригеры. И на каждый аларм тригер нужен свой. Но всю эту пачку тригеров можно привязать к одному элементу данных.
                    вы правы :-) спасибо !

                    запуталась с тригерами , помогите что не так :

                    аларм1: .1.3.6.1.4.1.12345.60 & [9]:"ERROR"
                    OK: .1.3.6.1.4.1.12345.60 & [9]:"OK"

                    аларм2: .1.3.6.1.4.1.12345.61 & [9]:"ERROR"
                    OK: .1.3.6.1.4.1.12345.61 & [9]:"OK"


                    Trigger1:

                    ({TRIGGER.VALUE} = 0 &
                    {Template LP SNMP:zabbixTrapKey[2].regexp(\[9\]:"ERROR")}=1 &
                    {Template LP SNMP:zabbixTrapKey[2].regexp(\.1\.3\.6\.1\.4\.1\.12345\.60)}=1)
                    |
                    ({TRIGGER.VALUE} = 1 &
                    {Template LP SNMP:zabbixTrapKey[2].regexp(\[9\]:"OK")}#1 &
                    {Template LP SNMP:zabbixTrapKey[2].regexp(\.1\.3\.6\.1\.4\.1\.12345\.60)}=1)

                    Trigger2: то же самое только вместо 60 будет 61


                    перепробывала кучу вариантов, не работает


                    заранее спасибо !

                    Comment

                    • Jimson
                      Senior Member
                      • Jan 2008
                      • 1327

                      #25
                      Условие триггера это условие при котором триггер будет в состоянии ПРОБЛЕМА, в не зависимости от того в каком он сейчас состоянии. Следовательно:
                      если триггер в состоянии ok И в трапе есть (60) И в трапе есть error => ПРОБЛЕМА
                      с этой частью триггера все должно быть понятно, вторая часть веселее:
                      если триггер в состоянии проблема и (трап "не относится к аларму 60" ИЛИ в трапе есть ok)

                      Т.е. у нас постоянно идут какие то сообщения, но триггер должен реагировать только на "свои", на сообщения относящиеся к аларму по которому он срабатывает, и когда триггер уже находится в состоянии проблема он не должен переключится в состоянии ok при первом же сообщении в котором "не будет .60", соответсвенно условие сложнее и вы должны каким то образом сформулировать условие "трап не относится к аларму 60".

                      Comment

                      • natalia
                        Senior Member
                        • Apr 2013
                        • 159

                        #26
                        Originally posted by Jimson
                        вторая часть веселее:
                        если триггер в состоянии проблема и (трап "не относится к аларму 60" ИЛИ в трапе есть ok)

                        Т.е. у нас постоянно идут какие то сообщения, но триггер должен реагировать только на "свои", на сообщения относящиеся к аларму по которому он срабатывает, и когда триггер уже находится в состоянии проблема он не должен переключится в состоянии ok при первом же сообщении в котором "не будет .60", соответсвенно условие сложнее и вы должны каким то образом сформулировать условие "трап не относится к аларму 60".
                        не очень то представляю как это сделать, буду думать ... :-)
                        но сложные тригеры влияют на performance, не лутше тогда разделить каждый трап на отдельный key ?

                        Comment

                        • Jimson
                          Senior Member
                          • Jan 2008
                          • 1327

                          #27
                          Ну это только вам решать. Со стороны это все выглядит как закат солнца вручную, так что тут посоветовать какое то "правильное" решение врядли возможно.

                          p.s. мне, например, вообще не понятно что это за .1.3.6.1.4.1.12345.60, который вы взяли в качестве идентификатора аларма, в первых ваших сообщениях в этих OID содержалось текстовое описание аларма и его состояние, с чего вы вдруг решили что "60" это идентификатор я не понял

                          pp.s. я там выше ошибся немного, должно быть:
                          если триггер в состоянии проблема и (трап "не относится к аларму 60" ИЛИ в трапе нет ok)
                          читаем так:
                          или это трап по другому аларму ИЛИ (это трап по нашему аларму, но) не "OK"

                          Если трапы "левые" условие выполняется и трап остается ПРОБЛЕМА, как только прийдет "наш" трап и в нем будет OK, условие выполняться перестанет и триггер выключится. Главное понять что условие которое мы составляем это не условие переключение триггера в противоположное состояние, а условие при котором триггер будет в состоянии ПРОБЛЕМА.
                          Last edited by Jimson; 31-10-2013, 10:35.

                          Comment

                          • vvlad
                            Member
                            • Apr 2011
                            • 83

                            #28
                            У меня сработало что-то типа:

                            (({Test Node:Trap.regexp(60.*ERROR)})#0)
                            |
                            (({TRIGGER.VALUE}=1) & ({Test Node:Trap.regexp(60.*OK)}=0))

                            Название хоста и ключа поменять. Дальше в Вашей власти усложнить регулярные выражения настолько, насколько это требуется для однозначной идентификации аларма. У Вас сразу две функции regexp на каждый случай - не стоит, все можно в одном упаковать.

                            Comment

                            • Jimson
                              Senior Member
                              • Jan 2008
                              • 1327

                              #29
                              Originally posted by vvlad
                              (({Test Node:Trap.regexp(60.*ERROR)})#0)
                              |
                              (({TRIGGER.VALUE}=1) & ({Test Node:Trap.regexp(60.*OK)}=0))
                              Те если в Trap приходит строка содержащая "Prived Vasya", то данный триггер у нас отключается (переходит в состояние OK), так задумано?

                              P.S. Перевести триггер в состояние проблема можно и одной проверкой, обратно нельзя, только если для каждого триггера будет отдельный элемент данных (в этом случае проверять "идентификатор аларма" не нужно), вот только в этом случае вся логика "аларм -> триггер" будет в скрипте, а триггер в забиксе можно вообще свести к условию "key = 1".

                              P.P.S. что касается производительности, то строить какие то правила "правильно/неправильно" можно только на основе документации или тестам, не стоит полагать, что "один regexp лучше двух", самый простой пример удаление пробельных символов в начале и конце строки в перловых регекспах s/^\s*(.+?)\s*$/$1/s будет намного медленне чем два последовательных регекспа s/^\s+//s; s/\s+$//s;
                              Last edited by Jimson; 31-10-2013, 11:53.

                              Comment

                              • vvlad
                                Member
                                • Apr 2011
                                • 83

                                #30
                                Это (про переключение тригера при приходе Васи) предположение, или результат натурного эксперимента?

                                Проверено на живой системе. Тригер при "приходе Васи" не переключается. Заведена пачка тригеров на один элемент данных. Каждый из которых реагирует на свою пару OK/ERROR. Или может у меня неправильный Zabbix?...

                                P.S.
                                К слову сказать, эта часть документации к Zabbix, что в русском, что в английском исполнении, весьма противоречива. Пока разберешься, мозг изрядно порвешь...

                                Comment

                                Working...