Опубликовано пользователем JKey

Настройка Zabbix на прием SNMP traps
В целом, как настроить прием SNMP трапов системой мониторинга довольно хорошо описано в вики самого Zabbix:
- Настройка конфигурации: http://www.zabbix.org/wiki/Start_with_SNMP_traps_in_Zabbix
- Настройка шаблонов и как оно вообще работает: https://www.zabbix.com/documentation/2.2/ru/manual/config/items/itemtype...
Открываем, читаем и делаем. Если ничего не понятно или не работает, тогда продолжаем читать здесь )))
Для успешной работы нам потребуются:
- zabbix_trap_receiver.pl
- Настроенный и запущенный демон snmptrapd, который собственно и отвечает за прием данных на 162 порту
- Включить прием snmp трапов в конфигурации самого Zabbix
- Настроить "образцовый" шаблон для диагностики.
- Кроме того, потребуется внимательность и понимание как эти части м/у собой связаны.
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 трапов:
Есть: SNMP trap и Zabbix траппер!! Если бы мы задействовали обработку шеловским скриптом snmptrap.sh, то нам необходимо было бы выбрать Zabbix траппер, но так как мы выбрали режим парсинга логов, значит выбираем SNMP trap.
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, что собралось правильно и запускается., в самом начале должны быть подобные записи:
После чего в процессах должны наблюдать процесс:
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 конечно попал :-)
respect
Опубликовано пользователем Hidden (не проверено)
respect
Собираюсь настраивать.
Опубликовано пользователем Алексей (не проверено)
Собираюсь настраивать.
Лучше почитать про костыли до начала.
Спасибо за статью!
Добавить комментарий