Деякі хитрощі з SNMP PDF Друкувати Електронна адреса
Написав Vitaliy Zhhuta   
Субота, 11 квітня 2009 21:07

Я постараюсь розповісти про деякі хитрощі використання SNMP. Думаю всі знаю що собою являє snmp і в розяснея роботи цього протоколу я вдаватись не буде, якщо когось цікавить go to wikipedia :) Отож розглянем на прикладі приклад:

Використовуючи nagios для моніторигну mail-servers, я стикнувся з проблемо, як моніторити чергу повідомлень. Ніби є готове рішення, скрипт який зпускається через nrpe і видає кількість повідомлень в черзі. Ви скажете "а не простіше  /usr/local/sbin/exim -bpc ?"(для інший мейлерів інша команда ) так ви праві. Ось і використовуючи цю команду я взнаю яка черга на мому mail-server'i, але як про це має дізнатись nagios? і визначити яка черга я достатньо велико (warninngs)  або занадто (critical)? Ось тут і вдаємся за допомогою до snmpd. Я думаю що ви вкурсі що в snmp є зарезервовані OIDs спеціально для ваших потреб? Ні? Так от вони є і чекають вас щоб ви ними скористались.Суть полягає в тому що ви можете  попросити snmpd виконати для вас якусь команду чи скрипт, а результат роботи повернеться в OIDs.

 

Для прикладу скрипт:

 #!/usr/bin/sh
 echo 'test'
  

 
повернет нам стрічку test

 

Скрип може повретати дві і більше лінійок :) кожну лінійку в спецефічний OID

Тепер попросим snmpd його виконати

 

 
#vi /etc/snmpd.conf (можливо він у вас в іншому місці) 
rocommunity [name of comunity] [ip of allow host  ]
syslocation UA
syscontact Sysadmin (zhhuta@******.**)
syscontact  zhhuta@******.**
exec /home/zhhuta/test.sh [додаєм цю стрічу]
 

 

Формат стрічки такий exec [OIDs] [comand] [ARGs]

я не вказав OIDs --тому що я буду використовувати ті котрі для мене зарезервонвані

тепер перезапускаєм snmpd

 
#/etc/init.d/snmpd stop
#/etc/init.d/snmpd start
 

і тестуєм

 #snmpwalk -v 2c -c public host .1.3.6.1.4.1.2021.8.1.101.1
UCD-SNMP-MIB::extOutput.1 = STRING:  test  

.1.3.6.1.4.1.2021.8 --- ось цей номер OIDa зарезервований для вас, можете зробити  snmpwalk для такого OIDa і все самі зрозумієте

щоб отримати тілки ті дані які повертає скрипт скористажтесь OIDом  виводу

.1.3.6.1.4.1.2021.8.1.101.1 вивід

.1.3.6.1.4.1.2021.8.1.101.2

.1.3.6.1.4.1.2021.8.1.101.3

і т.д в залежності скілки лінійок повертає ваш скрипт

обробляти виводи можна як за допомогою snmpget або власного perl скрипта

 

 #!/usr/bin/perl
 use Net::SNMP;
($session,$error) = Net::SNMP->session(Hostname = $ARGV[0], Community = $ARGV[1]);
			die "session error: $error" unless ($session);
$result = $session->get_request(".1.3.6.1.4.1.2021.8.1.101.1");
			die "request error: ".$session->error unless (defined $result);
$session->close;
print "Rerutn of our scripts: ".$result->{".1.3.6.1.4.1.2021.8.1.101.1"}."\n";

Отож ми навчились запускати скрипт через snmp на відаленому копютері. Круто?

 

Ну а далі ваш політ фантазії :)

В закінчення: я написав власний скрипт для обробки значень OIDs і інформування nagios'a але це вже інша історія про nagios і embeded-perl :)  

 

Останнє оновлення на Понеділок, 15 лютого 2010 20:54
 
 

Опитування

Який грaфічний Інтерфес ви використовуєте