Ad Widget

Collapse

SNMP trap и zabbix_trap_receiver.pl

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Connected
    Member
    • Mar 2015
    • 39

    #1

    SNMP trap и zabbix_trap_receiver.pl

    Доброго времени суток .

    Возникла необходимость получать snmp трапы с помощью Zabbix.
    Выполнил настройку согласно :
    Join the friendly and open Zabbix community on our forums and social media platforms.


    Трапы прилетают, но Zabbix видит только unmatched traps.

    Проблема вероятнее всего в формата трапа который получает zabbix:

    В файл /tmp/zabbix_traps.tmp

    Валятся данные в формате:

    Code:
    12:27:12 2015/03/16 ZBXTRAP 10.30.1.228
    PDU INFO:
      errorindex                     0
      version                        1
      errorstatus                    0
      notificationtype               TRAP
      requestid                      102
      community                      pbl
      messageid                      0
      transactionid                  21
      receivedfrom                   UDP: [10.30.1.228]:161->[10.30.1.30]:162
    VARBINDS:
      iso.3.6.1.2.1.1.3.0            type=67 value=Timeticks: (362363896) 41 days, 22:33:58.96
      iso.3.6.1.6.3.1.1.4.1.0        type=6  value=OID: iso.3.6.1.6.3.1.1.5.3
      iso.3.6.1.2.1.2.2.1.1.23       type=2  value=INTEGER: 23
      iso.3.6.1.2.1.2.2.1.7.23       type=2  value=INTEGER: 1
      iso.3.6.1.2.1.2.2.1.8.23       type=2  value=INTEGER: 2
    А должны выглядеть в формате (из мануала):

    Code:
    18:58:38 2014/02/26 ZBXTRAP 127.0.0.1
     PDU INFO:
     notificationtype               TRAP
     version                        0
     receivedfrom                   UDP: [127.0.0.1]:40780->[127.0.0.1]
     errorstatus                    0
     messageid                      0
     community                      public
     transactionid                  7
     errorindex                     0
     requestid                      0
     VARBINDS:
     DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (55) 0:00:00.55
     SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: IF-MIB::linkUp.0.33
     IF-MIB::linkUp type=4  value=STRING: "eth0"  SNMP-COMMUNITY
     MIB::snmpTrapCommunity.0 type=4  value=STRING: "public"
     SNMPv2-MIB::snmpTrapEnterprise.0 type=6  value=OID: IF-MIB::linkUp

    Подскажите куда копать?

    При этом если выполнить :
    Code:
    snmptranslate iso.3.6.1.6.3.1.1.5.4
    Bad operator (INTEGER): At line 73 in /usr/share/mibs/ietf/SNMPv2-PDU
    Unlinked OID in IPATM-IPMC-MIB: marsMIB ::= { mib-2 57 }
    Undefined identifier: mib-2 near line 18 of /usr/share/mibs/ietf/IPATM-IPMC-MIB
    Expected "::=" (RFC5644): At line 493 in /usr/share/mibs/iana/IANA-IPPM-METRICS-REGISTRY-MIB
    Expected "{" (EOF): At line 651 in /usr/share/mibs/iana/IANA-IPPM-METRICS-REGISTRY-MIB
    Bad object identifier: At line 651 in /usr/share/mibs/iana/IANA-IPPM-METRICS-REGISTRY-MIB
    Bad parse of OBJECT-IDENTITY: At line 651 in /usr/share/mibs/iana/IANA-IPPM-METRICS-REGISTRY-MIB
    IF-MIB::linkUp
    То тут строка IF-MIB::linkUp присутствует.

    Что я мог пропустить?

    OS Ubuntu 14.04 Zabbix 2.4.4
    Last edited by Connected; 18-03-2015, 12:40.
  • Stak
    Junior Member
    • Mar 2015
    • 10

    #2
    В /etc/default/snmpd
    замените
    TRAPDOPTS='-On -Ln -p /var/run/snmptrapd.pid'
    на
    TRAPDOPTS='-Ln -p /var/run/snmptrapd.pid'

    туда же можно добавить специфичные мибы,
    напhимер, у меня так:
    TRAPDOPTS='-Ln -M +/usr/share/mibs/cisco -p /var/run/snmptrapd.pid'
    без добавления пути к специфик мибам - использует только iana/ietf.

    Comment

    • Grynder
      Junior Member
      • Mar 2015
      • 1

      #3
      Закоменть export MIBS= в файле /etc/default/snmpd

      Comment

      • Connected
        Member
        • Mar 2015
        • 39

        #4
        Originally posted by grynder
        Закоменть export mibs= в файле /etc/default/snmpd
        Помогло, Спасибо!

        Comment

        • Connected
          Member
          • Mar 2015
          • 39

          #5
          Рано обрадовался .

          Трапы в файле /tmp/zabbix_traps.tmp теперь выглядят как в примере:
          Code:
          16:14:48 2015/03/17 ZBXTRAP 10.30.1.228
          PDU INFO:
            transactionid                  4
            messageid                      0
            community                      pbl
            receivedfrom                   UDP: [10.30.1.228]:161->[10.30.1.30]:162
            errorindex                     0
            version                        1
            errorstatus                    0
            notificationtype               TRAP
            requestid                      168
          VARBINDS:
            DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (372369567) 43 days, 2:21:35.67
            SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: IF-MIB::linkDown
            IF-MIB::ifIndex.24             type=2  value=INTEGER: 24
            IF-MIB::ifAdminStatus.24       type=2  value=INTEGER: 1
            IF-MIB::ifOperStatus.24        type=2  value=INTEGER: 2
          
          16:14:57 2015/03/17 ZBXTRAP 10.30.1.228
          PDU INFO:
            transactionid                  5
            community                      pbl
            messageid                      0
            errorindex                     0
            receivedfrom                   UDP: [10.30.1.228]:161->[10.30.1.30]:162
            errorstatus                    0
            version                        1
            notificationtype               TRAP
            requestid                      169
          VARBINDS:
            DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (372370523) 43 days, 2:21:45.23
            SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: IF-MIB::linkUp
            IF-MIB::ifIndex.24             type=2  value=INTEGER: 24
            IF-MIB::ifAdminStatus.24       type=2  value=INTEGER: 1
            IF-MIB::ifOperStatus.24        type=2  value=INTEGER: 1
          Но при этом в Zabbix'е вижу только unmatched trap recieved.


          Originally posted by Stak
          В /etc/default/snmpd
          замените
          TRAPDOPTS='-On -Ln -p /var/run/snmptrapd.pid'
          на
          TRAPDOPTS='-Ln -p /var/run/snmptrapd.pid'

          туда же можно добавить специфичные мибы,
          напhимер, у меня так:
          TRAPDOPTS='-Ln -M +/usr/share/mibs/cisco -p /var/run/snmptrapd.pid'
          без добавления пути к специфик мибам - использует только iana/ietf.
          Изменил в файле /etc/default/snmpd
          Code:
          TRAPDOPTS='-Ln -p /var/run/snmptrapd.pid'

          Положительного результата нет , только unmatched
          Last edited by Connected; 18-03-2015, 12:41.

          Comment

          • Stak
            Junior Member
            • Mar 2015
            • 10

            #6
            В файл (и далее, в сам заббикс) у вас теперь оттранслированные значения передаются. А что бы они матчились, надо для этого элементы данных создать, хотя бы snmptrap.fallback, и более специфические.
            А к этим элементам данных, можно прикрутить триггер.

            Я их добавлял в шаблоны LLD.

            Элементы данных:
            SNMP-trap-CISCO-MIB
            snmptrap["CISCO.*MIB"]

            SNMP fallback traps
            snmptrap.fallback

            Пример триггера:
            IP SLA violated on {HOST.NAME}

            {SNMP Cisco CPU and Memory with Traps:snmptrap["CISCO.*MIB"].regexp(IPSLATHRESHOLD)}&{SNMP Cisco CPU and Memory with Traps:snmptrap["CISCO.*MIB"].regexp(Threshold Occurred|exceeded)}&{SNMP Cisco CPU and Memory with Traps:snmptrap["CISCO.*MIB"].nodata(5m)}=0

            P.S: шаблоны с трапами, если надо, есть тут: http://forum.nag.ru/forum/index.php?showtopic=101157
            Last edited by Stak; 17-03-2015, 16:20. Reason: update

            Comment

            • Connected
              Member
              • Mar 2015
              • 39

              #7
              Originally posted by Stak
              Спасибо за ответ и ссылку на форум.
              Но, на самом деле в dashboard zabbix у меня прилетают сообщения Unmatched trap recieved.

              Проблема заключается в том , что Zabbix не мачит трапы для которых настроены item на lld.

              Ситуация на текущий момент:

              Zabbix получает трапы , но "не правильно их определяет" поэтому сбрасывает их в unmatched trap:


              При этом lld настроено следующим образом(в соответствии с мануалом):


              Тригер lld настроен так(в соответствии с мануалом):
              Code:
              [B]Name[/B] Interface {#SNMPVALUE} on {HOST.NAME} is down
              [B]Expression[/B] {Template SNMP Interfaces:snmptrap["(IF-MIB::linkDown|IF-MIB::linkUp)((.|[[:space:]])*)({#SNMPVALUE})"].str(linkDown)}=1
              Вот как это выглядит на устройстве:
              Code:
              snmptrap["(IF-MIB::linkDown|IF-MIB::linkUp)((.|[[:space:]])*)(D-Link DGS-3620-28SC R2.61.B00 Port 16 on Unit 1)"]
              Соответственно триггер на устройстве выглядит следующим образом:

              Code:
              {ek-rt-Sev2a-01:snmptrap["(IF-MIB::linkDown|IF-MIB::linkUp)((.|[[:space:]])*)(D-Link DGS-3620-28SC R2.61.B00 Port 1 on Unit 1)"].str(linkDown)}=1
              Когда порт падает прилетает только unmatched trap.
              Last edited by Connected; 11-08-2015, 06:31.

              Comment

              • Stak
                Junior Member
                • Mar 2015
                • 10

                #8
                Подозреваю, что ни одна из строк в ваших трапах не подпадает под регулярное выражение ["(IF-MIB::linkDown|IF-MIB::linkUp)((.|[[:space:]])*)({#SNMPVALUE})"], которое вы используете.

                А мануал похоже написан под случай использования SNMPTT, после работы которого результат приходит в виде одной строки.

                Comment

                • Connected
                  Member
                  • Mar 2015
                  • 39

                  #9
                  Originally posted by stak
                  Подозреваю, что ни одна из строк в ваших трапах не подпадает под регулярное выражение ["(if-mib::linkdown|if-mib::linkup)((.|[[:space:]])*)({#snmpvalue})"], которое вы используете.

                  А мануал похоже написан под случай использования snmptt, после работы которого результат приходит в виде одной строки.
                  К сожалению в мануале описывается работа именно со скриптом.

                  Буду пробовать snmptt.

                  Comment

                  • Stak
                    Junior Member
                    • Mar 2015
                    • 10

                    #10
                    Originally posted by Connected
                    К сожалению в мануале описывается работа именно со скриптом.

                    Буду пробовать snmptt.
                    Не обязательно, просто упростите регулярное выражение.
                    к примеру, для элемента данных - можно просто матчить IFMIB, а для триггера - искать Linkdow|linkup.

                    Comment

                    • Stak
                      Junior Member
                      • Mar 2015
                      • 10

                      #11
                      попробовал у себя создать элемент данных вида:

                      SNMP IF-MIB link traps
                      snmptrap["(IF-MIB::linkDown|IF-MIB::linkUp)"]

                      Трапы матчатся:

                      18.Мар.2015 10:34:35 18.Мар.2015 10:34:35 10:34:35 2015/03/18 VARBINDS: DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (332899091) 38 days, 12:43:10.91 SNMPv2-MIB::snmpTrapOID.0 type=6 value=OID: IF-MIB::linkDown IF-MIB::ifIndex.29 type=2 value=INTEGER: 29 IF-MIB::ifDescr.29 type=4 value=STRING: "Serial0/0/0:8" IF-MIB::ifType.29 type=2 value=INTEGER: 22 CISCO-SMI::local.2.1.1.20.29 type=4 value=STRING: "down"

                      18.Мар.2015 10:34:17 18.Мар.2015 10:34:17 10:34:17 2015/03/18 VARBINDS: DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (332897300) 38 days, 12:42:53.00 SNMPv2-MIB::snmpTrapOID.0 type=6 value=OID: IF-MIB::linkUp IF-MIB::ifIndex.29 type=2 value=INTEGER: 29 IF-MIB::ifDescr.29 type=4 value=STRING: "Serial0/0/0:8" IF-MIB::ifType.29 type=2 value=INTEGER: 22 CISCO-SMI::local.2.1.1.20.29 type=4 value=STRING: "up"

                      Comment

                      • Stak
                        Junior Member
                        • Mar 2015
                        • 10

                        #12
                        Сделал к этому элементу данных триггер:

                        IF-MIB:Interface up|down on {HOST.NAME} {SNMP Interfaces with Traps:snmptrap["(IF-MIB::linkDown|IF-MIB::linkUp)"].str(linkDown|linkUp)}=0

                        Всё работает, алармы взводятся.

                        Comment

                        • Connected
                          Member
                          • Mar 2015
                          • 39

                          #13
                          Спасибо !

                          Алармы появились.
                          Почти все хорошо , но есть проблема, о ней ниже.

                          Сейчас я имею следующую картину:
                          Настроил item на хост по рекомендации Stak :

                          Code:
                          name: Link status trap
                          Key: snmptrap["(IF-MIB::linkDown|IF-MIB::linkUp)"]
                          Настроил триггер :
                          Code:
                          name:PORT DOWN
                          Expression: {ek-rt-Sev2a-01:snmptrap["(IF-MIB::linkDown|IF-MIB::linkUp)"].str(linkDown|linkUp)}=0
                          При такой конфигурации авария не чистится если порт уже в состоянии UP.

                          Изменил триггер:
                          Code:
                          name:PORT DOWN
                          Expression: {ek-rt-Sev2a-01:snmptrap["(IF-MIB::linkDown|IF-MIB::linkUp)"].str(linkDown)}=0
                          Но такая конфигурация не жизнеспособна так как если падаю 2 порта одновременно прилетает 2 трапа - авария генерируется одна. При поднятии одного из портов - авария уходит (второй порт все ещё в состоянии down).

                          Есть ли возможность привязать трапы к интерфейсам?


                          Вывод Latest Data по Link status trap в интерфейсе Zabbix

                          Code:
                          13:50:34 2015/03/18 PDU INFO:
                            receivedfrom                   UDP: [10.30.1.228]:161->[10.30.1.30]:162
                            requestid                      203
                            errorindex                     0
                            version                        1
                            errorstatus                    0
                            community                      pbl
                            transactionid                  25
                            messageid                      0
                            notificationtype               TRAP
                          VARBINDS:
                            DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (380144238) 43 days, 23:57:22.38
                            SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: IF-MIB::linkUp
                            IF-MIB::ifIndex.24             type=2  value=INTEGER: 24
                            IF-MIB::ifAdminStatus.24       type=2  value=INTEGER: 1
                            IF-MIB::ifOperStatus.24        type=2  value=INTEGER: 1
                          Last edited by Connected; 18-03-2015, 12:40. Reason: Добавлен вывод snmptrap

                          Comment

                          • Stak
                            Junior Member
                            • Mar 2015
                            • 10

                            #14
                            Да, то что я написал - для интерфейсных трапов мало подходит, у меня так события на изменения конфига и подобные глобальные вещи обрабатываются.
                            А вариант из мануала, с прототипами триггеров и элементов данных "трап" в ЛЛД для конкретных портов только что проверил, всё по инструкции и работает. У вас не работало потому, что дискавери шёл не по ключу ifDescr, скорее всего.

                            Comment

                            • Connected
                              Member
                              • Mar 2015
                              • 39

                              #15
                              Originally posted by Stak
                              Да, то что я написал - для интерфейсных трапов мало подходит, у меня так события на изменения конфига и подобные глобальные вещи обрабатываются.
                              А вариант из мануала, с прототипами триггеров и элементов данных "трап" в ЛЛД для конкретных портов только что проверил, всё по инструкции и работает. У вас не работало потому, что дискавери шёл не по ключу ifDescr, скорее всего.
                              На самом деле дискавери как раз идет по ifDescr .
                              Но внимательно прочитав пример трапа в примере обнаружил разницу :

                              Вот так выглядит строка из трапа если выполнить snmptrap -v 1 -c pb 127.0.0.1 '.1.3.6.1.6.3.1.1.5.4' '0.0.0.0' 6 33 '55' .1.3.6.1.6.3.1.1.5.4 s "eth0"
                              в примере:
                              Code:
                               [B]Строка из трапа:[/B]
                              SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: IF-MIB::linkUp.0.33
                              [B]TCPDUMP[/B]
                              14:43:20.602709 IP 127.0.0.1.43255 > 127.0.0.1.162:  C=pb Trap(47)  .1.3.6.1.6.3.1.1.5.4 0.0.0.0 enterpriseSpecific s=33 55 .1.3.6.1.6.3.1.1.5.4="eth0"
                              Так выглядит строка при получении трапа от устройства Dlink DGS3620:
                              Code:
                               [B]Строка из трапа:[/B]
                              SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: IF-MIB::linkDown
                              [B]TCPDUMP[/B]
                              14:44:46.376895 IP 10.30.1.228.161 > 10.30.1.30.162:  C=pb V2Trap(108)  .1.3.6.1.2.1.1.3.0=380469467 .1.3.6.1.6.3.1.1.4.1.0=.1.3.6.1.6.3.1.1.5.3 .1.3.6.1.2.1.2.2.1.1.24=24 .1.3.6.1.2.1.2.2.1.7.24=2 .1.3.6.1.2.1.2.2.1.8.24=2
                              Вот тут и скрылась печаль.
                              Last edited by Connected; 18-03-2015, 12:00.

                              Comment

                              Working...