1

И снова здравсвтуйте
Есть сислог со свитчей dlink вида  :

........
Oct  2 08:20:48 192.168.0.22 %LINK-W-Down:  1:18                                                                                                                                                                
Oct  2 08:20:49 192.168.0.22 %LINK-I-Up:  1:18  
..........

Хотелось бы написать парсер для Nagios, который бы выводил предупреждение если статус порта будет Down
Но не могу придумать как правильно его распарсить, на скорую руку набросал скрипт :

#!/bin/bash                                                                                                                                                                                                     
#set -x                                                                                                                                                                                                         
exit_state=3                                                                                                                                                                                                    
STATE_OK=0                                                                                                                                                                                                      
STATE_CRITICAL=2                                                                                                                                                                                                
##################################                                                                                                                                                                              
                                                                                  
                ipdown=`/bin/cat /var/log/syslog/switches.log| grep "%LINK-W-Down" | awk '{print $4,$6,$5}'| sort|uniq`                                                                                     
                echo $ipdown| tr ' ' '\n'  

Скриптом я получаю в колонку :

192.168.0.22 
1:18
%LINK-W-Down:  

Проблема заключается в том, как мне выводить предупреждение только по  <<  %LINK-W-Down:  >>  ?
Был вариант еще выводить результат парсинга  в отдельный файл, например switch.tmp и его парсить на 3 переменные -  IP, статус порта и номер порта, но тогда я потеряю связку между ними. Подскажите пжста в какую сторону думать

2

Не совсем понятно в чём всё-таки вопрос.

3

Вопрос в том, каким образом отправить статус CRITICAL при строке
192.168.0.22 %LINK-W-Down:  1:18                                                                                                                                                               
если данные 192,168,0,22 и 1:18 динамические, т.е. может быть
192.168.0.44 %LINK-W-Down:  2:21
192.168.0.66 %LINK-W-Down:  2:8          и так далее

4

Так?

ipdown=`/bin/cat /var/log/syslog/switches.log| grep "%LINK-W-Down" -с`
if [ "$ipdown" -ne "0" ]
then
    status="CRITICAL"
fi

Ну и дальше с этой переменной делаешь что тебе надо.

5

Да, работает, но не совсем то, хотелось бы, чтобы в нагиосе было оповещение типа
192,168,0,33 link down 1:18
192,168,0,44 link down 2:15 и т.д.

6 (08.10.2012 15:50:32 отредактировано Vascom)

Ну тогда так:

ipdown=`/bin/cat /var/log/syslog/switches.log| grep "%LINK-W-Down" -с`
ipdown_full=`/bin/cat /var/log/syslog/switches.log| grep "%LINK-W-Down" | awk '{print $4,$6,$5}'| sort|uniq`
if [ "$ipdown" -ne "0" ]
then
    status="CRITICAL"
fi

И через sed в ipdown_full замени %LINK-W-Down на link down.

P.S. Это конечно всё на скорую руку, чтобы понятно было как и что делать.

7

sed разве сможет работать с переменными? или я не понял всей прелести sed ?

8

Конечно сможет, ведь sed работает со строками, а любую переменную можно превратить в строки командой echo "$переменная".

9

sed -i 's/oldstring/newstring/g'   $ipdown_full ? или не туда?