Базовое развёртывание системы мониторинга Observium

В очередной раз задался вопросом мониторинга и на этот раз решил попробовать Observium в редакции Community Edition. Почему именно Observium? Если посмотреть документацию, то Observium поддерживает большое количество вендоров программного и аппаратного обеспечения, то есть в нем уже есть шаблоны мониторинга массы конкретных моделей оборудования. Имеется адекватная документация по продукту и, честно говоря, мне очень понравился внешний вид дизайна веб-консоли управления. Кстати, можно пройти по ссылке http://demo.observium.org/ и посмотреть как это выглядит «вживую».

Развёртывание Observium

Observium будем устанавливать на Ubuntu 16.04 LTS. Оригинальную документацию по установке на эту ОС можно найти по ссылке Debian/Ubuntu Installation.

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

sudo apt install libapache2-mod-php7.0 php7.0-cli php7.0-mysql php7.0-mysqli php7.0-gd php7.0-mcrypt php7.0-json php-pear snmp fping mysql-server mysql-client python-mysqldb rrdtool subversion whois mtr-tiny ipmitool graphviz imagemagick apache2

Устанавливаем пакет libvirt-bin:

sudo apt install libvirt-bin

Цитата из документации по поводу необходимости этого пакета:

If you want to be able to monitor libvirt virtual machines, install libvirt-bin (beware: this pulls in a whole bunch of dependencies you otherwise probably wouldn’t need on your server)

***

Создаем директории, в которых будут располагаться файлы Observium:

sudo mkdir -p /opt/observium && cd /opt

Как я писал ранее, я устанавливаю версию Community Edition, и поэтому я скачаю архив в названии которого фигурирует слово «community«:

sudo wget http://www.observium.org/observium-community-latest.tar.gz
sudo tar zxvf observium-community-latest.tar.gz

Переходим в папку с конфигурационными файлами и создаем конфигурационный файл копированием скопировав .default-файл:

cd ./observium
sudo cp config.php.default config.php

Открываем файл config.php и редактируем настройки MySQL — username, password и dbname

sudo vim  ./config.php

***

Заходим в контекст MySQL:

mysql -u root -p

Первой командой создаём базу данных с именем observium с требуемой кодировкой. Второй командой даём полные привилегии пользователю observium на одноименную базу данных.

CREATE DATABASE observium DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON observium.* TO 'observium'@'localhost'IDENTIFIED BY 'PASSWORD';

Далее нужно проверить активирован или нет в MySQL Strict mode, выполнив команду:

SELECT @@GLOBAL.sql_mode;

После выполнения команды я увидел STRICT_TRANS_TABLES:


Чтобы этот режим деактивировать, нужно выполнить ряд действий. Создаем конфигурационный файл, который деактивирует Strict mode:

sudo touch /etc/mysql/conf.d/disable_strict_mode.cnf

Добавим в файл disable_strict_mode.cnf следующие строки:

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Перезапустим службу MySQL и проверим её статус:

sudo service mysql restart
sudo service mysql status

После выполнения выше описанных действий Strict mode будет деактивирован.

Следующим шагом выполняем скрипт конфигурации ранее созданной базы данных MySQL:

sudo ./discovery.php -u

***

Создаем дополнительные служебные директории и даем на них права доступа пользователю, от имени которого работает веб-сервер apache2 (www-data):

sudo mkdir ./logs
sudo mkdir ./rrd
sudo chown www-data:www-data ./logs
sudo chown www-data:www-data ./rrd

***

Заменяем содержимое файла или добавляем в файл /etc/apache2/sites-available/000-default.conf информацию о виртуальном хосте веб-сервера:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /opt/observium/html
    <FilesMatch \.php$>
      SetHandler application/x-httpd-php
    </FilesMatch>
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /opt/observium/html/>
            DirectoryIndex index.php
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Require all granted
    </Directory>
    ErrorLog  ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog  ${APACHE_LOG_DIR}/access.log combined
    ServerSignature On
</VirtualHost>

Активируем php-модуль mcrypt:

sudo phpenmod mcrypt

Активируем mod_rewrite для Observium URL’s:

sudo a2enmod rewrite

После внесенных изменений надо перезапустить apache2:

sudo /etc/init.d/apache2 restart

***

Добавляем администратора системы:

./adduser.php admin YourPassword 10

