Здравствуйте!Поставили передо мной задачку - на си ловить snmp-трапы и засовывать их в OracleSQL.
Долго пытался свой простенький велик изобрести, не выходит ничего путнего.Сейчас ковыряюсь со стандартным net-snmp (www.net-snmp.org), в котором есть snmtrapd. И опять банан. Не могу найти в каком месте можно вклиниться. С либой для Оракла, как ни странно, всё в порядке. Несколько строчек кода и всё работает.
Но где перехватывать уже раскодированные и распарсенные данные в snmptrapd - хоть бей, хоть режь, не пойму... У сего демона есть ключ -d - дампить на экран пакеты. Именно то, что надо. Делаю make clean, вставляю в разных местах тестовые printf(, make и ничего не происходит. Голова скоро поломается.
Заранее спасибо за любые советы!
Курим man snmptrapd.conf
Особенно в части traphandle.
> Курим man snmptrapd.conf
> Особенно в части traphandle.Оракля жирная и на каждый trap не успевает стартануть, потери трапов начинаются ОЧЕНЬ быстро (буквально при 3-4 одновременных событиях). Вариант с fork 1 тоже не нравится, если совпадет 10-15 трапов, это уже forkbomb будет :)
В общем, надо вклиниться в snmptrapd и поднимать коннект при старте проги. На каждый трап по insert-у и коммит раз в 10-20 вставок. Кто-нибудь поможет? :)
>> Курим 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.tcltraps.tcl - это мой скрипт, который обрабатывает трапы в соответствии с заданными правилами.
Получаю достаточно много трапов, но повышенной загрузки на сервере от этого не ловил никогда. Если планируете получать сотни трапов в секунду - для всех скриптовых языков общего назначения есть модули (tcl, perl, python как минимум), позволяющие напрямую получать трапы, запустив свой trapd прямо из скрипта.
Не хотите делать инсерт в бд каждый раз - пишите трапы в файл и раз в минуту вызывайте обработчик для этого файла, например.
Или вариант со своим trapd и хранением трап в памяти и инсертом при получении определенного количества трап.
Скажу честно, и сам вижу несколько разных путей решения проблемы. И на перле мог бы написать демона за полчаса. Но задачу поставили именно так, как описано выше. Самому смешно.p.s. В списках рассылки net-snmp у народа потери начинаются при 3000 трапов в минуту. То есть, запас у net-snmp колоссальный. Надо к нему Оракуль прикрутить как-то.... %-(
> Скажу честно, и сам вижу несколько разных путей решения проблемы.Так, "сделай" демона:
snmptrapd -$ключ_для_демона -F $формат_для_printfa | свой_демон_на_perle &
> Поставили передо мной задачку - на си ловить snmp-трапы и засовывать их
> в OracleSQL.
> Долго пытался свой простенький велик изобрести, не выходит ничего путнего.Поймать на UDP трап, разобрать ASN.1 (BER) - ОЧЕНЬ несложно. Может все таки свой велосипед прикрутить?