URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9700
[ Назад ]

Исходное сообщение
"Не могу найти нужное место в пакете net-snmp"

Отправлено медведдд , 26-Июн-13 10:41 
Здравствуйте!

Поставили передо мной задачку - на си ловить snmp-трапы и засовывать их в OracleSQL.
Долго пытался свой простенький велик изобрести, не выходит ничего путнего.

Сейчас ковыряюсь со стандартным net-snmp (www.net-snmp.org), в котором есть snmtrapd. И опять банан. Не могу найти в каком месте можно вклиниться. С либой для Оракла, как ни странно, всё в порядке. Несколько строчек кода и всё работает.

Но где перехватывать уже раскодированные и распарсенные данные в snmptrapd - хоть бей, хоть режь, не пойму... У сего демона есть ключ -d - дампить на экран пакеты. Именно то, что надо. Делаю make clean, вставляю в разных местах тестовые printf(, make и ничего не происходит. Голова скоро поломается.

Заранее спасибо за любые советы!


Содержание

Сообщения в этом обсуждении
"Не могу найти нужное место в пакете net-snmp"
Отправлено Аноним , 26-Июн-13 15:51 
Курим man snmptrapd.conf
Особенно в части traphandle.



"Не могу найти нужное место в пакете net-snmp"
Отправлено медведдд , 27-Июн-13 05:10 
> Курим man snmptrapd.conf
> Особенно в части traphandle.

Оракля жирная и на каждый trap не успевает стартануть, потери трапов начинаются ОЧЕНЬ быстро (буквально при 3-4 одновременных событиях). Вариант с fork 1 тоже не нравится, если совпадет 10-15 трапов, это уже forkbomb будет :)

В общем, надо вклиниться в snmptrapd и поднимать коннект при старте проги. На каждый трап по insert-у и коммит раз в 10-20 вставок. Кто-нибудь поможет? :)


"Не могу найти нужное место в пакете net-snmp"
Отправлено anonymous , 27-Июн-13 12:06 
>> Курим man snmptrapd.conf
>> Особенно в части traphandle.
> Оракля жирная и на каждый trap не успевает стартануть, потери трапов начинаются
> ОЧЕНЬ быстро (буквально при 3-4 одновременных событиях). Вариант с fork 1
> тоже не нравится, если совпадет 10-15 трапов, это уже forkbomb будет
> :)
> В общем, надо вклиниться в snmptrapd и поднимать коннект при старте проги.
> На каждый трап по insert-у и коммит раз в 10-20 вставок.
> Кто-нибудь поможет? :)

/etc/snmp
authCommunity execute,net trapcomm
doNotLogTraps yes
traphandle default /usr/local/bin/traps.tcl

traps.tcl - это мой скрипт, который обрабатывает трапы в соответствии с заданными правилами.
Получаю достаточно много трапов, но повышенной загрузки на сервере от этого не ловил никогда. Если планируете получать сотни трапов в секунду - для всех скриптовых языков общего назначения есть модули (tcl, perl, python как минимум), позволяющие напрямую получать трапы, запустив свой trapd прямо из скрипта.
Не хотите делать инсерт в бд каждый раз - пишите трапы в файл и раз в минуту вызывайте обработчик для этого файла, например.
Или вариант со своим trapd и хранением трап в памяти и инсертом при получении определенного количества трап.


"Не могу найти нужное место в пакете net-snmp"
Отправлено медведдд , 27-Июн-13 12:22 
Скажу честно, и сам вижу несколько разных путей решения проблемы. И на перле мог бы написать демона за полчаса. Но задачу поставили именно так, как описано выше. Самому смешно.

p.s. В списках рассылки net-snmp у народа потери начинаются при 3000 трапов в минуту. То есть, запас у net-snmp колоссальный. Надо к нему Оракуль прикрутить как-то.... %-(


"Не могу найти нужное место в пакете net-snmp"
Отправлено Andrey Mitrofanov , 27-Июн-13 14:08 
> Скажу честно, и сам вижу несколько разных путей решения проблемы.

Так, "сделай" демона:

snmptrapd -$ключ_для_демона -F $формат_для_printfa | свой_демон_на_perle &


"Не могу найти нужное место в пакете net-snmp"
Отправлено igor , 14-Июл-13 22:36 
> Поставили передо мной задачку - на си ловить snmp-трапы и засовывать их
> в OracleSQL.
> Долго пытался свой простенький велик изобрести, не выходит ничего путнего.

Поймать на UDP трап, разобрать ASN.1 (BER) - ОЧЕНЬ несложно. Может все таки свой велосипед прикрутить?