Zabbix 2.4 прием SNMP трапов - как это работает!

Аватар пользователя JKey

Настройка Zabbix на прием SNMP traps

В целом, как настроить прием SNMP трапов системой мониторинга довольно хорошо описано в вики самого Zabbix:

Открываем, читаем и делаем. Если ничего не понятно или не работает, тогда продолжаем читать здесь )))

Для успешной работы нам потребуются: 

  1. zabbix_trap_receiver.pl
  2. Настроенный и запущенный демон snmptrapd, который собственно и отвечает за прием данных на 162 порту
  3. Включить прием snmp трапов в конфигурации самого Zabbix
  4. Настроить "образцовый" шаблон для диагностики.
  5. Кроме того, потребуется внимательность и понимание как эти части м/у собой связаны.

5. Начнем с самого важного - с понимания :)

1. zabbix_trap_receiver.pl / 

Тут все просто, если составили Zabbix из пакетов, то скорее всего этого файла у вас не будет. Поэтому идем на офф сайт и качаем исходники. В папке misc/snmptrap его и обнаружим вместе с еще одним скриптом snmptrap.sh
Далее, кладем в удобную нам папку на постоянное хранение и запускаем данный скрипт. Путь до файла,  в который  будут распарсиваться трапы явно задан в этом скрипте.

2. snmptrapd.conf

После этого идем и добавляем в конфигурационном файле /etc/snmptrapd.conf  запуск данного скрипта. Например, такой конфигурации для первоначального взлета вполне достаточно

disableAuthorization yes
donotlogtraps no
#traphandle default ./etc/zabbix/scripts/snmptrap.sh

# you can set multiple community names:
# authCommunity execute public
# authCommunity execute S7di@kjh8
authCommunity execute public
authCommunity execute XRUK
perl do "/etc/zabbix/scripts/zabbix_trap_receiver.pl";

Можно отключить авторизацию, либо наоборот ее оставить, чтобы скрипт запускался только на необходимые комюнити.

Очень важным моментом является диагностика. Как убедиться, что это барахло завелось? Элементарно, Ватсон! 
Для это нам необходимо запустить демон snmptrapd в режиме отладки с консоли, таким макаром:

snmptrapd -f -L o

После чего пойти и послать тестовый трап, каким-либо образом, хоть также локально с консоли, хоть воспользовавшись  утилитами устройства.

Если все корректно отработало, что мы и увидели в консоли и скрипт запустился корректно. Тогда в файле /tmp/zabbix_traps.tmp мы должны наблюдать подобную картину:

server-zbx-1:/etc/zabbix/scripts # cat /tmp/zabbix_traps.tmp
11:38:41 2015/03/19 ZBXTRAP 192.168.12.24
PDU INFO:
  notificationtype               TRAP
  version                        1
  receivedfrom                   UDP: [192.168.12.24]:162->[192.168.12.22]:162
  errorstatus                    0
  messageid                      0
  community                      public
  transactionid                  5
  errorindex                     0
  requestid                      0
VARBINDS:
  DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (2420202416) 280 days, 2:47:04.16
  SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: SNMPv2-MIB::coldStart

3. Включаем прием трапов в Zabbix-server

В конфиге Zabbix сервера выставляем значения для переменной

StartSNMPTrapper=1

4. Настройка шаблона

А вот на этом этапе нам потребуется внимательность! Т.к. существет 2 разных метрики, которые отвечают за обработку SNMP трапов:

2 вида метрики по сбору SNMP трап в Zabbix

Есть: SNMP trap и  Zabbix траппер!! Если бы мы задействовали обработку шеловским скриптом snmptrap.sh, то нам необходимо было бы выбрать Zabbix траппер, но так как мы выбрали режим парсинга логов, значит выбираем SNMP trap.

snmptrap.falback

Zabbix без наркоза! (или на помощь приходит strace)

Если вы добрались до сюда, значит нихрена у вас не заработало, также как и у меня, несмотря на четкое следование инструкциям  "программы интернет". Ну не работает прием трапов в Zabbix и все тут. И мышку почистил и с бубном потанцевал, а не принимает радиограммы наш славный боец. 

Шли 4е сутки, казалось все безнадежно...
 

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

Итак, согласно схеме, трапы должны аккуратным образом складываться в файл /tmp/zabbix_sntrap.tmp Смотрим и видим, что так оно и есть, трапы стройными рядами друг за другом строчатся в файл. Но вот Zabbix молчит как партизан и в метриках пусто, и в логе тишина, и полковнику никто не пишет...

Итак собрались и подбиваем информацию, что мы знаем об этом пушном зверке ? А знаем мы следующее, что когда запускается Zabbix-server  то он порождает кучу процессов, согласно настройкам, сколько пуллеров, трапперов там запустить и мы также указали, что хотим принимать SNMP траппы выставив опцию: StartSNMPTrapper=1.  Заглянув в лог мы увидим, что он вроде даже как стартует.  Ну что ж, тогда поищем его в процессах:

zabbixs   5487  4160  0 мар19 ?     00:00:02 /usr/sbin/zabbix-server: java poller #100 [got 0 values in 0.000005 sec, idle 5 sec]
zabbixs   5489  4160  0 мар19 ?     00:00:03 /usr/sbin/zabbix-server: snmp trapper [processed data in 0.000007 sec, idle 1 sec]
zabbixs   5490  4160  0 мар19 ?     00:00:01 /usr/sbin/zabbix-server: proxy poller #1 [exchanged data with 0 proxies in 0.000003 sec, idle 5 sec]
zabbixs   5491  4160  0 мар19 ?     00:00:13 /usr/sbin/zabbix-server: self-monitoring [processed data in 0.000103 sec, idle 1 sec]
zabbixs   5492  4160  0 мар19 ?     00:00:05 /usr/sbin/zabbix-server: vmware collector #1 [updated 0, removed 0 VMware services in 0.000002 sec, idle 5 sec]

 Нам повезло, и этот пушной зверек действительно живет в отдельном процессе, как мы и предположили видим, что это snmp trapper с PID 5489. Что ж, давайте к нему подключимся и посмотрим, что у него происходит. В этом деле нам понадобится strace.

server-zbx-1:/var/log/zabbixs # strace -p 5489 -s 80 
Process 5489 attached
restart_syscall(<... resuming interrupted call ...>) = 0
times({tms_utime=165, tms_stime=199, tms_cutime=0, tms_cstime=0}) = 1847193744
semop(1572864, {{5, -1, SEM_UNDO}}, 1)  = 0
semop(1572864, {{5, 1, SEM_UNDO}}, 1)   = 0
open("/tmp/zabbix_traps.tmp", O_RDONLY) = -1 ENOENT (No such file or directory)
times({tms_utime=165, tms_stime=199, tms_cutime=0, tms_cstime=0}) = 1847193744
semop(1572864, {{5, -1, SEM_UNDO}}, 1)  = 0
semop(1572864, {{5, 1, SEM_UNDO}}, 1)   = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [CHLD], SA_RESTORER|SA_RESTART, 0x7f9a98fce0e0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({1, 0}, 0x7fff55b85f50)       = 0
times({tms_utime=165, tms_stime=199, tms_cutime=0, tms_cstime=0}) = 1847193844
semop(1572864, {{5, -1, SEM_UNDO}}, 1)  = 0
semop(1572864, {{5, 1, SEM_UNDO}}, 1)   = 0
open("/tmp/zabbix_traps.tmp", O_RDONLY) = -1 ENOENT (No such file or directory)
times({tms_utime=165, tms_stime=199, tms_cutime=0, tms_cstime=0}) = 1847193844
semop(1572864, {{5, -1, SEM_UNDO}}, 1)  = 0
semop(1572864, {{5, 1, SEM_UNDO}}, 1)   = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [CHLD], SA_RESTORER|SA_RESTART, 0x7f9a98fce0e0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({1, 0}, 0x7fff55b85f50)       = 0

Не верь глазам своим... он орет истошно о том, что нет такого файла /tmp/zabbix_traps.tmp  Какого хрена?   Вот же он лежит на блюдечке:

server-zbx-1:/etc/zabbix/scripts # ls -lh /tmp/zabbix_traps.tmp
-rw-r--r-- 1 root root 7,2K мар 20 15:33 /tmp/zabbix_traps.tmp

Смотрим в /tmp более внимательно... что же мы там видим? а видим мы там дохрена папочек:

drwxrwxrwt 2 root      zabbixs 4,0K дек  8 16:28 systemd-private-hu8SGB
drwxrwxrwt 2 root      zabbixs 4,0K авг  8  2014 systemd-private-ibxFcz
drwxrwxrwt 2 root      zabbixs 4,0K дек  8 18:17 systemd-private-ifj6xM
drwxrwxrwt 2 root      zabbixs 4,0K мар 19 11:35 systemd-private-IGRMwf
drwxrwxrwt 2 root      zabbixs 4,0K окт  7 14:20 systemd-private-irMB1J
drwxrwxrwt 2 root      zabbixs 4,0K дек  8 18:19 systemd-private-iXQBBE
drwxrwxrwt 2 root      zabbixs 4,0K мар 19 11:38 systemd-private-J2ZemS
drwxrwxrwt 2 root      zabbixs 4,0K дек 15 14:08 systemd-private-jha7wQ
drwxrwxrwt 2 root      zabbix  4,0K дек  5 15:51 systemd-private-jiNi6B
drwxrwxrwt 2 root      zabbixs 4,0K мар 19 11:35 systemd-private-Jk0LGf
drwxrwxrwt 2 root      zabbixs 4,0K авг 29  2014 systemd-private-jlarYq
drwxrwxrwt 2 root      zabbixs 4,0K дек  1 09:52 systemd-private-jNST9I
drwxrwxrwt 2 root      zabbix  4,0K дек  5 16:45 systemd-private-jOlIF7

Ха-ха... привет system-d!! Zabbix запущен в изолированном "окружении" и у него свой /tmp  Соответственно, поэтому он действительно не видит файл с трапами, который должен парсить. Срочно выносим файл трапов в другое место. Меняем пути в файлах zabbix_trap_receiver.pl и zabbix-server.conf
Например, кладем его в /var/snmptdtrap
После чего рестартуем оба демона и радуемся жизни! И действиетельно, все работает как в офицальной документации )))
 

Если тебе это помогло, черкани в коменте ;) 

Журналирование - где это и что это ? 

Согласно документации: https://www.zabbix.com/documentation/2.2/ru/manual/config/items/itemtype...

Если совпадений не было найдено ни с одним из соответствующих SNMP интерфейсов, Zabbix по умолчанию журналирует несовпавшие трапы. (Это поведение настраивается в “Журналировать несовпавшие SNMP трапы” в Администрирование → Общие → Другое).

Только не совсем понятно, что это за журналирование и где оно ведется. Оказывается все просто - если на Zabbix приходит трап от устройсва, интерфейс, которого не значится в БД Zabbix, то при наличии этого крыжика заббикс запротоколирует это в своей лог. Но  интерфейс об этом никаким образом не скажет, что вполне логично. Будет это выглядеть примерно так:

 25596:20150320:161444.269 unmatched trap received from [192.168.12.36]: 16:14:43 2015/03/20 PDU INFO:
  notificationtype               TRAP
  version                        0
  receivedfrom                   UDP: [192.168.12.36]:161->[192.168.12.32]:162
  errorstatus                    0
  messageid                      0
  community                      HUS110
  transactionid                  10
  errorindex                     0
  requestid                      0
VARBINDS:
  DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (0) 0:00:00.00
  SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: SNMPv2-MIB::warmStart
  SNMP-COMMUNITY-MIB::snmpTrapAddress.0 type=64 value=IpAddress: 192.168.12.36
  SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 type=4  value=STRING: "HUS110"
  SNMPv2-MIB::snmpTrapEnterprise.0 type=6  value=OID: SNMPv2-SMI::enterprises.116.3.11.1.2
 25596:20150320:161445.271 unmatched trap received from [192.168.12.37]: 16:14:44 2015/03/20 PDU INFO:
  notificationtype               TRAP
  version                        0
  receivedfrom                   UDP: [192.168.12.37]:161->[192.168.12.32]:162
  errorstatus                    0
  messageid                      0
  community                      HUS110
  transactionid                  11
  errorindex                     0
  requestid                      0
VARBINDS:
  DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (0) 0:00:00.00
  SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: SNMPv2-MIB::warmStart
  SNMP-COMMUNITY-MIB::snmpTrapAddress.0 type=64 value=IpAddress: 192.168.12.37
  SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 type=4  value=STRING: "HUS110"
  SNMPv2-MIB::snmpTrapEnterprise.0 type=6  value=OID: SNMPv2-SMI::enterprises.116.3.11.1.2
 24969:20150320:161446.462 SNMP agent item "ifInOctets[eth0]" on host "FW-TTI-1" failed: first network error, wait for 15 seconds
 25110:20150320:161449.532 resuming SNMP agent checks on host "ROU-BGP-MOW-2": connection restored

 