Теперь можно зайти на Web-интерфейс (http://observium.DomainName.com или IP address) и попытаться залогиниться:

***

Далее в папке /etc/cron.d/ создаем файл observium с содержимым:

# Run a complete discovery of all devices once every 6 hours
33  */6   * * *   root    /opt/observium/discovery.php -h all >> /dev/null 2>&1

# Run automated discovery of newly added devices every 5 minutes
*/5 *     * * *   root    /opt/observium/discovery.php -h new >> /dev/null 2>&1

# Run multithreaded poller wrapper every 5 minutes
*/5 *     * * *   root    /opt/observium/poller-wrapper.py 4 >> /dev/null 2>&1

# Run housekeeping script daily for syslog, eventlog and alert log
13 5 * * * root /opt/observium/housekeeping.php -ysel

# Run housekeeping script daily for rrds, ports, orphaned entries in the database and performance data
47 4 * * * root /opt/observium/housekeeping.php -yrptb

Если этого не сделать, то добавляемые устройств в Observium не будут “мониториться”. Чтобы форсировать мониторинг вновь добавленного устройства, нужно выполнить две команды:

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

Итак, мы установили и базово сконфигурировали Observium. Теперь мы можем добавить первые объекты для мониторинга.

 

Добавление объектов мониторинга

Сделаю маленькое отступление, объясняющее мою среду исполнения. В моем распоряжении есть небольшая, но реально работающая IT среда, которую мне необходимо “мониторить”.  IT инфраструктура построена на базе VMWare ESXi 5.5 под управлением VCenter Server Appliance, состоящая из трех хостов в кластере. Плюс отдельным хостом стоит VMware ESXi 6.0 для нужд команды тестировщиков.

Доступность всех виртуальных машин в кластере я проверяю с помощью Zabbix агентов, но вот сами физические хосты в кластере “мониторятся” при помощи Observium.  Zabbix-сервер и Observium-сервер стоят на одной виртуальной машине и прекрасно работают. Сама VM с системами мониторинга располагается на этом же кластере VMware – не оптимальное решение, но на отдельный сервер под задачу мониторинга бюджет выделен не был. Мной было принято решение развернуть еще одну виртуальную машину на отдельно стоящем хосте VMware 6.0 и развернуть второй Zabbix и Observium сервер на этой машине. При изменении конфигурации я просто экспортирую и импортирую данные конфигурации на соседние сервера мониторинга. На каждом Zabbix-сервере стоит агент, который проверяет доступность соседа и, в случаи выхода из строя одного сервера мониторинга, я узнаю об этом от другого сервера.

Добавим поочередно хосты ESXi в Observium. На ESXi хостах должен быть активирована служба SNMP, настроено community и разрешен трафик для SNMP. На том, как это сделать мы останавливаться не будем.

Добавить устройство в Observium можно как из через интерфейс командной строки, так и через веб-интерфейс. Пример добавления объекта мониторинга через интерфейс командной строки:

cd /opt/observium/
./add_device.php [hostname] [community] v2c

Результат успешного выполнения команды добавления будет выглядеть примерно следующим образом:

***

Пример добавления объекта мониторинга через Web-интерфейс:

В открывшейся форме заполняем соответствующие поля:

Результат успешного добавления устройства будет выглядеть примерно так:

***

После того, как вы добавили устройства в Observium, нужно запустить (или дождаться запуска по расписанию) две команды, которые опросят добавленные устройства и начнут снимать с них показания:

cd /opt/observium/
./discovery.php -h all
./poller.php -h all

Так устройство выглядит в веб-консоли до запуска команд:

А так — после запуска команд:

Как видим, Observium определил платформу, на которой работает VMware и версию гипервизора, UP Time ESXi хоста.

***

Выше описанными шагами я добавил все три ESXi хоста VMware кластера:

Если кликнуть по ссылке хоста, то открывается большое кол-во параметров, которые Observium собирает с хоста, анализируйте…..

Observium безошибочно определил кол-во виртуальных машин на всех ESXi хостах и их текущее состояние:

***

В моей инфраструктуре есть два Firewall’a Barracuda Next Generation x300. Если посмотреть на страницу Supported Devices на сайте Observium, то упоминаний о Barracuda там нет. Но я не стал расстраиваться и попытался добавить Firewall’ы в Observium:

Как видим из скриншота выше, Observium корректно определил производителя оборудования, линейку Next Generation и модель x300 и даже подставил рядом с устройством фирменный лейбл. Плюс ко всему он определил, что мои Firewall’ы работают в режиме High Availability (высокой доступности), и какой из них сейчас активный:

Активный Firewall — с меткой x300 (указатель 1), а там, где мы видим x300-ha (указатель 2) – это Firewall, находящийся в режиме ожидания.

Если кликнуть по ссылке Firewall’a, то мы увидим массу разнообразных графиков, как это было с VMware:

Observium сам корректно определил и переместил мои устройства по категориям:

***

Как я говорил ранее, базовые параметры с Windows-систем я снимаю при помощи Zabbix-агентов. Но нам ничего не мешает “натравить” вдобавок и Observium на Windows через встроенную службу SNMP.

Устанавливаем на Windows Server 2012 R2 Standard службу SNMP при помощи Server Manager из Features:

Далее открываем оснастку управления службами, находим SNMP Service, открываем свойства службы и выставляем опции:

После внесения изменения, обязательно перезапускаем службу.

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

Результат:

Как видим, Observium прекрасно определил, что это Windows Server 2012 R2.

 

Особенности мониторинга систем Linux/Unix

в Observium существует понятие Unix Agent. Это дополнительный набор скриптов, которые помогают получать дополнительный набор информации с Linux/Unix систем. Unix Agent также использует SNMP. Цитата из документации по этому поводу:

Please note that SNMP is still required on any devices with the agent, the agent simply provides additional data which can’t be accessed via SNMP.

Еще одна важная заметка из документации:

The preferred method of running the Unix agent is via xinetd.

Переходим на машину, где нужно установить Agent (в моем случае это Linux-система) и выполняем последовательность команд:

sudo apt-get install snmpd xinetd vim
sudo mkdir -p /opt/observium && cd /opt
sudo wget http://www.observium.org/observium-community-latest.tar.gz
sudo tar zxvf observium-community-latest.tar.gz
sudo sed -e "/SNMPDOPTS=/ s/^#*/SNMPDOPTS='-Lsd -Lf \/dev\/null -u snmp -p \/var\/run\/snmpd.pid'\n#/" -i /etc/default/snmpd
sudo mkdir /usr/bin/distro/
sudo cp /opt/observium/scripts/distro /usr/bin/distro/
sudo chmod 755 /usr/bin/distro
sudo cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.backup

Редактируем файл конфигурации SNMP:

sudo vim /etc/snmp/snmpd.conf

Вносим самые простые настройки. Обратите внимание на  настройку “ВАША_COMMUNITY”:

com2sec readonly  default         ВАША_COMMUNITY
group MyROGroup v1         readonly
group MyROGroup v2c        readonly
group MyROGroup usm        readonly
view all    included  .1                               80
access MyROGroup ""      any       noauth    exact  all    none   none
#This line allows Observium to detect the host OS if the distro script is installed
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro

Выполняем ещё ряд команд:

sudo cp observium/scripts/observium_agent /usr/bin/observium_agent
sudo mkdir -p /usr/lib/observium_agent/local
sudo cp observium/scripts/agent-local/mysql /usr/lib/observium_agent/local/

Явно укажем то, на каком IP работает наш Observium:

sudo cp observium/scripts/observium_agent_xinetd /etc/xinetd.d/observium_agent
sudo vim /etc/xinetd.d/observium_agent

Перезапускаем xinetd и snmpd:

sudo /etc/init.d/xinetd restart
sudo /etc/init.d/snmpd restart

Добавляем нашу Linux-машину в веб-консоли Observium (как это сделать смотрите выше) и получаем конечный результат:

Если на нашей Linux машине развёрнуты дополнительные службы, то мы можем скопировать нужные скрипты из каталога /opt/observium/scripts/agent-local/<ИмяНужногоСкрипта> в каталог /usr/lib/observium_agent/local/

Затем включаем опцию на Observium-сервере в файле /opt/observium/config.php

$config['poller_modules']['unix-agent'] = 1;

Стоит заметить, что скрипты в некоторых случаях требуют установки дополнительных пакетов или дополнительного конфигурирования системы.

 

Выводы

Подведём итоги по системе мониторинга Observium:

  • Observium проста в конфигурировании;
  • Observium хорошо документирована и имеет много статей от разных авторов (+1 :));
  • Observium понимает много различного оборудования;
  • Observium имеет эргономичный и продуманный Web-интерфейс;
  • Observium расширяется сторонними скриптами

