Мониторинг при помощи Cacti

Cacti — это инструмент для мониторинга и графического мониторинга сети с открытым исходным кодом, разработанный в качестве внешнего приложения для инструмента RRDtool с открытым исходным кодом, стандартного для ведения данных . Cacti позволяет пользователю опросить службы с заданными интервалами и нарисовать полученные данные. Cacti обычно используется для сбора данных временных рядов показателей, таких как загрузка процессора и использование пропускной способности сети. Общее использование - мониторинг сетевого трафика путем опроса сетевого коммутатора или интерфейса маршрутизатора через протокол Simple Network Management Protocol (SNMP).

Установка Cacti и snmp на localhost. Файлы с описание установки находятся в /usr/share/doc/cacti для ОС Ubuntu.

# aptitude install cacti-spine
# aptitude install snmpd

Правим конфигурационный файл snmpd.conf (для настройки можно также использовать утилиту snmpconf)

# nano /etc/snmp/snmpd.conf
...
# Example output of snmpwalk:
#   % snmpwalk -v 1 -c public localhost system
#   system.sysDescr.0 = "SunOS name sun4c"
#   system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.sunos4
#   system.sysUpTime.0 = Timeticks: (595637548) 68 days, 22:32:55
#   system.sysContact.0 = "Me <me@somewhere.org>"
#   system.sysName.0 = "name"
#   system.sysLocation.0 = "Right here, right now."
#   system.sysServices.0 = 72

#       sec.name  source          community
#com2sec paranoid  default         public
com2sec readonly  localhost         public
#com2sec readwrite default         private
...
# /etc/init.d/snmpd restart

Проверяем. Делаем запрос к демону SNMP протокол управления сетью:

# snmpwalk -v 2c -c PASSWORD localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux keep 2.6.31-17-server #54-Ubuntu SMP Thu Dec 10 18:06:56 UTC 2009 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (1473) 0:00:14.73

Проверяем чтобы демон SNMP протокол управления сетью слушал только на localhost:

# netstat -a | grep -i snmp
udp        0      0 localhost:snmp          *:* 
# lsof -i:161
COMMAND   PID USER   FD   TYPE  DEVICE SIZE NODE NAME
snmpd   31994 snmp    7u  IPv4 8401896       UDP localhost:snmp
  • Замечание для Debian 5.02: Чтобы snmpd слушал на всех интерфейсах нужно отредактировать строку:
    # nano /etc/default/snmpd
    # snmpd options (use syslog, close stdin/out/err).
    #SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'
    SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'

Для отключения логирования snpmd в /var/log/messages нужно изменить строку запуска.

# nano /etc/sysconfig/snmpd
OPTIONS="-Lf /dev/null -p /var/run/snmpd.pid"

Эта строка полностью отключит логирование. Для того чтобы перенаправить лог в другой файл, можно сделать так. Добавить ключ -Ls0 и настроить local0:

# nano /etc/sysconfig/snmpd
SNMPDOPTS='-Ls0 -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'

# nano /etc/rsyslog.conf
local0.*                        -/var/log/snmpd.log
local0.* ~
  • Задать уровень логирования snmpd параметр -LS 0-4 такой вид позволит получать в лог только критические сообщения
#SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'
SNMPDOPTS='-LS 0 -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'

Настройка Cacti

Cacti запускается через cron (каждые 5 минут), в Ubuntu файл запуска находится здесь:

# cat /etc/cron.d/cacti 
MAILTO=root
*/5 * * * * www-data php /usr/share/cacti/site/poller.php >/dev/null 2>/var/log/cacti/poller-error.log

По умолчанию, для доступа к Web интрефейсу Cacti используется логин: admin password:admin

  1. Создание устройства (Devices). Выбор шаблона: В большинстве случаем шаблон "ucd/net SNMP Host".
  2. Создание графиков (Create graphs for this host). Нужные графики нужно отметить галочкой.
  3. Настроить дерево графиков (Graph Trees). Логически группирует графики.

P.S. Если после обновления запросов (зеленый кружок) будет показано сообщение "Success [0 Items, 0 Rows]", это говорит о том что данный запрос не подходит к данному хосту.

Для расширения возможности Cacti нужно установить поддержку плагинов Cacti Plugin Architecture.

  • Для FreeBSD 8.2 это будет выглядеть так (в портах версия cacti-0.8.7g.tar.gz):
> cd /usr/ports/net-mgmt/cacti
> make install

Cacti is now installed. If you intall it for the first time,
you may have to follow this steps to make it work correctly:

1. Create the MySQL database:
# mysqladmin --user=root create cacti
2. Create a mysql user/password for cacti:
   (change user and/or password if required)
# echo "GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactiuser'; FLUSH PRIVILEGES;" | mysql
3. Import the default cacti database:
# mysql cacti < /usr/local/share/cacti/cacti.sql
4. Edit /usr/local/share/cacti/include/config.php.
5. Add the line to cron jobs with the command:
# crontab -u cacti -e
*/5 * * * * /usr/local/bin/php /usr/local/share/cacti/poller.php > /dev/null 2>&1
6. Add alias in apache config for the cacti dir:
Alias /cacti "/usr/local/share/cacti/"
7. Be sure apache gives an access to the directory ('Allow from' keywords).
8. Open a cacti login page in your web browser and login with admin/admin.

If you update cacti, open a login page, an updating process
will start automatically.
> make clean
> cd /usr/ports/net-mgmt/cacti-spine
> make install clean
> wget http://mirror.cactiusers.org/downloads/plugins/cacti-plugin-0.8.7g-PA-v2.8.tar.gz
> tar -xvzf cacti-plugin-0.8.7g-PA-v2.8.tar.gz

Скопируем diff файл в рабочую директорию Cacti. Запустим в тестовом варианте с ключем –dry-run(для Linux), если ошибок нет можно применять diff.

> cp cacti-plugin-0.8.7g-PA-v2.8.diff /usr/local/share/cacti/
> patch -p1 -N --dry-run < cacti-plugin-0.8.7g-PA-v2.8.diff
> patch -p1 -N < cacti-plugin-0.8.7g-PA-v2.8.diff

Изменим БД Cacti импортируя в нее данные из файла pa.sql:

> mysql -u cactiuser -p cacti < pa.sql

Для включения Plugin Management, на странице User Management→ Realm Permissions→ поставить птичку напротив Plugin Management.

Ссылки

PQ VPS сервера в 28+ странах.