PDA

View Full Version : Обработка Snmp-трапов.


gdgsoft
23-04-2009, 23:32
Помогите настроить обработку SNMP трапов в забиксе.
Что сейчас есть:
- хост SNMP_Default
- темплейт Template_Trapper
- в темплейте есть один Item с названием snmptraps
Сделано по описанию: http://www.zabbix.org/forum/showthread.php?t=8924
Трапы приходят и их видно в забиксе в Monitoring -> Last data, но как и что с ними дальше делать не могу допетрить. Натолкните на истинный путь :)
А еще лучше дайте хороший пример :)
Уже месяца 4 пытаюсь разобраться, когда есть время, как от стенки горох :(
Нужно принимать состояние упсов и контролировать аварии типа: статсус упса, температура, разряд батареи, оставшееся время работы и т.д.
Помогите кто чем может.

dotneft
24-04-2009, 05:16
хых...а что ты с ними хочешь дальше делать?:)

gdgsoft
24-04-2009, 09:22
Хотелось бы их как то парсить и в зависимости от OID-ов, которые внутри, выводить информацию что то вроде: UPS1 работает от батарей, Высокий разряд батарей UPS1 и т.д.
Но что то мне подсказывает, что это сделать нельзя. Меня интересует представление аварий как на обычных системах мониторинга. Не знаю как объснить, если кто видел, то на примере: Radiocommander (Siemens), OMC-R (Alcatel), Netcool (не считаю за систему мониторинга :) )
Хорошее сравнение T-MIP от HP или софт от TTI Communication. Имеется ввиду отображение алармов: аларм появился, пришел трап и высвитался информация на экране. Аларм отклирился, пришел трап, в забиксе аларм тоже ушел.
Подобное возможно в Забиксе?

Hober
24-04-2009, 11:46
Хотелось бы их как то парсить и в зависимости от OID-ов, которые внутри, выводить информацию что то вроде: UPS1 работает от батарей, Высокий разряд батарей UPS1 и т.д.
Но что то мне подсказывает, что это сделать нельзя. Меня интересует представление аварий как на обычных системах мониторинга. Не знаю как объснить, если кто видел, то на примере: Radiocommander (Siemens), OMC-R (Alcatel), Netcool (не считаю за систему мониторинга :) )
Хорошее сравнение T-MIP от HP или софт от TTI Communication. Имеется ввиду отображение алармов: аларм появился, пришел трап и высвитался информация на экране. Аларм отклирился, пришел трап, в забиксе аларм тоже ушел.
Подобное возможно в Забиксе?

Не совсем понятно.
У меня UPS опрашиваются по SNMP:
Например режим работы UPS:
1.3.6.1.2.1.33.1.4.1.0
Получаю значение:
Либо 3, либо 4 либо 5
Делаю тригер "если значение стало 4 - сработать"


Делаю условие: если сработал тригер - высылается аларм, с текстом, что UPS переключился в режим работы от батареии
и т.д.

Тоже самое с временем работы от батареии.
Получаю минуты. Делаю тригер - сработать если время меньше 15 минут, далее отослать аларм

gdgsoft
24-04-2009, 12:01
Не совсем понятно.
У меня UPS опрашиваются по SNMP:
Например режим работы UPS:
1.3.6.1.2.1.33.1.4.1.0
Получаю значение:
Либо 3, либо 4 либо 5
Делаю тригер "если значение стало 4 - сработать"


Делаю условие: если сработал тригер - высылается аларм, с текстом, что UPS переключился в режим работы от батареии
и т.д.

Тоже самое с временем работы от батареии.
Получаю минуты. Делаю тригер - сработать если время меньше 15 минут, далее отослать аларм

Спасибо, но в данном случае система, где стоит Забикс, выступает в активной роли, она сама опрашивает UPS и т.д.
Если использовать систему в пассивной роли, по отношению к оборудованию и тем самым ловить трапы, то это позволит разгурузить как сеть(езернет), так и сам сервер, на котором стоит Забикс (у меня на нем еще куча всего).
Дело в том, что у меня есть энное количество UPS и другого оборудования, которое стоит в разных городах, каналы к которому не всегда хорошие :(
Да и правильнее, на мой взгляд, ловить трапы от оборудования, чем с какой то периодичностью пулять запросы с сервера по всей сети.

Вот и вопрос: оборудование трапы шлет, они попадают в Забикс (как я писал выше), их можно увидеть в Monitoring -> Last data, но как их от туда достать и обработать OID-ы, которые там присутствуют и сделать уже по результатам обработки вывод информации как это делаете Вы?

gdgsoft
24-04-2009, 12:15
Вот типовая информация, которая появляется у меня в Забиксе после обработки трапа от одного UPS:

snmptraphandler for Zabbix (Tue Mar 31 00:02:14 2009)
[Tue Mar 31 00:02:14 2009] zabbix_host= SNMP_Default
[Tue Mar 31 00:02:14 2009] OID: .1.3.6.1.2.1.1.3.0
[Tue Mar 31 00:02:14 2009] OID: .1.3.6.1.6.3.1.1.4.1.0
[Tue Mar 31 00:02:14 2009] OID: .1.3.6.1.2.1.33.1.6.2.1.1.73
[Tue Mar 31 00:02:14 2009] OID: .1.3.6.1.2.1.33.1.6.2.1.2.73
[Tue Mar 31 00:02:14 2009] OID: .1.3.6.1.6.3.18.1.3.0
[Tue Mar 31 00:02:14 2009] OID: .1.3.6.1.6.3.18.1.4.0
[Tue Mar 31 00:02:14 2009] str= .1.3.6.1.2.1.1.3.0: 28:6:17:07.15
.1.3.6.1.6.3.1.1.4.1.0: .1.3.6.1.2.1.33.2.0.3
.1.3.6.1.2.1.33.1.6.2.1.1.73: 73
.1.3.6.1.2.1.33.1.6.2.1.2.73: .1.3.6.1.2.1.33.1.6.3.6
.1.3.6.1.6.3.18.1.3.0: 10.10.10.10
.1.3.6.1.6.3.18.1.4.0: \"public\"


Эту часть дописывает скрипт в лог:

[Tue Mar 31 00:02:14 2009] command= /usr/local/sbin/zabbix_sender --zabbix-server localhost --port 10051
[Tue Mar 31 00:02:14 2009] ERROR: Failed to send item (10.10.10.10, 10.10.10.10) .1.3.6.1.2.1.1.3.0: 28:6:17:07.15
.1.3.6.1.6.3.1.1.4.1.0: .1.3.6.1.2.1.33.2.0.3
.1.3.6.1.2.1.33.1.6.2.1.1.73: 73
.1.3.6.1.2.1.33.1.6.2.1.2.73: .1.3.6.1.2.1.33.1.6.3.6
.1.3.6.1.6.3.18.1.3.0: 10.10.10.10
.1.3.6.1.6.3.18.1.4.0: \"public\"
using command /usr/local/sbin/zabbix_sender --zabbix-server localhost --port 10051 --host SNMP_Default --key snmptraps --value "(10.10.10.10, 10.10.10.10) .1.3.6.1.2.1.1.3.0: 28:6:17:07.15
.1.3.6.1.6.3.1.1.4.1.0: .1.3.6.1.2.1.33.2.0.3
.1.3.6.1.2.1.33.1.6.2.1.1.73: 73
.1.3.6.1.2.1.33.1.6.2.1.2.73: .1.3.6.1.2.1.33.1.6.3.6
.1.3.6.1.6.3.18.1.3.0: 10.10.10.10
.1.3.6.1.6.3.18.1.4.0: \"public\"
"
[Tue Mar 31 00:02:14 2009] Exiting ...

Вроде так. Сейчас нет живых трапов в Заббиксе, т.к. полностью переставлялся. Но первая часть, это вроде то, что появляется в Заббиксе, когда смотришь в меню Monitoring->Last data.
Вопрос в том, как обработать первую часть Заббиксом и показать алармы, что произошло то-то и то-то. Если конечно это возможно в принципе.

Nikolaicheg
24-04-2009, 14:47
насколько я знаю, можно создать триггер, котороый будет срабатывать при наличии определенного текста в item'е. согласно этому можно генерировать разные алерты. Гдето на англоязычном форуме видел описание создания триггеров, обрабатывающих текстовые значения.

dotneft
24-04-2009, 15:42
можно использовать триггер регулярных выражений (regexp, iregexp) или str

Nikolaicheg
24-04-2009, 16:40
я и говорил об этих триггерах :)