Всего комментариев: 10 Комментировать

  1. dyasny /

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

    1. Алексей Максимов /

      Суровое мнение :)
      Антон, ждём обзор о LibreNMS :)

      1. dyasny /

        только факты :) если интересно, можно погуглить адам армстронг из обсервиум по мейл-листам и логам IRC, чтоб впечатлиться. если пытаться с ним спорить, спокойно и по делу, то он обложит матом и забанит. причем ему плевать говорит он с просто пользователем или представителем целой индустрии. на форумах ubiquiti о нем можно много интересного узнать. Короче если можно получить ту же систему но без лишней мелодрамы в виде LibreNMS, то я не вижу смысла связываться

  2. Алексей Максимов /

    Антон, спасибо за материал. Назрел ряд вопросов, и возможно, не у меня одного.

    1. Зачастую (но не всегда) системы, распространяемые, как «младший брат» коммерческих продуктов имеют какие-нибудь «обидные» ограничения или вообще подвохи. Что можете сказать в этом плане про Observium?
    2. Правильно ли я понимаю, что эта система работает исключительно на базе snmpd, то есть опрос объектов мониторинга всегда должен быть сопряжён с протоколом SNMP, а опрос например по WMI, SSH, HTTP — «дохлый номер» ?
    3. То что, графики красивые, это хорошо. Но не ясно, как дела обстоят с механизмами оповещений администратора/оператора данной системы мониторинга.

    И хочу сделать ремарку по поводу того, что Observium безошибочно определяет модели железок, версию ОС и т.п. вещи. Никакого волшебства в этом нет, так как, насколько я понимаю, в SNMP имеется ряд стандартных OID, по которым практически любая железка/ОС/ПО с большим удовольствием расскажут о себе любой системе мониторинга.

    1. dyasny /

      1. там нет прокси, так что масштабируемость не ах. с другой стороны, при хорошем железе это все равно означает четырехзначные количества девайсов. Еще одна проблема — если девайс не был опознан то добавить свой очень сложно — или ковырять простыни кода на php, или упрашивать кодеров добавить MIB в продукт. И тут как раз и проявляется основая разница между адекватными и неадекватными мейнтейнерами.

      2. да, только snmp, плюс агенты которые не всегда корректно отрабатывают. зато snmp работает великолепно. я у себя его (librenms) использую именно для сбора статистики со свичей и раутеров, чтоб если что смотреть на историческую инфо по нагрузкам, а нормальный мониторинг делаю через zabbix

      3. почта поддерживается, вроде видел разговоры об интеграции других протоколов

  3. odarchuk /

    а как у сабжей (Observium и Librenms) с:
    — мониторинг нагрузки на хост per VM. Можно вот такой график получить (как в Veeam ONE) http://joxi.ru/a2XepvEHGOx1Ag.png ?
    — карта сервиса/региона
    — реалтайм-график по нужному параметру/девайсу
    — воркфлоу

    1. odarchuk /

      — dashdoard-ы
      — ролейвой доступ к нужной «части» СМ для разных линий ХД

  4. Ambalus /

    Не получается настроить мониторинг одновременно Apache2 и MySQL c одной ВМ на Ubuntu 14.0.4.
    Если на сервере Observium для данной ВМ указать порт — то он получает какую-то одну статистику в зависимости от порта.
    Если выводить данные от Apache2 и MySQL c кастомного скрипта service (./apache & ./mysql) то Observium не отображает данные вообще по приложениям.

  5. Дмитрий /

    Подскажите, как подружить observium с серверами HP? Чтобы выдавал информацию по состоянию RAID массивов, HDD и температуре. Изначально добавил сервер в observium без установки Observium Unix Agent. Данные по ОС и т.п. пошли. Поставил Observium Unix Agent, добавил модулей мониторинга, поставил утилиты мониторинга от HP но картинка в Observium не меняется. Утилитами HP посмотреть состояние массива могу. Сервер ML150G6 на centos 6.6.

    Другой сервер HP под win2008r2. Там тоже нет информации по состоянию raid массива и контроллера. Инфа о объеме дисков и свободном месте есть. Т.е. та же проблема что и с первым сервером.

    1. Дмитрий /

      upd. Linux server победил. Выдается более чем подробная статистика по температурам и состоянию raid. А вот в windows server крутить нечего. HP SIM работает, а observium информацию по raid и датчикам не видит.

Добавить комментарий