Cacti ver 1.1 20.06.2007

Введение

Вы можете сказать среднюю загрузку ЦП на Вашем сервере ?

Вы можете сказать на сколько процентов увеличилась средняя загрузка памяти на Вашем сервере за последние 3 месяца?

Вы знаете сколько DNS запросов приходит на Ваш сервер или Вы сможете сказать на сколько процентов увеличилось количество спама приходящего на Ваш почтовый сервер за последние пол года ?

Можете ли Вы точно сказать среднюю нагрузку на сеть в рабочие часы?

Если Ваш ответ на некоторые из этих вопросов «Нет» а Вы хотите чтобы ответом было «Да », тогда данная статья для Вас, в ней предпринята попытка наиболее подробно описать процесс установки и настройки одного из средств мониторинга под названием Cacti.

Cacti – позволяет снимать учетные данные с любого сетевого устройства по протоколу SNMP (при учете, что оборудование умеет работать с данным протоколом).

Из наиболее важных преимуществ Cacti по сравнению со своими более простыми собратьями типа Mrtg, можно отметить прекрасный WEB интерфейс, отличную расширяемость за счет написания простых модулей реализующих необходимый дополнительный функционал, наличие готовых шаблонов для различного сетевого оборудования и т. д., но стоит отметить и несколько проблем о которых нельзя не упомянуть, первоначальная установка и настройка Cacti требует от системного администратора больше времени и терпения чем установка того же Mrtg, также для своей работы Cacti необходимо наличие MySQL, PHP, RRDTool на сервере где он будет установлен.

Вот так схематично выглядит схема работы Cacti:

Есть парк сетевого оборудования, которое умеет работать с протоколом SNMP (управляемые свичи, маршрутизаторы, рабочие станции и сервера под управлением ОС Unix, Linux, Windows и т. д.), сервером с установленным на него Cacti с данного оборудования периодически снимаются необходимые данные. Определенному кругу машин в сети разрешено заходить на этот сервер и просматривать собранные данные в Cacti с помощью WEB интерфейса.

Вот несколько из примеров графиков которые можно получить с помощью Cacti.

С момента написания первой версии данной статьи многое изменилось в лучшую сторону, а именно пакет Cacti теперь входит в состав обновлений для дистрибутива ASPLinux Server 4, что позволяет пользователям этой ОС установить его штатными средствами при помощи yum.

В данной статье предполагается, что Вы используете одну из ниже перечисленных ОС (ASP Linux Server 4, Fedora Core 3-6 , Fedora 7, CentOS, Yumex и др.).

Установка

Предполагается, что установка выполняется из под привилегированного пользователя root.

ASP Linux Server 4

Убедитесь, что у Вас установлен yum:

rpm -q yum

Убедитесь что репозиторий обновлений включен просмотрите содержимое файла /etc/yum.repos.d/asplinux-updates.repo оно должно быть следующим:

 [updates]
 name=ASPLinux $releasever - $basearch - Updates
 baseurl= 

Дайте команду установить cacti :

yum install cacti

Вы должны увидеть примерно следующее:

 # yum install cacti
 Setting up Install Process
 Setting up repositories
 updates                   100% |=========================| 1.2 kB    00:00
 Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for cacti to pack into transaction set.
cacti-0.8.6j-1.101asp.noarch 100% |=========================|  53 kB    00:00
---> Package cacti.noarch 0:0.8.6j-1.101asp set to be updated
--//--
Dependencies Resolved
=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 cacti                   noarch     0.8.6j-1.101asp     updates        1.1 M
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 1.1 M
Is this ok [y/N]:

нажмите 'y' и начнется процесс установки.

Fedora Core 3-6

В данных дистрибутивах пакет Cacti содержится в дополнительном репозитории extras который включен по умолчанию.

Процесс установки Cacti аналогичен установке ASP Linux Server 4 т. е. Просто наберите:

yum install cacti

CentOS, Yumex,Scientific Linux и прочие клоны RHEL

Для установки Вам потребуется настроить yum для работы с репозиторием Dag Wieers. Вам необходимо создать файл /etc/yum.repos.d/dag.repo следующего содержания для дистрибутивов основанных на RHEL4 :

  1. Name: RPMforge RPM Repository for Red Hat Enterprise 4 - dag
  2. URL: http://rpmforge.net/

[rpmforge]
name = Red Hat Enterprise $releasever - RPMforge.net - dag
#baseurl =
mirrorlist =
enabled = 1
gpgcheck = 0

