Навигация
Системное Администрирование Решения на открытых кодах Структура сети Компьютерные сети малых предприятий Сеть с централизованным управлением Управление с помощью групповых политик Организация почтового обслуживания Взаимодействие с глобальной сетью Безопасность Виртуализация Парядок настройки и определения неисправностей Средства управления системами Автоматизация установки программного обестичения Решение проблем с компьютером Разное
 
 
Избранное
Pathping. Traceroute на стероидах.
FreeNAS: создаём сетевое хранилище (NAS)
Iperf - утилита для тестирования пропускной способности сети.
Средство против «сетевой слепоты»
Преимущества и недостатки RAID 6
Дисковые массивы RAID
Надежнее, чем RAID 5
Унификация корпоративных коммуникаций
Exchange и SAN: не все так просто
Cisco против Meru
 
 
Разное - Создание собственных плагинов для Cacti

Цель данного раздела научить Вас создавать свои собственные плагины для 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 "" in
       start)
           start
           ;;
       stop)
           stop
           ;;
       status)
           status pop3.pl
           ;;
       restart)
           stop
           start
           ;;
       condrestart)
           if [ -f $LOCKFILE ]; then
               stop
               start
           fi
           ;;
       *)
           echo $"Usage: {full-story} {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».

Создание собственных плагинов для Cacti

Заполните поля: Раздел: 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

Создание собственных плагинов для Cacti

Нажмите «Save» и убедитесь, что Ваш шаблон данных «Data Templates» с именем «Get pop3 counter» присутствует в общем списке шаблонов.

Создание собственных плагинов для Cacti

Перейдите в пункт «Graph Templates»

Создание собственных плагинов для Cacti

и нажмите «Add».

Перед Вами откроется окно в котором Вам необходимо создать графический шаблон «Graph Templates» на основе только что созданного шаблона данных «Data Templates».

Создание собственных плагинов для Cacti

Заполните поля:

Раздел: Template Name: Dovecot counter

Раздел: Graph Template Title: Pop3 Session counter

Остальные поля оставьте в значениях «По умолчанию».

Нажмите «Create», откроется окно с дополнительными настройками создаваемого графического шаблона.

Создание собственных плагинов для Cacti

В разделе «Graph Template Items» нажмите «Add». В появившемся окне в меню «Data Source» выберите уже созданный шаблон данных «Data Templates» с именем «Get pop3 counter». В разделе «Color» выберите цвет создаваемого графика В разделе «Graph Item Type» укажите тип графика, «AREA» – значит закрашенная область. В разделе «Consolidation Function» выберите тип «AVERAGE». В разделе CDEF Function выберите «None».

Создание собственных плагинов для Cacti

Нажмите «Create»

Создание собственных плагинов для Cacti

  • Теперь нам необходимо назначить созданный графический шаблон «Graph Template» хосту с которого мы будем снимать информацию.

Перейдите в раздел «Devices».

Создание собственных плагинов для Cacti

Выберите Ваш почтовый сервер (Предполагается, что Вы уже добавили этот хост в Cacti).

Перейдите в раздел «Associated Graph Templates» и в выпадающем списке «Add Graph Template:» выберите «Dovecot counter» (т.е. То имя которое мы присвоили нашему графическому шаблону).

Создание собственных плагинов для Cacti

После этого наш графический шаблон должен быть в общем списке шаблонов присвоенных данному хосту.

Создание собственных плагинов для Cacti

Теперь нажмите ссылку «Create Graphs for this Host» в верхней части настроек хоста

Создание собственных плагинов для Cacti

В появившемся списке отметьте галочкой пункт «Dovecot counter»

Создание собственных плагинов для Cacti

Настройка закончена. Через некоторое время данные начнут отображаться на графике.

Создание собственных плагинов для Cacti

Создание собственных плагинов для Cacti




 
 
 
 
Поиск по сайту
Google Поиск


Яндекс поиск
 
 
Полезное
 
 
 
 
 
systemzone.ru 2014