Перейти к содержимому
Калькуляторы

nagios snmp - количество маков Как посчитать количество маков на порту комутатора?

Подскажите пожалуйста есть ли у кого скрипт для nagios для подсчета количества мак адресов по snmp на заданом порту комутатора ну и срабатывание *OK* при наличии > 0 адресов и соответственно *CRITICAL* при = 0 адресов. Заранее благодарю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите пожалуйста есть ли у кого скрипт для nagios для подсчета количества мак адресов по snmp на заданом порту комутатора ну и срабатывание *OK* при наличии > 0 адресов и соответственно *CRITICAL* при = 0 адресов. Заранее благодарю.

 

Такого нет, но проблемы сделать оный не вижу. А что за коммутаторы то?

 

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

Да и наличие мака на порту не гарантирует работоспособность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Комутаторы в основном EdgeCore ES3528M. Мониторится будут не абонентские порты. Неужели никто не делал такой скрипт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да вот в том то и дело что нет :( А не стандартных oid для свичей которые показывают маки на портах?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да вот в том то и дело что нет :( А не стандартных oid для свичей которые показывают маки на портах?

Блин, это лень что ли? Ну запросите ОИД у того кто продал свитчи, например у Монблана.

Действительно там же 5 строк.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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;

}

Изменено пользователем hub00

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у меня 1500 железок, и каждые 5 мин скрипт проходит по всем коммутаторам и по snmp собирает mac port в БД. Где эта информация уже анализируется на предмет закольцовок в сети, флуда, построения динамической топологии сети. Обход и анализ занимает около 3-х мин в вечернее время.

 

а каким образом анализируете? Если не секрет конечно

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у меня 1500 железок, и каждые 5 мин скрипт проходит по всем коммутаторам и по snmp собирает mac port в БД. Где эта информация уже анализируется на предмет закольцовок в сети, флуда, построения динамической топологии сети. Обход и анализ занимает около 3-х мин в вечернее время.

 

а каким образом анализируете? Если не секрет конечно

 

 

Не секрет и абсолютно ничего особенного.

 

Кольца или mac-move определяются путем сравнения пар mac-port только что полученных, с уже имеющимися в базе (полученными раннее). Если видим что mac переехал в другой порт, обновляем в базе новый порт, и к примеру я заношу запись в другую таблицу, мол в это время на этом коммутаторе мак переехал в этот порт с того порта. Как арп-вотч в линухе, только там ip-mac.

 

Флуд (мак-флуд) анализирую БД на количество новых маков за промежуток времени, если больше определенного значения, получаю уведомление.

 

Построение динамической топологии. Выбираю один мак как ориентир (мак шлюза в влане управления этими коммутаторами), опираясь на имеющуюся информацию в БД, определяю на коммутаторах аплинковые порты и потом уже строю цепочки.

 

Все делаю на перле, сбор и обработка данных производится многопоточно. Одновременно обрабатываю по 500 железок 4 ядра ксеона 2.5 Гигагерц 70-100% и 2.5-3Гб ОЗУ.

Изменено пользователем hub00

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а не поделитесь скриптами? ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Огромное спасибо 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;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а не поделитесь скриптами? ;)

Я бы тоже взглянул. Возможно, нашлись бы точки соприкосновения с http://forum.nag.ru/forum/index.php?showtopic=54023

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скорее всего так

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 и посмотреть там или попробовать) и текст в принте строкой выше по вкусу (текст - комментарий)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо всем! поправили немного для себя - чтоб критикал показывал при потушенном порте, а при меньше нормы маков - варнинг,

 

#!/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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.