и такого содержания для дистрибутивов основанных на RHEL5:

# Name: RPMforge RPM Repository for Red Hat Enterprise 5 - dag
# URL:
[rpmforge]
name = Red Hat Enterprise $releasever - RPMforge.net - dag
#baseurl =
mirrorlist =
enabled = 1
gpgcheck = 0

После этого выполните: yum install cacti

Первоначальная настройка Cacti

Настройка MySQL

Cacti для своей работы требует установленного сервера Mysql.

Проверьте установлен ли у Вас в системе пакет mysql-server выполнив команду:

rpm -q mysql-server

Если данный пакет у Вас с системе не установлен его можно установить при помощи yum выполнив:

yum install mysql-server

Запустите сервер Mysql командой

service mysqld start

Войдите в интерфейс управления (MySQL Monitor) командой

mysql

Вы должны увидеть такое приглашение:

mysql>

Создайте новую базу данных с именем cacti командой:

 create database cacti;

Выйдите из MySQL Monitor набрав \q.

В состав пакета Cacti входит скрипт позволяющий автоматически создать все необходимые таблицы в БД для работы.

Выполните:

mysql cacti </usr/share/doc/cacti-0.8.6j/cacti.sql

Вновь войдите в интерфейс управления MySQL командой

mysql cacti

И выполните команду

mysql> show tables;

Если в ответ на данную команду вы увидите следующий список таблиц в БД:

+---------------------------+
| Tables_in_cacti           |
+---------------------------+
| cdef                      |
| cdef_items                |
| colors                    |
| data_input                |
| data_input_data           |
| data_input_fields         |
| data_local                |
| data_template             |
| и так далее              |
+---------------------------+
48 rows in set (0.00 sec)

то Вы все сделали верно, таблицы в БД созданы и можно двигаться дальше.

Теперь нам необходимо дать права созданную нами БД пользователю под которым cacti будет подключаться к серверу.

Для этого в интерфейсе управления MySQL выполните:

grant all on cacti.* to username@localhost identified by 'password';

Тем самым мы дали все права на базу cacti пользователю username доступ которому разрешен только с хоста 127.0.0.1, и установили этому пользователю пароль 'password'.

Для применения назначенных прав на базу вы должны выполнить инструкцию:

flush privileges;

Теперь вы можете выйти из MySQL Monitor.

Проверьте, что сервер MySQL включен в автоматический запуск:

chkconfig --list mysqld

Вывод команды будет примерно следующим:

mysqld          0:выкл  1:выкл  2:выкл  3:выкл  4:выкл  5:выкл  6:выкл

Если Вы работаете на 3 уровне запуска системы (что является обычным для сервера) добавьте запуск MySQL на этом уровне:

chkconfig --level 3 mysqld on

Настройка Cacti

Перейдите в каталог /etc/cacti и отредактируйте файл db.php прописав в нем корректное имя пользователя и пароль для доступа в БД MySQL.

<?php
/* make sure these values refect your actual database/host/user/password */
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cacti";
$database_password = "password";
$database_port = "3306";
?>

Настройка WEB сервера Apache

Cacti для своей работы требует установленного сервера Apache.

Проверьте установлен ли у Вас в системе пакет httpd выполнив команду:

rpm -q httpd

Если данный пакет у Вас с системе не установлен его можно установить при помощи yum выполнив:

yum install httpd

Перейдите в каталог /etc/httpd/conf.d и отредактируйте файл cacti.conf добавив строку Allow from <ip адрес>

Где <ip адрес> хоста которому разрешено подключаться к Cacti.

Т.е. файл cacti.conf может выглядеть следующим образом:

Alias /cacti    /usr/share/cacti
<Directory /usr/share/cacti/>
       Order Deny,Allow
       Deny from all
       Allow from 127.0.0.1
       Allow from 10.0.0.1
</Directory>

Запустите сервис httpd командой:

service httpd start

Добавьте сервис httpd в автоматический запуск на Вашем уровне (в примере 3) запуска системы:

chkconfig --level 3 httpd on

Периодический запуск с помощью Cron

Cacti снимает данные со всех клиентских устройств с помощью php скрипта который запускается с помощью системного планировщика cron каждые 5 минут, т.е. для корректной работы Cacti Вам необходимо проверить запущен ли демон crond в системе.

chkconfig --list crond

как мы видим crond стартует на нашем текущем (3) уровне запуска.

crond           0:выкл  1:выкл  2:вкл   3:вкл   4:вкл   5:вкл   6:выкл

