Linux. CentOS 7 + Observium. Мониторим все, что можем по SNMP

Одним прекрасным днем мы столкнулись с проблемами мониторинга активного оборудования нашей сети. Проблема данная крылась в потере пакетов от одной подсети до другой. Промежуточными узлами стояли не особо умные, но и не особо глупые коммутаторы DES-1210-28P, которые могли управляться только через Web интерфейс. В целях мониторинга всего этого зоопарка решили поставить и протестировать Observium — систему мониторинга оборудования по SNMP.

Начнем с того, что ставим CentOS в минимальной конфигурации. Сразу после запуска редактируем файл /etc/sysconfig/network-scripts/ifcfg-ens32 в него нужно добавить строчки конфигурации стандартного сетевого адаптера ens32:

ONBOOT=yes
IPADDR0=10.11.0.22
PREFIX0=24
GATEWAY0=10.11.0.254
DNS1=10.1.0.1
DNS2=10.2.0.2
DNS3=10.11.0.1
DOMAIN=your.domain.loc

Далее добавляем репозитории EPEL и RPM Forge

# yum install -y wget
# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
# rpm -ivh epel-release-7-5.noarch.rpm
# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
# rpm -Uvh rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
# wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
# rpm --import RPM-GPG-KEY.dag.txt

Далее ставим необходимые для Observium пакеты:

# yum install httpd php php-mysql php-gd php-posix php-mcrypt php-pear php-pear.noarch \
vixie-cron net-snmp net-snmp-utils fping mariadb-server mysql MySQL-python rrdtool subversion \
jwhois ipmitool graphviz ImageMagick libvirt

Сразу же настраиваем SQL сервер:

# systemctl start mariadb.service
# mysql_secure_installation
# mysql -u root -p

Далее создаем базу данных и пользователя для Observium:

CREATE DATABASE observium DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON observium.* TO 'observium'@'localhost'
IDENTIFIED BY 'ПАРОЛЬ_ДЛЯ_OBSERVIUMDB';

Добавляем Apache в автозагрузку командой:

# systemctl enable httpd.service

Для настройки виртуальных хостов Apache редактируем файл /etc/httpd/conf.d/0Default.conf, в который добавляем следующие строки:

<VirtualHost *:80>
 DocumentRoot /opt/observium/html/
 ServerName default
 CustomLog /opt/observium/logs/access_log combined
 ErrorLog /opt/observium/logs/error_log
 <Directory "/opt/observium/html/">
 AllowOverride All
 Options FollowSymLinks MultiViews
 Require all granted
 </Directory>
 DirectoryIndex index.php
</VirtualHost>

Рестартуем Apache, чтобы он загрузил дефолтную конфигурацию:

# service httpd restart

Добавляем http и https траффик в исключения фаерволла:

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --reload

Немного исправляем конфигурацию SELinux в файле /etc/selinux/config:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Итак, подготовка закончена. Осталось только скачать сам Observium и сделать его первоначальную настройку.
Скачиваем сам Observium (я качал комьюнити версию, т.к. подписка не оформлена)

wget http://www.observium.org/observium-community-latest.tar.gz
tar zxvf observium-community-latest.tar.gz && rm observium-community-latest.tar.gz
mkdir /opt/observium/rrd
mkdir /opt/observium/logs
# chmod apache:apache /opt/observium -R

На всякий случай оставляем копию файла конфигурации:

cp config.php.default config.php

У меня получился такой config.php

<?php

## Have a look in includes/defaults.inc.php for examples of settings you can set here. DO NOT EDIT defaults.inc.php!

// Database config
$config['db_host'] = '127.0.0.1';
$config['db_user'] = 'observium';
$config['db_pass'] = 'pass_for_db';
$config['db_name'] = 'observium';
$config['fping'] = "/usr/sbin/fping";

// Base directory
$config['install_dir'] = "/opt/observium";

// Default community list to use when adding/discovering
$config['snmp']['community'] = array("public");

// Authentication Model
$config['auth_mechanism'] = "mysql";    // default, other options: ldap, http-auth, please see documentation for config help

// Enable alerter (not available in CE)
#$config['poller-wrapper']['alerter'] = TRUE;
$config['poller_modules']['unix-agent']                   = 1;

// Set up a default alerter (email to a single address)
$config['alerts']['alerter']['default']['descr']   = "Default Email Alert";
$config['alerts']['alerter']['default']['type']    = "email";
$config['alerts']['alerter']['default']['contact'] = "you@yourdomain.org";
$config['alerts']['alerter']['default']['enable']  = TRUE;

//AutoDiscovery
$config['mydomain']              = "you.domain.loc";
$config['autodiscovery']['ip_nets']        = array("10.11.100.0/24", "10.11.101.0/24");
$config['autodiscovery']['xdp']            = TRUE;
$config['autodiscovery']['ospf']           = TRUE;
$config['autodiscovery']['bgp']            = TRUE;
$config['autodiscovery']['libvirt']        = TRUE;
$config['autodiscovery']['snmpscan']       = TRUE;

// End config.php

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

php includes/update/update.php

Создаем первого пользователя Observium и делаем его администратором:

cd /opt/observium
./adduser.php   

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

./add_device.php   v2c
./discovery.php -h all
 ./poller.php -h all

Следует учесть, что устройства добавляются только по имени, но не по ip!

Чтобы Observium периодически собирал данные с добавленных устройств и находил новые нужно создать файл /etc/cron.d/observium и добавить в него:

33  */6   * * *   root    /opt/observium/discovery.php -h all >> /dev/null 2>&1
*/5 *      * * *   root    /opt/observium/discovery.php -h new >> /dev/null 2>&1
*/5 *      * * *   root    /opt/observium/poller-wrapper.py 2 >> /dev/null 2>&1

После всего проделанного лучше перезапустить сервер и проверить его работоспособность. Вот вроде и все!

Вам понравиться