Тэги: 

Раздел сайта: 

7 Комментариев

Аватар пользователя Андрей

Добрый день,

Добрый день,
Хорошая статья, жаль поздно её нашёл.
я вроде всё настроил трапы в файл пишутся, но zabbix файл то ли не видит то ли не читает, то ли просто не работает snmp trapper.
дело было так zabbix собран из исходников (./configure --prefix=/usr/local/zabbix-2.0.6-ssh --enable-server \
--enable-agent --enable-ipv6 --with-mysql --with-net-snmp --with-openipmi --with-ssh2)

в zabbix_server.conf
SNMPTrapperFile=/var/log/zabbix/zabbix_traps.tmp
StartSNMPTrapper=1

при старте в логах нет записи что snmp trapper стартовал, и в процессах так же не видать.

root@zabbix:/usr/local/etc/zabbix2 # ps -aux | grep tra
mysql 1242 2.0 16.5 995680 343248 ?? I 2Mar15 1817:52.90 /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/lo
mysql 1202 0.0 0.0 9808 8 ?? Is 2Mar15 0:00.00 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf --user=m
root 6453 0.0 1.9 46520 38832 ?? Ss 9:44AM 0:00.62 /usr/local/sbin/snmptrapd -p /var/run/snmptrapd.pid
zabbix 18020 0.0 0.3 52092 5364 ?? I 2:22PM 0:00.00 zabbix_server: trapper [waiting for connection] (zabbix_server)
zabbix 18021 0.0 0.3 52092 5364 ?? I 2:22PM 0:00.00 zabbix_server: trapper [waiting for connection] (zabbix_server)
zabbix 18022 0.0 0.3 52092 5364 ?? S 2:22PM 0:00.00 zabbix_server: trapper [waiting for connection] (zabbix_server)
zabbix 18023 0.0 0.3 52092 5364 ?? S 2:22PM 0:00.00 zabbix_server: trapper [waiting for connection] (zabbix_server)
zabbix 18024 0.0 0.3 52092 5364 ?? S 2:22PM 0:00.00 zabbix_server: trapper [waiting for connection] (zabbix_server)
root 18059 0.0 0.1 9636 1452 1 S+ 2:23PM 0:00.00 grep tra

что может быть не так? куда надо копать? подскажите если есть такая возможность :)

Аватар пользователя JKey

Для начала убедится в логе

Для начала убедится в логе Zabbix, что собралось правильно и запускается., в самом начале должны быть подобные записи:
 

 32123:20150319:113822.585 Starting Zabbix Server. Zabbix 2.4.2 (revision 50419).
 32123:20150319:113822.585 ****** Enabled features ******
 32123:20150319:113822.585 SNMP monitoring:           YES
 32123:20150319:113822.585 IPMI monitoring:           YES
 32123:20150319:113822.585 WEB monitoring:            YES
 32123:20150319:113822.585 VMware monitoring:         YES
 32123:20150319:113822.585 Jabber notifications:      YES
 32123:20150319:113822.585 Ez Texting notifications:  YES
 32123:20150319:113822.585 ODBC:                      YES
 32123:20150319:113822.585 SSH2 support:              YES
 32123:20150319:113822.585 IPv6 support:              YES
 32123:20150319:113822.585 ******************************
 32123:20150319:113822.585 using configuration file: /etc/zabbix/zabbix-server.conf

После чего в процессах должны наблюдать процесс:

zabbixs  19355 17813  0 май28 ?     00:00:05 /usr/sbin/zabbix-server: snmp trapper [processed data in 0.000006 sec, idle 1 sec]

Если его нет, то логично что не работает, ибо нету процесса который обрабатывает лог файл, следовательно во время сборки что-то пошло не так.

 

 

Аватар пользователя sant

Все работает.

Все работает.
Спасибо за статью!

Аватар пользователя Sergey

Спасибо. Особенно за то что

Спасибо. Особенно за то что указано что посмотреть, когда не работает.

Аватар пользователя Денис

Спасибо, да с файлов в /tmp

Спасибо, да с файлов в /tmp конечно попал :-)

Аватар пользователя Hidden

respect

respect

Аватар пользователя Алексей

Собираюсь настраивать.

Собираюсь настраивать.
Лучше почитать про костыли до начала.
Спасибо за статью!

Добавить комментарий