осталось проверить запущен ли демон crond в данный момент:

 ps ax|grep crond

Если Вы увидели что-то подобное, то это обозначает, что демон работает в данный момент.

2083 ?        Ss     0:00 crond

Проверка работоспособности

Запустите любой броузер и в строке адреса наберите http://<ip адрес>/cacti/

Где вместо <ip адрес> напишите ip адрес, либо доменное имя машины на которой Вы установили Cacti.

В том случае если Вы все настроили верно в окне броузера Вы должны увидеть следующее:

Нажмите Next

Убедитесь, что выбран пункт «New Install» и нажмите Next

В следующем окне Вам предложат ввести пути до утилит которые Cacti использует в своей работе, оставьте данные в этих полях по умолчанию и нажмите Finish.

Первоначальная настройка Cacti закончена. В следующем окне Вам предложат ввести имя пользователя и пароль для администрирования Cacti. Введите имя пользователя admin пароль admin.

Вам сразу же предложат сменить пароль администратора, в следующем окне введите новый пароль и его подтверждение.

Сразу после задания нового пароля Вы попадете в интерфейс управления Cacti.

Настройка SNMP клиентов

Cisco

Для настройки SNMP выполните вход на маршрутизатор под пользователем, перейдите в привилегированный режим «enable», затем выполните:

#conf t
(config)#access-list 555 permit <ip адрес>
(config)#access-list 555 deny any
(config)#snmp-server community public RO 555
(config)#exit
#write memory
#exit

Где <ip адрес> - это адрес машины с установленным пакетом Cacti.

Linux/Unix

Убедитесь, что на Linux машине установлен пакет net-snmp:

rpm -q net-snmp

Если данный пакет не установлен, то Вам следует установить его:

yum install net-snmp

Перейдите в каталог /etc/snmp/ внесите изменения в файл snmp.conf Он должен выглядеть следующим образом:

syslocation Test.
syscontact INF <mail@test.ru>
#      sec.name   source          community (password)
com2sec Mybox     localhost          public
com2sec cacti     <ip адрес>     public
com2sec Outside   default            public
#      group.name sec.model  sec.name
group   RWGroup    v2c       Mybox
group   ROGroup    v1        cacti
group   ROGroup    v2c       cacti
group   Others     v2c       Outside
view all     included  .1        80
view system  included  system    fe
#              context sec.model sec.level prefix  read    write  notif
access  ROGroup   ""      any    noauth    exact   all     none   none
access  RWGroup   ""      v2c    noauth    exact   all     all    all
access  Others    ""      v2c    noauth    exact   system  none   all

Где вместо <ip адрес> поставьте ip адрес машины с установленным пакетом Cacti.

Затем выполняем команду:

service snmpd start

Добавьте сервис snmpd в автоматический запуск на Вашем уровне (в примере 3) запуска системы:

chkconfig --level 3 smnpd on

Добавление данных в Cacti

Добавление хоста Cisco

Перейдите в пункт 'Devices' с левой части экрана.

Нажмите кнопку ADD для добавления нового устройства. В появившемся окне

Заполните поля следующим образом:

Description – Описание маршрутизатора/коммутатора , например Cisco XXX. Hostname – IP адрес маршрутизатора/коммутатора. Host Template – В ниспадающем меню выберите пункт «Cisco Router». Блок параметров SNMP – Введите имя SNMP Community, Username, Password, Version, SNMP Port – подробнее о настройке смотрите пункт данной статьи «Настройка SNMP клиентов» - «Cisco». После заполнения всех необходимых параметров нажмите «Create».

Перед вами открылось окно с настройками хоста.

В верхней части экрана показана информация которую Cacti смогла снять по SNMP, в случае если Вы не настроили соответствующим образом оборудование или указали неверные параметры SNMP в настройках устройства, то Cacti должна выдать сообщение SNMP Error.

Проверьте на данной странице, что в разделе «Associated Graph Templates» уже добавлен пункт «Cisco - CPU Usage» и в разделе «Associated Data Queries» добавлен пункт «SNMP - Interface Statistics» - дело в том, что выбирая готовый шаблон «Cisco Router» для хоста Вы автоматически добавили необходимые нам для отображения данные.

<<<cacti15.png>>

В появившемся окне выберите пункты меню данные которых Вас интересуют в графическом представлении (загрузка CPU, сетевые интерфейсы).

После Выбора необходимых пунктов нажмите «Create».

В появившемся окне Вам предлагают Выбрать Цвет графика отображающего загрузку CPU, после выбора необходимого Вам цвета нажмите «Create».

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

