The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"perl + nagios "
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Мониторинг, логи / Linux)
Изначальное сообщение [ Отслеживать ]

"perl + nagios "  +/
Сообщение от drake0103 email(ok) on 21-Июл-11, 19:03 
Помогите пожалуйста))
#!/usr/bin/perl

use Net::Telnet::Cisco;
    my $session = Net::Telnet::Cisco->new(Host => 'host');
  $session->login('login', 'paswd');
  # Execute a command
  my @output = $session->cmd('show mac-address-table interface FastEthernet0/9');
  print @output;
  $session->close;

если есть строка:
Non-static Address Table:
Destination Address  Address Type  VLAN  Destination Port
-------------------  ------------  ----  --------------------
00d0.b7b0.2db9       Dynamic         3  FastEthernet0/9

то выдавало бы "ОК"

а если пусто то "NOT OK"

И если знаете, то как прикрутить это к нагиосу

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "perl + nagios "  +/
Сообщение от PavelR (??) on 21-Июл-11, 20:29 
> Помогите пожалуйста))
> #!/usr/bin/perl
>  use Net::Telnet::Cisco;
>     my $session = Net::Telnet::Cisco->new(Host => 'host');
>   $session->login('login', 'paswd');
>   # Execute a command
>   my @output = $session->cmd('show mac-address-table interface FastEthernet0/9');
>   print @output;
>   $session->close;
> если есть строка:

хренасе "строка"... ) целых три.


> Non-static Address Table:
> Destination Address  Address Type  VLAN  Destination Port
> -------------------  ------------  ----  --------------------
> 00d0.b7b0.2db9       Dynamic    
>     3  FastEthernet0/9
> то выдавало бы "ОК"
> а если пусто то "NOT OK"

my $found = {};
foreach (@output) {
    #print "-$_-"; #Uncomment while debugging, to see all spaces in string.
    $found->{1} = 1 if $_ eq "Non-static Address Table: ";
    $found->{2} = 1 if $_ =~ /00d0.b7b0.2db9/ && $_ =~ /FastEthernet0/9/;
};

if ($found->{1} && $found->{2}) {
   print "OK";
}
else {
   print "Not OK";
};

> И если знаете, то как прикрутить это к нагиосу

Для нагиоса:


Условие вывода:

if ($found->{1} && $found->{2}) {
    print "MAC found on specified port\n";
    #exit $ERRORS{'OK'};
    exit 0;
}
else {
    print "MAC NOT FOUND on specified port\n";
    #exit $ERRORS{'CRITICAL'};
    exit 2;
};


Чтобы использовать хеш $ERRORS нужно подключить utils.pm

use lib "/usr/lib/nagios/plugins";
use utils qw (%ERRORS);

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "perl + nagios "  +/
Сообщение от drake0103 (ok) on 21-Июл-11, 22:44 
>[оверквотинг удален]
>     exit 0;
> }
> else {
>     print "MAC NOT FOUND on specified port\n";
>     #exit $ERRORS{'CRITICAL'};
>     exit 2;
> };
> Чтобы использовать хеш $ERRORS нужно подключить utils.pm
> use lib "/usr/lib/nagios/plugins";
> use utils qw (%ERRORS);

Спасибо))))

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "perl + nagios "  +/
Сообщение от drake0103 (ok) on 21-Июл-11, 23:58 
Еще маленькая проблемка, маков может быть больше чем один и они могут меняться.
Вот и если убрать :
$found->{2} = 1 if $_ =~ /00d0.b7b0.2db9/ && $_ =~ /FastEthernet0/9/;
то при любом результате выдает :
"MAC found on specified port"

Как это исправить, то я только начинаю учить перл)

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "perl + nagios "  +/
Сообщение от PavelR (??) on 22-Июл-11, 08:55 
> Еще маленькая проблемка, маков может быть больше чем один и они могут
> меняться.
> Вот и если убрать :
> $found->{2} = 1 if $_ =~ /00d0.b7b0.2db9/ && $_ =~ /FastEthernet0/9/;
> то при любом результате выдает :
> "MAC found on specified port"
> Как это исправить, то я только начинаю учить перл)

дык я откуда знаю, как это исправить? Задача то ваша. )

---------

А что тут учить ? тут вроде 5 строк, надо понимать алгоритмику, а язык программирования тут особо знать и не надо. Это я тут с хэшами фишкую, вообще можно простыми переменными обойтись.

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

хитрый экзампль:

#Общее описание группы хостов
define host {
    use a-host
    name b-host
    parents gw-c
    hostgroups  d-hostgroup
    _CHKPING -w 350,14% -c 450,25% -p 6
    register 0
}

....

#один из хостов. Нужно только три строки. Все проверки будут подвешены как сервисы группы хостов.
#Возможно, вашем случае будет четыре строки - добавится определение значения мак-адреса хоста.
define host {
        use                     b-host
        host_name               my-special-host
        address                 1.2.3.4
}

..........


### COMMANDS

define command {
    command_name    special_chk_ping
    command_line    $USER1$/check_ping -H $HOSTADDRESS$ $_HOSTCHKPING$
    # $_HOSTCHKPING$ - переменная, определенная в хосте
}

Вешаем команду на группу хостов

define service {
    use generic-service
    normal_check_interval 5
    hostgroup_name d-hostgroup
    service_description Ping from Monitoring
    check_command special_chk_ping
    notification_interval 0
}

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


Документация у нагиоса хорошая, мне нравится :-)

http://nagios.sourceforge.net/docs/nagioscore/3/en/customobj...

А использование переменных - это типа гибкость =) Можно одну и ту же переменную использовать в разных командах проверки, менять в одном месте и всё такое.
В моем случае описанный тремя строчками хост проверяется еще и из разных точек мониторинга.

Подвешивать проверки на группы, задавать параметры проверок через переменные - это ИМХО очень удобно )


Аналогичным вышеописанному с хостами образом можно поступать и с сервисами - вешать проверки на шаблон сервиса, наследовать сервисы от шаблона, мак-адреса вписывать в переменные в описании service. На мой взгляд - это легко и красиво :-)

Вообще это всё по вкусу =) можно конечно и параметрами check_command обходиться =)


-------------
Вообще примеров нагиос-плагинов дофига, на разных ЯП, и на разные вкусы/задачи.
Как в интернете, так и в штатной поставке нагиоса.

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

Как начальный вариант, можно делать одну телнет-сессию и опрашивать наличие всех необходимых маков в одном скрипте, и подвешивать в нагиос это как один сервис. Но это смотря кому что и как. Точного времени неработы/журнала состояния по конкретному маку, естественно, в этом случае не будет.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру