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

Отмониторить разрыв кольца (STP)

Подскажите есть ли софт позволяющий отмониторить разрыв STP кольца? Что-нибудь а-ля нагиос, или в идеальном случае плагин к нему... :-)

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


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

snmp-trap: link down?

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

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


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

А с чего он link down-то при отключении избыточного линка ?

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


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

Например с любого из, между которыми этот разрыв и произошёл.

 

Вдогонку: ошибочка вышла: smtp-trap читать как snmp-trap.

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

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


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

Ладно.

Скажи plz как настроить Dlink 3526 чтоб он давал такой trap ?

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


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

Только не будем о D-Link'ах отзываться, иначе, как о мыльницах, ладно? Ну, даже, если трап не бросает, snmpget'ом добивается.

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


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

Ну я ж попросил, дай конкретный пример.

Ну хоть, что-нибудь, что так работает, как ты описываешь.

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


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

Трапы - это не то!!! А если у меня конвертер к резервному линку подключен???? Линк упадет, а трап никогда не придет!

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


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

поставь конвертер в режим LFP,(ляжет оптика, ляжет и медь)

 

вообще в хороших коммутаторах мибы есть на тему стп, в них и стоит покопать на счёт сбора информации о состоянии

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


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

Мне кажется, проще собирать с кольца STP cost to root, если разница больше 20000 (дефолтный кост для 1Gb), то между этими коммутаторами обрыв

 

поставь конвертер в режим LFP,(ляжет оптика, ляжет и медь)

 

вообще в хороших коммутаторах мибы есть на тему стп, в них и стоит покопать на счёт сбора информации о состоянии

В Planet GT-702S разве такое есть???

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


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

И все, же, никто в нагиос такой мониторинг не встраивал?...

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


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

Покопавшись денек с MIBами DES-3010G/DES-3526 и еще денек с perlом, получил скрипт, на выходе которого вот такая уродливая пока штука:-)

simple.png

simple.png

Могу описать логику постороения картинки если кому интересно?!

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

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


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

Былоб неплохо описАть логику и на скрипт посмотреть.

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


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

Была задача мониторить Dlink Des-2108 и Des-2110. Для nagios писал такой скрипт:

 

##############################################

##############################################

#!/usr/bin/perl

 

$res = "OK"; $retval="0";

my @str = split '\n', `cat /usr/local/sbin/switches`;

 

for ($s=0;$s<(scalar(@str));$s++)

{

chomp (@str[$s]);

my @switch = split '\s+', @str[$s];

chomp (@switch[0]);

for ($port=1;$port<(scalar(@switch));$port++)

{

 

$stat=`snmpwalk -v 1 -c public @switch[0] 1.3.6.1.2.1.17.2.15.1.3.$port| cut -f 4 -d' '`;

chomp ($stat);

 

if ($stat eq ''){$stat_t="down"}

elsif ($stat eq "2"){$stat_t="block"}

elsif ($stat eq "5"){$stat_t="forward"};

 

if (@switch[$port] eq "*" or @switch[$port] eq $stat_t)

{

# $retval="0";

# if ($stat eq ''){$res=$port." down";}

# elsif ($stat eq "2"){$res=$port." block";}

# elsif ($stat eq "5"){$res=$port." forward";}

}

else

{

if ($stat eq ''){if (@switch[$port] eq "down"){$res_1=$port." down, must be ".@switch[$port]."; ";}else{$res_1=$port." down, must be ".@switch[$port]."; ";}}

elsif ($stat eq "2"){if (@switch[$port] eq "block"){$res_1=$port." block, must be ".@switch[$port]."; ";}else{$res_1=$port." block, must be ".@switch[$port]."; ";}}

elsif ($stat eq "5"){if (@switch[$port] eq "forward"){$res_1=$port." (forward)\tmust be ".@switch[$port]."; ";}else{$res_1=$port." forward, must be ".@switch[$port]."; ";}}

 

if (scalar(@fail)>0)

{@fail[scalar(@fail)+1]="$res_1";}

else {@fail[0]="$res_1";}

}

}

#print $res;

 

if (scalar(@fail)>0){$res = "CRITICAL: @fail"; $retval="2";}else {$res = "OK"; $retval="0"}

 

$hostname=@switch[0];

chomp ($hostname);

chomp ($retval);

chomp ($res);

print "$hostname\tswstp\t$retval\t$res\n";

`/bin/echo -e "$hostname\tswstp\t$retval\t$res\n" | /usr/bin/send_nsca -H 10.0.0.9 -c /etc/nagios/send_nsca.cfg`;

#@fail=();

$res_1="";

$res="";

$#fail=-1;

$#switch=-1;

 

}