Теперь Нам осталось создать графики. Дело в том, что в Cacti все графические данные представляются в виде «дерева». По умолчанию создано одно дерево с именем «Default Tree», Вы можете создавать свои графические деревья таким образом группируя по каким-нибудь признакам группы хостов. В данном примере Мы с Вами добавим вновь созданный хост Cisco в дерево по умолчанию «Default Tree». Перейдите в пункт «Graph Trees» в левой части экрана. В появившемся окне выберите «Default Tree».

В меню «Tree Items» нажмите «Add».

В «Parent Item» оставьте «root» В «Tree Item Type» выберите значение «Host» В «Host» выберите то имя которое Вы присвоили вашему устройству Cisco. После заполнения всех полей нажмите «Create».

добавили все необходимые данные теперь Вам нужно выждать несколько запусков пулера Cacti (он стартует через cron с интервалом в 5 минут) чтобы на графиках появились первые данные.

Добавление хоста Linux/Unix

Перейдите в пункт «Devices» в левой части экрана.

Нажмите «Add» для добавления нового хоста. В появившемся окне заполните поля следующим образом: Description – Описание сервера. Hostname – IP адрес, дибо доменное имя хоста. Host Template – оставьте значение данного параметра в «None». Также заполните раздел «SNMP Options» в соответствии с настройками которые Вы сделали на контролируемом сервере, правильно заполните поля SNMP Community, SNMP Version,SNMP Port и т.д.

После заполнения всех необходимых параметров нажмите «Create». Откроется окно с установками вновь созданного хоста.

Перейдите в нижнюю часть экрана, там находится 2 раздела «Associated Graph Templates» и «Associated Data Queries»

Вам необходимо добавить в раздел «Associated Graph Templates» 3 шаблона «ucd/net - CPU Usage», «ucd/net - Load Average», «ucd/net - Load Average», а в раздел «Associated Data Queries» добавить «SNMP - Interface Statistics» и «SNMP - Get Mounted Partitions».

Теперь выберите пункт «Create Graphs for this Host» сверху страницы, и в появившемся окне выберите необходимые данные для графического отображения.

После нажатие на кнопку «Create» необходимые данные будут добавлены.

Теперь перейдите в пункт меню «Graph Trees», выберите дерево по умолчанию «Default Tree», нажмите кнопку «ADD».

В появившемся меню

В «Parent Item» оставьте «root» В «Tree Item Type» выберите значение «Host» В «Host» выберите то имя которое Вы присвоили вашему хосту. После заполнения всех полей нажмите «Create».

Все графики созданы и размещены.

Для просмотра графических данных перейдите в меню «Graphs» в верхней части экрана и выберите созданный хост.

Добавление дополнительных плагинов для Cacti

Предполагается, что Сacti уже настроен и функционирует в Вашей сети, все приведенные ниже плагины были проверенны на работоспособность под OS CentOS 4.4, также подразумевается, что Cacti работает на отдельной машине в сети и собирает данные со всех хостов по протоколу SNMP.

Статистика работы DNS сервера BIND.

Предположим, что у Вас в сети уже настроен и функционирует DNS сервер Bind, и Вам как системному администратору хотелось бы получать данные о том, сколько DNS запросов он обслуживает в данный момент. Для решения данной задачи воспользуемся плагином BIND 9 Statistics Template.

Также подразумевается, что DNS сервер BIND работает в chroot среде.

Настройка BIND

Для корректной работы данного плагина понадобится внести изменения в конфигурационный файл Bind по умолчанию он находится в каталоге /var/named/chroot/etc/.

В секцию options добавьте 2 строки:

zone-statistics yes;
statistics-file "/var/tmp/named.stats";

т. е. полностью секция options может выглядеть примерно так:

options {
 directory "/var/named";
 query-source address * port 53;
 max-cache-size         134217728;
 version "My DNS Server";
 allow-recursion { my_net; };
 zone-statistics yes;
 recursive-clients 500;
 statistics-file "/var/tmp/named.stats";
};

После внесения изменений в конфигурационный файл выполните перезагрузку DNS сервера командой:

service named restart

Либо просто скажите Named перечитать свой конфигурационный файл командой:

rndc reload

Настройка скриптов

Скачайте набор скриптов и графический шаблон по адресу http://uversaconsulting.net/download/bind9-stats-1.0.tar.gz .

Распакуйте архив:

tar -zxvf bind9-stats-1.0.tar.gz

