Цель данного раздела научить Вас создавать свои собственные плагины для Cacti, для примера возьмемся реализовать плагин осуществляющий графическое отображения количества pop3 сессий к почтовому серверу. Т.к. Pop3 сервером в большинстве современных дистрибутивов является Dovecot, то и анализировать мы будем его «логи».
Схема работы плагина будет выглядеть следующим образом: При запуске сервера будет стартовать скрипт который будет запускать парсер логов Dovecot. Данный парсер собирает данные о количестве подключений к Dovecot по протоколу pop3 и записывает эти данные в файл. Также необходимо будет внести изменения в файл конфигурации snmp для того чтобы Cacti мог получать данные о количестве подключений по стандартному протоколу SNMP.
Ниже приведенный скрипт который «парсит» лог файл Dovecot, создан на основе Perl скрипта написанного Jason Warnes для анализа логов Sendmail.
Создайте в каталоге /opt файл pop3.pl следующего содержания:
#!/usr/bin/perl$debug=1; $daemon=0; $syslog=1; $self="/opt/pop3.pl"; $counterfile="/opt/pop3_counter"; $resetfile="/opt/pop3_reset"; $pidfile="/var/run/pop3_watch.pid"; use Sys::Syslog; use POSIX; use Time::HiRes qw( gettimeofday tv_interval ); $|=1; my $sigset = POSIX::SigSet->new(); my $hupaction = POSIX::SigAction->new('hup_signal_handler', $sigset, &POSIX::SA_NODEFER); my $osigaction = POSIX::SigAction->new('signal_handler', $sigset, &POSIX::SA_NODEFER); POSIX::sigaction(&POSIX::SIGHUP, $hupaction); POSIX::sigaction(&POSIX::SIGINT, $osigaction); POSIX::sigaction(&POSIX::SIGTERM, $osigaction); if($daemon){ $pid=fork; if($pid) { open(PID,">".$pidfile) or die "Cannot open PID file: $!."; print PID ("$pid\n"); close(PID); } exit if $pid; die "Couldn't fork : $!" unless defined($pid); setsid() or die "Can't start a new session: $!"; $time_to_die=0; } sub signal_handler { $time_to_die=1; } sub hup_signal_handler { if($debug){print "got SIGHUP\n";} exec($self) or die "Couldn't restart: $!\n"; } if($syslog){openlog("pop3_log","pid","daemon");} if($syslog){syslog("notice","Starting.");} if($debug){print("pop3log is starting.\n");} # Main part of the program open(MAILLOG, "tail -n 0 -f /var/log/maillog|") or die "Cannot open maillog: $!."; while(!$time_to_die){ $line=<MAILLOG>; if($line=~/pop3-login:/){ $item="pop3"; &readcounterfile; $counter{$item}++; if($debug){print("Found pop3 login to $counter{$item}.\n");} &writecounterfile; } }close(SYSLOG); if($debug){print("pop3log is ending.\n");} if($syslog){syslog("notice","Ending.");} unlink($pidfile); # Subroutine to read the contents of the counter file sub readcounterfile { # Read the counter values from the file if($debug){print("Reading contents of counter file.\n");} open(COUNTER,$counterfile); while($line=<COUNTER>){ @line=split(/\:/,$line); chop($line[1]); # Drop the trailing LF off the value # Check for reset counter flag file if(-e $resetfile."_".$line[0]){ if($debug){print("Reset counter flag file found for counter $line[0], resetting counter value to 0.\n");} $counter{$line[0]}=0; unlink($resetfile."_".$line[0]); } else { $counter{$line[0]}=$line[1]; } if($debug){print("Counter $line[0] = $counter{$line[0]}.\n");} } close(COUNTER); } sub writecounterfile { if($debug){print("Writing counter values to counter file.\n");} open(COUNTER,">".$counterfile); # Write each counter item out to the counter file foreach $item (sort keys(%counter)) { print COUNTER ($item."\:".$counter{$item}."\n"); } close(COUNTER); chmod(0666,$counterfile); }
В каталоге /opt создайте файл snmp-pop3.pl следующего содержания: Данный файл считывает данные из файла созданного pop3.pl, создает файл pop3_reset по наличию которого pop3.pl производит обнуление счетчиков.
$counterfile="/opt/pop3_counter";$resetfile="/opt/pop3_reset"; $oid{"pop3"}=".1.3.6.1.4.100.1"; &readcounterfile; if($counter{$ARGV[0]}==""){$counter{$ARGV[0]}=0;} if(-e $resetfile."_".$ARGV[0]){$counter{$ARGV[0]}=0;} print "$oid{$ARGV[0]}\ngauge\n$counter{$ARGV[0]}\n"; &createresetflagfile; sub readcounterfile { open(COUNTER,$counterfile); while($line=<COUNTER>) { @line=split(/\:/,$line); chop($line[1]); # Drop the trailing LF off the value $counter{$line[0]}=$line[1]; } close(COUNTER); } sub createresetflagfile { open(RESET,">".$resetfile."_".$ARGV[0]); close(RESET); chmod(0666,$resetfile."_".$ARGV[0]); }
Теперь создадим стартовый скрипт который будет запускать pop3.pl при запуске сервера. В каталоге /etc/init.d создайте файл cactiwatcher следующего содержания:
# Startup script for cacti watcher# # chkconfig: 2345 95 05 # description: Run cacti watcher # pidfile: /var/run/pop3_watch.pid # prog="pop3_watch" PIDFILE=/var/run/${prog}.pid LOCKFILE=/var/lock/subsys/$prog start() { echo -n $"Starting $prog: " daemon /opt/pop3.pl RETVAL=$? if [ $RETVAL -ne 0 ]; then failure; fi; echo return $RETVAL } stop() { echo -n $"Stopping $prog: " if [ -f $PIDFILE ]; then killproc pop3.pl RETVAL=$? if [ $RETVAL -ne 0 ]; then failure; fi; else RETVAL=1 failure; fi echo return $RETVAL } case "$1" in start) start ;; stop) stop ;; status) status pop3.pl ;; restart) stop start ;; condrestart) if [ -f $LOCKFILE ]; then stop start fi ;; *) echo $"Usage: $0 {start|stop|restart|condrestart|status}" exit 1 esac exit $RETVAL
- Добавьте cactiwatcher в автоматический запуск.
chkconfig –add cactiwatcherchkconfig –level 3 cactiwatcher on
Осталось внести изменения в файл /etc/snmp/snmpd.conf для того чтобы Cacti мог получать данные о количестве pop3 сессий через стандартный протокол SNMP.
В файл /etc/snmp/snmpd.conf последней строкой добавьте следующую
pass .1.3.6.1.4.100.1 /opt/snmp-pop3.pl pop3
Перезапустите демон snmpd:
service snmpd restart
Дело осталось за малым. Зайдите в интерфейс cacti, перейдите в раздел «Data Templates» нажмите «Add».
Заполните поля: Раздел: Data Templates. Name: «Get pop3 counter» – имя шаблона данных.
Раздел: Data Source. Name: «Get pop3 counters» Data Input Method: Get SNMP Data
Раздел: Data Source Item Internal Data Source Name: pop3 Data Source Type: GAUGE
Нажмите «Save», откроется окно с дополнительными опциями «Custom Data» в котором в поле «OID» Вам необходимо ввести .1.3.6.1.4.100.1
Нажмите «Save» и убедитесь, что Ваш шаблон данных «Data Templates» с именем «Get pop3 counter» присутствует в общем списке шаблонов.
Перейдите в пункт «Graph Templates»
и нажмите «Add».
Перед Вами откроется окно в котором Вам необходимо создать графический шаблон «Graph Templates» на основе только что созданного шаблона данных «Data Templates».
Заполните поля:
Раздел: Template Name: Dovecot counter
Раздел: Graph Template Title: Pop3 Session counter
Остальные поля оставьте в значениях «По умолчанию».
Нажмите «Create», откроется окно с дополнительными настройками создаваемого графического шаблона.
В разделе «Graph Template Items» нажмите «Add». В появившемся окне в меню «Data Source» выберите уже созданный шаблон данных «Data Templates» с именем «Get pop3 counter». В разделе «Color» выберите цвет создаваемого графика В разделе «Graph Item Type» укажите тип графика, «AREA» – значит закрашенная область. В разделе «Consolidation Function» выберите тип «AVERAGE». В разделе CDEF Function выберите «None».
Нажмите «Create»
- Теперь нам необходимо назначить созданный графический шаблон «Graph Template» хосту с которого мы будем снимать информацию.
Перейдите в раздел «Devices».
Выберите Ваш почтовый сервер (Предполагается, что Вы уже добавили этот хост в Cacti).
Перейдите в раздел «Associated Graph Templates» и в выпадающем списке «Add Graph Template:» выберите «Dovecot counter» (т.е. То имя которое мы присвоили нашему графическому шаблону).
После этого наш графический шаблон должен быть в общем списке шаблонов присвоенных данному хосту.
Теперь нажмите ссылку «Create Graphs for this Host» в верхней части настроек хоста
В появившемся списке отметьте галочкой пункт «Dovecot counter»
Настройка закончена. Через некоторое время данные начнут отображаться на графике.
Автор: Денис Фролов
Постовой
Если вам хоть в какой то степени интересна такая тема, как рыбалка, тогда портал www.rybalka.com это настоящая находка для вас. Можно завести свой личный блог на поддомене и писать туда свои басни :) Отличный форум, и девушки там отличные ..
Качественное устройство для усиления сигнала сотовой связи поможет вам избежать помех во время разговора и различных сбоев. Особо рекомендуется в местах с очень низким уровнем сигнала.