Bear_UA Posted March 26, 2012 Posted March 26, 2012 Подскажите пожалуйста есть ли у кого скрипт для nagios для подсчета количества мак адресов по snmp на заданом порту комутатора ну и срабатывание *OK* при наличии > 0 адресов и соответственно *CRITICAL* при = 0 адресов. Заранее благодарю. Вставить ник Quote
Negator Posted March 26, 2012 Posted March 26, 2012 Подскажите пожалуйста есть ли у кого скрипт для nagios для подсчета количества мак адресов по snmp на заданом порту комутатора ну и срабатывание *OK* при наличии > 0 адресов и соответственно *CRITICAL* при = 0 адресов. Заранее благодарю. Такого нет, но проблемы сделать оный не вижу. А что за коммутаторы то? Хочу заметить что Нагиос не очень удобен для таких целей. Вы хотите видеть постоянно кучу сервисов в дауне, когда абонент отключил комп? Да и наличие мака на порту не гарантирует работоспособность. Вставить ник Quote
Bear_UA Posted March 26, 2012 Author Posted March 26, 2012 Комутаторы в основном EdgeCore ES3528M. Мониторится будут не абонентские порты. Неужели никто не делал такой скрипт? Вставить ник Quote
bos9 Posted March 27, 2012 Posted March 27, 2012 да там 5 строчек на баше, oid нашли? Вставить ник Quote
Bear_UA Posted March 27, 2012 Author Posted March 27, 2012 Да вот в том то и дело что нет :( А не стандартных oid для свичей которые показывают маки на портах? Вставить ник Quote
sirmax Posted March 27, 2012 Posted March 27, 2012 Да вот в том то и дело что нет :( А не стандартных oid для свичей которые показывают маки на портах? Блин, это лень что ли? Ну запросите ОИД у того кто продал свитчи, например у Монблана. Действительно там же 5 строк. Вставить ник Quote
hub00 Posted March 27, 2012 Posted March 27, 2012 (edited) snmpwalk -v 2c -c public $ip .1.3.6.1.2.1.17.7.1.2.2.1.2.666 -Ovq Маки в влане 666 в dec виде (меньше грузит железку, в отличии от hex). Грепни порт и wc -l. Ну как-то это криво. у меня 1500 железок, и каждые 5 мин скрипт проходит по всем коммутаторам и по snmp собирает mac port в БД. Где эта информация уже анализируется на предмет закольцовок в сети, флуда, построения динамической топологии сети. Обход и анализ занимает около 3-х мин в вечернее время. Можешь переделать этот код для себя #!/usr/bin/perl -w use strict; my $result; my $limit; my @part; $limit = $ARGV[0]; open(SNMP,"snmpwalk -v 2c -c public $ip 1.3.6.1.4.1.6527.3.1.2.1.1.1 -Ov|"); while (<SNMP>) { @part=split(/ /, $_); $result=$part[1]; } if ($result <= $limit) { print "SNMP OK - $result\n"; exit 0; } else { print "SNMP CRITICAL - $result\n"; exit 2; } Edited March 27, 2012 by hub00 Вставить ник Quote
Negator Posted March 27, 2012 Posted March 27, 2012 у меня 1500 железок, и каждые 5 мин скрипт проходит по всем коммутаторам и по snmp собирает mac port в БД. Где эта информация уже анализируется на предмет закольцовок в сети, флуда, построения динамической топологии сети. Обход и анализ занимает около 3-х мин в вечернее время. а каким образом анализируете? Если не секрет конечно Вставить ник Quote
hub00 Posted March 27, 2012 Posted March 27, 2012 (edited) у меня 1500 железок, и каждые 5 мин скрипт проходит по всем коммутаторам и по snmp собирает mac port в БД. Где эта информация уже анализируется на предмет закольцовок в сети, флуда, построения динамической топологии сети. Обход и анализ занимает около 3-х мин в вечернее время. а каким образом анализируете? Если не секрет конечно Не секрет и абсолютно ничего особенного. Кольца или mac-move определяются путем сравнения пар mac-port только что полученных, с уже имеющимися в базе (полученными раннее). Если видим что mac переехал в другой порт, обновляем в базе новый порт, и к примеру я заношу запись в другую таблицу, мол в это время на этом коммутаторе мак переехал в этот порт с того порта. Как арп-вотч в линухе, только там ip-mac. Флуд (мак-флуд) анализирую БД на количество новых маков за промежуток времени, если больше определенного значения, получаю уведомление. Построение динамической топологии. Выбираю один мак как ориентир (мак шлюза в влане управления этими коммутаторами), опираясь на имеющуюся информацию в БД, определяю на коммутаторах аплинковые порты и потом уже строю цепочки. Все делаю на перле, сбор и обработка данных производится многопоточно. Одновременно обрабатываю по 500 железок 4 ядра ксеона 2.5 Гигагерц 70-100% и 2.5-3Гб ОЗУ. Edited March 27, 2012 by hub00 Вставить ник Quote
martin74 Posted March 28, 2012 Posted March 28, 2012 а не поделитесь скриптами? ;) Вставить ник Quote
Bear_UA Posted April 1, 2012 Author Posted April 1, 2012 Огромное спасибо hub00 за помощь. Вот сделал свой скрипт на основе скрипта hub00. Пользуйтесь на здоровье :) Параметры скрипта check_mac HOST PORT MIN_LIMIT HOST - ип адрес свича PORT - номер порта MIN_LIMIT - минимальное значение для статуса OK (если ниже то CRITICAL) скрипт также проверяет или порт физически активный (ifOperStatus.x) и в случае если не активный то также выдает CRITICAL Скрипт проверен со свичами EdgeCore, Dlink, Planet, Linksys #!/usr/bin/perl -w use strict; my $result; my $limit; my $port; my $count; my $portstatus; my $ip; my @part; $ip = $ARGV[0]; $limit = $ARGV[2]; $port = $ARGV[1]; $count=0; $portstatus=0; if ($limit eq "" || $port eq "" || $ip eq "") { print "SNMP CRITICAL - Usage: check_mac HOST PORT MIN_LIMIT\n"; exit 2; } open(SNMPUP,"snmpwalk -v 2c -c public -Ov $ip ifOperStatus.$port |"); while (<SNMPUP>) { @part=split(/ /, $_); $portstatus=$part[1]; chomp $portstatus; } close(SNMPUP); open(SNMP,"snmpwalk -v 2c -c public -Ov $ip .1.3.6.1.2.1.17.7.1.2.2.1.2 |"); while (<SNMP>) { @part=split(/ /, $_); $result=$part[1]; if ($result == $port) { $count++; } } if ($count >= $limit && $portstatus eq "up(1)") { print "SNMP OK - $count\n"; exit 0; } else { print "SNMP CRITICAL - $count\n"; exit 2; } Вставить ник Quote
Ilya Evseev Posted April 2, 2012 Posted April 2, 2012 а не поделитесь скриптами? ;) Я бы тоже взглянул. Возможно, нашлись бы точки соприкосновения с http://forum.nag.ru/forum/index.php?showtopic=54023 Вставить ник Quote
sinoptik Posted April 20, 2012 Posted April 20, 2012 Bear_UA А как должен выглядеть описание плагина и как описать сервис ,чтоб каждый раз айпишник свича не описывать?? 'check_snmp' command definition define command{ command_name check_mac command_line /usr/lib/nagios/plugins/check_mac -H $ARG1$ $ARG2$ } define service{ use generic-service host_name MAC service_description Port25_MAC1 check_command check_mac!192.168.128.42 25 1 } так что-то не забирает(( И что надо поправить ,дабы при активном порту ,но 0 маков он не critical бывл, а желтый warning ? Вставить ник Quote
st_re Posted April 20, 2012 Posted April 20, 2012 Скорее всего так 1 command_line /usr/lib/nagios/plugins/check_mac $HOST$ $ARG1$ $ARG2$ 2 check_command check_mac!25!1 И что надо поправить ,дабы при активном порту ,но 0 маков он не critical бывл, а желтый warning ? наверное в конце скрипта сменить exit 2; на exit 1; (1 это варнинг кажется, поискать nagios.pm и посмотреть там или попробовать) и текст в принте строкой выше по вкусу (текст - комментарий) Вставить ник Quote
sinoptik Posted April 21, 2012 Posted April 21, 2012 Спасибо всем! поправили немного для себя - чтоб критикал показывал при потушенном порте, а при меньше нормы маков - варнинг, #!/usr/bin/perl -w use strict; my $result; my $limit; my $port; my $count; my $portstatus; my $ip; my @part; $ip = $ARGV[0]; $limit = $ARGV[2]; $port = $ARGV[1]; $count=0; $portstatus=0; if ($limit eq "" || $port eq "" || $ip eq "") { print "SNMP CRITICAL - Usage: check_mac HOST PORT MIN_LIMIT\n"; exit 2; } open(SNMPUP,"snmpwalk -v 2c -c public -Ov $ip ifOperStatus.$port -r 1 -m RFC1213-MIB |"); while (<SNMPUP>) { @part=split(/ /, $_); $portstatus=$part[1]; chomp $portstatus; } close(SNMPUP); open(SNMP,"snmpwalk -v 2c -c public -Ov $ip .1.3.6.1.2.1.17.7.1.2.2.1.2 |"); while (<SNMP>) { @part=split(/ /, $_); $result=$part[1]; if ($result == $port) { $count++; } } #if ($count >= $limit && $portstatus eq "up(1)") #{ #print "SNMP OK MACs on port - $count\n"; #exit 0; #} #else #{ #print "SNMP CRITICAL - $count\n"; #exit 2; #} if ($portstatus eq "up(1)") { if ($count>0) { print "SNMP OK MACs on port - $count\n"; exit 0; } else { print "SNMP WARNING MACs on port = 0\n"; exit 1; } } else { print "SNMP CRITICAL - link down!\n"; exit 2; } В /etc/nagios-plugins/config 'check_mac' command definition define command{ command_name check_mac command_line /usr/lib/nagios/plugins/check_mac $HOSTADDRESS$ $ARG1$ $ARG2$ } В сервисах хоста описываем define service{ use generic-service host_name service_description Port25 check_command check_mac!25!1 } где 25 - номер порта 1 - минимальное кол-во маков для status ok Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.