Цель данного раздела научить Вас создавать свои собственные плагины для 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 это настоящая находка для вас. Можно завести свой личный блог на поддомене и писать туда свои басни :) Отличный форум, и девушки там отличные ..
Качественное устройство для усиления сигнала сотовой связи поможет вам избежать помех во время разговора и различных сбоев. Особо рекомендуется в местах с очень низким уровнем сигнала.

