Данные развернутся в каталог bind9-stats в текущем каталоге, в котором в свою очередь находится 2 каталога local и snmp. Для дальнейшей настройки Нам понадобится 2 скрипта bind9-genstats.sh который находится в каталоге bind9-stats и bind9-stats-snmpd.pl из каталога snmp.

На DNS сервере создайте каталог /var/named/chroot/cacti_script

mkdir /var/named/chroot/cacti_script

перенесите в него 2 файла bind9-genstats.sh и bind9-stats-snmpd.pl.

Внесите следующие изменения в файл bind9-genstats.sh:

STAT_FILE=/var/named/chroot/var/tmp/named.stats

вместо

STAT_FILE=/var/cache/bind/named.stats

Внесите следующие изменения в файл bind9-stats-snmpd.pl:

$STAT_FILE = "/var/named/chroot/var/tmp/named.stats"

вместо

$STAT_FILE = "/var/cache/bind/named.stats";

Теперь необходимо внести изменение в конфигурацию демона CRON. Создайте новый файл задания для cron:

touch /etc/cron.d/bind

Следующего содержания:

*/5 * * * * root /var/named/chroot/cacti_script/bind9-genstats.sh

Настройка SNMP

Внесите изменение в конфигурацию snmp т. е. в файл /etc/snmp/snmp.conf добавьте строку

pass .1.3.6.1.4.1.2021.55 /usr/bin/perl /var/named/chroot/var/named/cacti_script/bind9-stats-snmpd.pl

Перезапустите snmp командой:

service snmpd restart

Настройка Cacti

Перейдите в раздел «Import Templates» и импортируйте графический шаблон

Перейдите в секцию «Devices» выберите хост на котором мы настраивали плагин для DNS сервера.

В секции «Associated Data Queries» добавьте BIND 9 Statistics (SNMP)

Перейдите в раздел «Create Graphs for this Host» и поставьте галочку напротив Data Query [BIND 9 Statistics (SNMP)].

Результат работы плагина

Статистика времени отклика HTTP сервера.

Настройка плагина

Скачайте скрипт http://forums.cacti.net/download.php?id=4092

Графический шаблон времени отклика по TCP http://forums.cacti.net/download.php?id=4094

Графический шаблон времени отклика HTTP http://forums.cacti.net/download.php?id=4095

На том сервере, где работает Сacti разверните полученный архив:

unzip -x scripts.zip

Распакуется 2 файла http_response_time.pl и tcp_response_time.pl.

Данные файлы Вам необходимо положить в каталог /Путь_до_cacti/script

По умолчанию Cacti устанавливается в каталог /usr/share/cacti т. е.

cp  http_response_time.pl /usr/share/cacti/script
cp  tcp_response_time.pl /usr/share/cacti/script
chmod +x  http_response_time.pl  tcp_response_time.pl

Настройка Cacti

Перейдите в раздел «Import Templates» и импортируйте графический шаблон

Перейдите в секцию «Devices» выберите хост для которого Вы хотите контролировать время отклика HTTP.

В секции "Associated Graph Templates" добавьте шаблон "HTTP Response Time"

Перейдите в раздел "Create Graphs for this Host" выберите необходимый график.

Результат работы плагина

Статистика количества соединений по протоколам FTP,SMB,HTTP,TELNET,SSH.

Настройка плагина

Скачайте плагин http://forums.cacti.net/download.php?id=2777 и дополнение к нему http://forums.cacti.net/download.php?id=4101 .

Распакуйте полученные архивы:

unzip -x active_tcp_conns.zip
unzip -x active_http_connections.zip

Файл tcp_conns.sh скопируйте в каталог /Путь_до_cacti/script

Настройка Cacti

Загрузите в Cacti графические шаблоны

cacti_graph_template_snmp_active_http_connections.xml

graph_active_ftp_conns.xml

graph_active_samba_conns.xml

graph_active_ssh_conns.xml

graph_active_telnet_conns.xml

В настройках хоста для которого необходим контроль активных соединений добавьте данные шаблоны и создайте соответствующие графики.

Результат работы плагина

Создание собственных плагинов для 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 "$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

chkconfig –add  cactiwatcher
chkconfig –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»

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

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

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

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

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

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

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

Полезные ссылки

Обзор программ работающих на основе RRDTool

Cacti для нестандартных объектов (Андрей Бородийчук)

Пишем скрипты для Cacti (monitor script cacti)

Автор: Фролов Денис.

Articles/DenisFrolov/CactiConfiguration (last edited 2008-05-19 09:12:00 by DenisFrolov)