##############################################

##############################################

 

Содержимое /usr/local/sbin/switches:

 

##############################################

##############################################

sw-name1 forward * * block down down down down

sw-jname2 forward forward forward block block block block block forward down

sw-name3 forward forward forward block down down down block

sw-name4 forward forward * * * down block block

##############################################

##############################################

Т.е.

имя_свитча состояние_порта_1 состояние_порта_2 ......

Количество портов не имеет значения. Каждая строка обрабатывается отдельно.

Малость коряво но работает.... Проверяется состояние портов на соответствие заданному шаблону. Возвращает "Критикал" если есть отличия и "ОК" если все в порядке. Проверка каждые 10 минут. Запуск через крон и возврат состояния через nsca. Если в шаблоне попадается "*" - значит состояние порта не интересует.

Как прикрутить к нагиосу думаю описывать ненадо.

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

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


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

Расскажите если не трудно...

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


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

Расскажите если не трудно...
В checkcommands.cfg дописал:

# 'swstp' command definition
define command{
        command_name    swstp
        command_line    /usr/local/sbin/swstp
        }

 

В services.cfg

 

define service{
        use                             generic-service    ; Name of service template to use

        hostgroup_name                  switch-stp
        service_description             swstp
        is_volatile                     0
        check_period                    24x7
        max_check_attempts              3
        normal_check_interval           5
        retry_check_interval            1
        contact_groups                  support  # !!!ПРОПИШИ СВОЮ!!
        active_checks_enabled           0
        passive_checks_enabled          1
        notification_interval           20
        notification_period             24x7
        notification_options            c,r
        check_command                   swstp
        }

В hostgroups.cfg:

define hostgroup{
        hostgroup_name  switch-stp
        alias           stp switch
        members         sw-name1,sw-name2,sw-name3,............
        }

 

Сделано у меня через пасив чеки. Т е результат тестирования приходит самостоятельно без вызова скрипта нагиосом. Реализовано через nsca. Что такое и как работает nsca смотрим в документации прилагаемой к нагиосу, или гуглим. Можно реализовать и с вызовом чека самим нагиосом. Мне было удобнее через nsca.

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

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


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

Для построения картинки simple.png мне потребовалось

1. OID для DES-3010G/3526 в которых содержится

1) STP Cost To Root

DES-3010G 1.3.6.1.2.1.17.2.6.0

DES-3526 1.3.6.1.4.1.171.12.15.2.3.1.14.0

2) STP Router ID 1.3.6.1.2.1.17.1.1.0

3) STP Root Port

DES-3010G 1.3.6.1.2.1.17.2.7.0

DES-3526 1.3.6.1.4.1.171.12.15.2.3.1.18.0

4) STP Designated Bridge

DES-3010G 1.3.6.1.2.1.17.2.15.1.8.* <- это таблица, вместо * нужно указать порт

DES-3526 1.3.6.1.4.1.171.12.15.2.3.1.17.0

ВНИМАНИЕ!!! DES-3010G ниже прошивки 3.00.053 не верно возвращают STP Designated Bridge, OID для DES-3526 указаны для прошивок >=4.00.B19

 

2. Решил писать на perl, не ругайте за кривой стиль или неоптимальность, я только учусь;-)

use DBI;
use GraphViz;

 

DBI нужен для селекта списка свичей, snmp community, его типа и местанахождения. Есть 3 таблицы: первая со списком L2 свичей, вторая со списком колец, третья со списком L3 роутеров. Соответственно у L2 свичей есть идентификатор кольца, у колец есть идентификатор L3 роутера.

 

GraphViz соответственно нужен для рисования картинки

 

3. Для постороения STP дерева необходимо знать STP router id корня дерева, которым является l3 router. И Dlink 30/35, и AT-99** в OID 1.3.6.1.2.1.17.1.1.0 содержат STP router id.

 