gdgsoft
24-04-2009, 23:53
Спасибо за советы. Впринципе, через str() OIDы находятся. Пока поэксперементировал с одним, а не с группой. Пока не знаю как :(
Вопрос возник в другом. В скрипте snmptrap.pl (snmptrap.sh) в соответствии с примером, в качестве имени хоста указан SNMP_Default (в нем указан IP:0.0.0.0), соответственно все трапы принимает именно он. При этом в мониторинге показывается срабатывание данного триггера и генерация события.
Я создаю свой хост UPS_ZabbixServer и указываю в нем IP самого сервера, ну что бы сэмитировать посылку трапа с упса. Даю команду:
snmptrap -c operator -v 2c 10.10.10.10 "" .1.3.6.1.2.1.33.2.0.1
При этом, если смотреть в Monitoring->Triggers, то вижу что триггер срабатывает, но при этом имеет статус Unknown и, как следствие в событиях у меня ничего не появляется.
Как только переименовал хост UPS_ZabbixServer в SNMP_Default, но при этом IP оставил 10.10.10.10, я получил нормальное срабатывание триггера и появление события. Т.е., так как в скрипте snmptrap.pl в качестве хоста прописано SNMP_Default, то все события идут на него и только в таком случае может происходить нормальная обработка трапов.
Вопрос: как можно организовать разделение по хостам, что бы не все трапы обрабатывал SNMP_Default, и соответственно при генерации события высвечивалось имя хоста с которого пришел трап, а не SNMP_Default для всех хостов.
В инете встречал решение данной проблемы. В ней проводилась модификация скрипта и по моему самой БД.
Можно реализовать подобную вещь средствами самого Заббикса?

Или для реализации подомной вещи лучше просто разбирать лог, который пишет скрипт и от туда выбирать и айпишник хоста, оиды и их значения и т.д.?

Nikolaicheg
27-04-2009, 11:58
я вручную модифицировал скрипт snmptrap.pl, чтобы он лез в базу, искал по IP имя хоста, а потом отсылал трап через zabbix_sender серверу по имени хоста. Создал шаблон, в шаблоне 1 итем - zabbix trap. привязал шаблон к необходимым хостам. Теперь у каждого хоста есть заббикс траппер итем, в нем и отображаются трапы. И уже после этого можно делать триггеры на конкретный хост.

gdgsoft
27-04-2009, 12:10
Не составит труда поделиться скриптиком?
В принципе, я так понимаю здесь:
http://pierky.wordpress.com/2009/01/30/zabbix-snmp-traps-mapped-to-the-right-host/
есть эти модификации для шела. Я использую перловский скрипт с этого форума (другая ветка).
Но т.к. я уже лет 10 ничего не писал, а с перлом, равно как и с php вообще не разбирался, боюсь для меня сейчас сделать это самому будет сложно :(
Да и мозг приобрел вид закостенелого отростка :)
Возможно, кому то в будущем тоже поможет.
Спасибо.

Nikolaicheg
27-04-2009, 13:20
я тут уже выкладывал скриптец на форуме :)
http://www.zabbix.com/forum/showthread.php?t=11812

gdgsoft
23-09-2009, 09:56
Решил вернуться к вопросу обработки трапов. А то немного отвлекся :)

Вопрос вот в чем.
Ниже приведены две группы трапов:
1) Посылка об аварии
.1.3.6.1.2.1.1.3.0: 9:18:26:38.39
.1.3.6.1.6.3.1.1.4.1.0: .1.3.6.1.2.1.33.2.0.3
.1.3.6.1.2.1.33.1.6.2.1.1.59: 59
.1.3.6.1.2.1.33.1.6.2.1.2.59: .1.3.6.1.2.1.33.1.6.3.10
.1.3.6.1.6.3.1.1.4.3.0: .1.3.6.1.2.1.33.2
2) Посылка о еще очистке
.1.3.6.1.2.1.1.3.0: 9:18:26:45.92
.1.3.6.1.6.3.1.1.4.1.0: .1.3.6.1.2.1.33.2.0.4
.1.3.6.1.2.1.33.1.6.2.1.1.59: 59
.1.3.6.1.2.1.33.1.6.2.1.2.59: .1.3.6.1.2.1.33.1.6.3.10
.1.3.6.1.6.3.1.1.4.3.0: .1.3.6.1.2.1.33.2

Соответственно в OID-е .1.3.6.1.6.3.1.1.4.1.0 приходит 1.3.6.1.2.1.33.2.0.3 или 1.3.6.1.2.1.33.2.0.4

Я немного переделал скрипт таким образом, что трап(все оиды в блоке) приходили не целиком, а каждый отдельно, что бы всю эту кучу можно было разруливать на основе Итемов. Может я и не прав :) Сейчас, ко мне приходят все строки отдельно и я могу, как мне кажется обходится более простыми тригерами и т.д.

Но! Возникло ряд проблем, по крайней мере для меня.
Дело в том, что когда приходят Оиды из первой группы, то триггера взводятся нормально (почти нормально), а вот гасятся они криво. Когда приходит Оид 1.3.6.1.6.3.1.1.4.1.0 со значением 1.3.6.1.2.1.33.2.0.4, то соответственно он и сбрасывается, а вот триггера для оидов:
.1.3.6.1.2.1.33.1.6.2.1.1.59: 59
.1.3.6.1.2.1.33.1.6.2.1.2.59: .1.3.6.1.2.1.33.1.6.3.10
и т.д.
остаются взведенными.
Подскажите, как все это счастье полность гасить?

Так же есть проблема с Оидами вот в этом месте:
.1.3.6.1.2.1.33.1.6.2.1.1.59: 59
.1.3.6.1.2.1.33.1.6.2.1.2.59: .1.3.6.1.2.1.33.1.6.3.10

Дело в том, что 59, в данном примере, это индекс.
У меня же в темплейтах описаны "нормальные" Оиды:
.1.3.6.1.2.1.33.1.6.2.1.1
.1.3.6.1.2.1.33.1.6.2.1.2
и т.д.
Соответственно, триггеры с данными Оидами теряются. Читал про обработку динамических индексов на стр.182. Создал такой вот Итем:
.1.3.6.1.2.1.33.1.6.3["index",".1.3.6.1.2.1.33.1.6.2.1.2",".1.3.6.1.2.1.33.1.6.3"]
но ничего не вышло :(

Подскажите кто чем может
1) как гасить все триггера в случае прихода одного конкретного
2) как создать итем и работать с ним в случае если он с динамическим индексом.

А еще лучше, помогите сделать ЭТО! :)

evgeny elkin
23-09-2009, 14:11
Добрый день! Настроил обработку трапов с помощью скрипта на перле -
http://www.zabbix.com/forum/showpost.php?p=43157&postcount=27, все работает, но есть проблема..

Проблема вот в чем: в Заббиксе (Latest Data) отображается только 3 или 4 первых строки трапа, например:

(192.168.4.10, 192.168.4.10) DISMAN-EVENT-MIB::sysUpTimeInstance: 0:0:00:00.00
SNMPv2-MIB::snmpTrapOID.0: SNMPv2-SMI::enterprises.1123.4.300.0.1
SNMPv2-SMI::enterprises.1123.4.300.1.1.1: 127.0.0.1
SNMPv2-SMI::enterprises.1123.4.300.1.1.2: \\\\Out-of-Band

и всё..
Хотя в snmptrapper.log полный трап

[Wed Sep 23 16:42:07 2009] str= DISMAN-EVENT-MIB::sysUpTimeInstance: 0:0:00:00.00
SNMPv2-MIB::snmpTrapOID.0: SNMPv2-SMI::enterprises.1123.4.300.0.1
SNMPv2-SMI::enterprises.1123.4.300.1.1.1: 127.0.0.1
SNMPv2-SMI::enterprises.1123.4.300.1.1.2: \\\\\\\\"Out-of-Band \\\\\\\\"
SNMPv2-SMI::enterprises.1123.4.300.1.1.3: \\\\\\\"atkds3200 \\\\\\\"
SNMPv2-SMI::enterprises.1123.4.300.1.1.4: \\\\\\"280b \\\\\\"
SNMPv2-SMI::enterprises.1123.4.300.1.1.5: \\\\\"Sep 23, 2009 4:39:16 PM \\\\\"
SNMPv2-SMI::enterprises.1123.4.300.1.1.6: \\\\"Controller enclosure component failed \\\\"
SNMPv2-SMI::enterprises.1123.4.300.1.1.7: \\\"Power-fan canister \\\"
SNMPv2-SMI::enterprises.1123.4.300.1.1.8: \\"Enclosure 85, Slot 1 \\"
SNMP-COMMUNITY-MIB::snmpTrapCommunity.0: \"public\"

В чем может быть проблема, кто-нибудь сталкивался с подобным? Заранее спасибо!

gdgsoft
23-09-2009, 14:19
Да, есть такое.
Мне кажется это просто ограничение символов в выводе (Latest Data).
В Вашем примере их 251(скопировал текст руцями в ворд и посмотрел).

Можно например ручками сделать тригер на сравнение строки с 256 символами или более и пульнуть эту строку через ZABBIX_SENDER.
Вы получите в (Latest Data) наверное 255. Но если сработает триггер, то там будет вся строка (все данные).

Думаю девелоперы сейчас подскажут :)

gdgsoft
25-09-2009, 16:42
Может кому то будет интересно.
Для себя первую проблему:
1) как гасить все триггера в случае прихода одного конкретного
как на свой взгляд, решил, но криво.
Сделал по приходу конкретного значения запуск сскрипта и в нем уже гашение интересующих меня триггеров.

Вторая проблема актуальна. Прошу помощи :)