|
Я постараюсь розповісти про деякі хитрощі використання 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 :) |