sub get_router_id #Параметры 1-ip, 2-snmp v2c community
{
    $id = `snmpget -Ov -v2c -c $_[1] $_[0] 1.3.6.1.2.1.17.1.1.0`;
    $id = substr($id,12,17); 
    chomp($id);
    $id =~ tr/ /:/; 
#    print "Router id $id\n";
    return $id;
}

 

l3_select - массив из базы, который содержит ip и snmp community

$l3_ip=$l3_select[0];
$l3_community=$l3_select[1];
$l3_router_id =get_router_id($l3_ip,$l3_community);

 

Далее заполняем массив нужными данными полученными по snmp и из базы

type1 - это DES3010G, type2 соответственно DES3526

while($row = $sth->fetchrow_hashref())
{
    $ip =  $row->{'l2_sw_ip'};
    $community =  $row->{'community'};
    $sw_location = $row->{'location'};
    $swtype = $row->{'sw_type_id'};    
    if($swtype == 1)
    {
        $root_port = `snmpget -Ov -v2c -c $community $ip $type1_oid_root_port`;
        $root_port = substr($root_port,9);
        chomp($root_port);
        $cost_to_root = `snmpget -Ov -v2c -c $community $ip $type1_oid_cost`;
        $design_router_id = `snmpget -Ov -v2c -c $community $ip $type1_oid_design_bridge$root_port`;
        $design_router_id = substr($design_router_id,18,17); 
        $design_router_id =~ tr/ /:/;
        chomp($design_router_id);    
    }
    else
    {
        $root_port = `snmpget -Ov -v2c -c $community $ip $type2_oid_root_port`;
        $root_port = substr($root_port,9);
        chomp($root_port);      
        $cost_to_root = `snmpget -Ov -v2c -c $community $ip $type2_oid_cost`;
        $design_router_id = `snmpget -Ov -v2c -c $community $ip $type2_oid_design_bridge`;
        $design_router_id = substr($design_router_id,18,17); 
        $design_router_id =~ tr/ /:/;
        chomp($design_router_id);
    }
    $router_id = get_router_id($ip, $community);
    $cost_to_root = substr($cost_to_root,9);
    chomp($cost_to_root); 
    
    print "$ip $community $swtype $cost_to_root $router_id root_port=$root_port design_router=$design_router_id\n";
    $array[$i][0] = $router_id;
    $array[$i][1] = $cost_to_root;
    $array[$i][2] = $design_router_id;
    $array[$i][3] = 'n';
    $array[$i][4] = $ip;
    $array[$i][6] = $root_port;
    if ($swtype == 1 )
    {
        $array[$i][5] = 'DES-3010G';
    }
    else
    {
        $array[$i][5] = 'DES-3526';
    }
    $i++;
}

 

Получив массив array, начинаем спускаться по дереву от корня, параллельно рисуя ноды и ребра

 

$g = GraphViz->new(node => {shape => 'box' , fontname => 'arial' }, edge => {labeldistance => '2', fontsize => '15'});
$g->add_node($l3_ip);
find_node($l3_ip, $l3_router_id);
$g->as_png("simple.png");
print $l3_ip, $l3_community, $l3_router_id;

sub find_node
{
my $count=0;
my $bum=0;
while($array[$count])
{
    if($array[$count][2] eq $_[1])
    {
        $g->add_node($array[$count][4], label => "$array[$count][4]\n$array[$count][5]");
        $g->add_edge($_[0] => $array[$count][4], label => $array[$count][1], headlabel => $array[$count][6]);
        $bum=1;
        print "find_node($array[$count][4],$array[$count][0])\n";
        find_node($array[$count][4],$array[$count][0]);
        
    }
$count++;    

}
return $bum; 
}

 

Единственное, c русскими шрифтами и GraphViz какие-то проблемы.

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

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


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

Год назад, эти свичи, хоть и было заявлено, не держали STP, SmokerMan, а мониторить нужно состояние порта, имхо так лучше.

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


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

я написал через snmp + lldp получаю в виде visio или pdf

lldp.png

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


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

А можно попросить скрипт ?

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


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

Join the conversation

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

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

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

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

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

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

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