Когда количество активного оборудования и серверов в сети неуклонно растет, а контролировать работоспособность и качество предоставляемых сервисов становится все сложнее, на помощь приходит система мониторинга сети OpenNMS.
Кратко о системе мониторинга OpenNMS
OpenNMS – система мониторинга сетевой инфраструктуры уровня предприятия, распространяемая по модели свободного программного обеспечения (Open Source). Кроме обычной для Open Source-проектов поддержки сообществом пользователей, производитель предоставляет многоуровневое коммерческое сопровождение продукта: от внедрения до обеспечения технической поддержки 24х7 и обучения персонала.
Данная система реализована на Java, поэтому появляется такое положительное качество, как кроссплатформенность.
Поддерживаются ОС:
* Linux:* Debian Etch и Lenny (x86 и x86_64);* Red Hat Enterprise Linux/CentOS (3, 4 и 5; x86 и x86_64); * Fedora Core (версии с 2 по 8, x86 и x86_64); * Mandriva 2007 и 2008; * SuSE (9 и 10). * Solaris 8, 9, и 10 (SPARC и x86); * Mac OS X (10.4+, PowerPC и x86); * Windows 2000, XP, 2003 (Vista и Server 2008 не тестировались).
Теоретически OpenNMS может запуститься на любой платформе, поддерживающей Java SDK 1.4 и выше. Также к положительным качествам можно отнести модульность системы и возможность развертывания частей системы на раздельных серверах (СУБД, демоны сбора статистики и веб-интерфейс могут быть разнесены). Конечно, можно добавить и ложку дегтя: за Java-реализацию, обеспечившую кроссплатформенность, пришлось заплатить увеличением потребления ресурсов.
Система OpenNMS отвечает за мониторинг функционирующих в сетевой инфраструктуре сервисов, таких как Web, DNS, DHCP, сервисы СУБД (Oracle, MSSQL, PostgreSQL и др.), однако информация о состояниисетевых устройств также доступна.
В системе упрощены способы добавления новых сетевых устройств для мониторинга, и общий принцип работы основан на автоматическом обнаружении (discovery) сетевых устройств. Обнаружение состоит из двух частей – определение интерфейсов (IP-адресов) и определение функционирующих на этих интерфейсах сервисов. Определение интерфейсов
осуществляется на основе протокола ICMP (Ping), а определение сервисов – с помощью сборщиков (collectors). На данный момент существует несколько сборщиков, но далее мы подробно рассмотрим сбор статистики, основанный на протоколе SNMP.
Основной единицей мониторинга системы является интерфейс (interface), который уникально определяется на основе IP-адреса. Сервисы (services) привязаны к интерфейсам, а интерфейсы, расположенные на одном устройстве, группируются в узел (node).
Что ж, давайте не будем упускать шанс оценить качество системы и удобство работы с ней самостоятельно, не полагаясь на рекламные строчки и чужие мнения. Приступим к установке.
Установка в дистрибутиве Fedora 8 Linux
Перед началом установки хотелось бы предупредить вас о некоторых тонкостях. Во-первых, для текущей версии OpenNMS 1.5.90 сервер PostgreSQL ветки 8.3.Х не поддерживается, так что устанавливать будем сервер ветки 8.2. Во-вторых, начиная с версии OpenNMS 1.3.6 в составе дистрибутива отсутствует библиотека jicmp, которую необходимо будет загрузить отдельно.
Также для работы системы нам понадобится JDK. Уточню, что необходима именно версия JDK (Java Developer Kit), а не JRE (Java Runtime Environment), так как веб-интерфейс написан на Java/JSP, а для компиляции JSP в сервлет необходим компилятор Java, который отсутствует в JRE.
Установка JDK
Java Development Kit (JDK) можно скачать с сайта компании Sun либо установить с помощью yum из репозитория Tigro.
Если данный репозиторий у вас не подключен, то можно установить его
через RPM-менеджер:
rpm -ihv http://mirror.yandex.ru/fedora/tigro/8/i386/tigro-release-8-1.i386.rpm
После установки репозитория можно воспользоваться yum:
yum install jdk
Хочу упомянуть об одном неприятном моменте: после установки JDK в Fedora 8 необходимо выполнить ряд дополнительных шагов, чтобы заставить работать виртуальную машину. Дело в том, что при попытке запуска любого Java-приложения выдается ошибка следующего вида:
java: xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock' failed
Проблема всем давно известная и решается в Fedora 8 следующим образом:
sed -i 's/XINERAMA/FAKEEXTN/g' /usr/java/jdk1.6.0_05/jre/lib/i386/xawt/libmawt.so
Возможно, ваш путь к файлу libmawt.so будет отличаться от приведенного
выше.
Установка PostgreSQL
Если у вас еще не установлен PostgreSQL [4], то установим с помошью yum:
yum install postgresql-server
Теперь выполним начальную инициализацию:
/sbin/service postgresql initdb
Далее необходимо задать базовые настройки сервера. Для этого нужно отредактировать файлы pg_hba.conf и postgresql.conf, находящиеся в /var/lib/pgsql/dat.
Правим файл pg_hba.conf:
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
Файл postgresql.conf:
listen_addresses = 'localhost'
Еще раз напомню, что это тестовая установка и конфигурационные файлы очень упрощены, проблемы безопасности полностью игнорируются и доступ к серверу БД никак не защищен.
Запускаем сервер:
/sbin/service postgresql start
и переходим к следующему шагу.
Установка OpenNMS
Есть несколько веток программы для установки: stable, development и nightly snapshot, причем разработчикам рекомендуется использовать ветку development. На момент написания статьи была доступна версия 1.5.90.
Для установки можно скачать установочный jar-файл, но проще будет установить дополнительный репозиторий OpenNMS для yum:
rpm -Uvh http://yum.opennms.org/repofiles/opennms-repo-unstable-fc8.noarch.rpm
Данной командой мы установили репозиторий yum для development-ветки OpenNMS. Теперь необходимо установить пакет opennms с помошью yum:
yum install opennms
Дополнительно необходимо установить пакеты jrrd (опционально вместо rrd), jicmp и iplike:
yum install jrrdyum install jicmpyum install iplike
По умолчанию устанавливается веб-интерфейс opennms-webapp-jetty для встроенного в OpenNMS контейнера сервлетов Jetty, но есть также версия веб-интерфейса для Tomcat и называется opennms-webapp-standalone.
После успешной установки необходимо запустить скрипт поиска установленной виртуальной машины Java:
cd /opt/opennms/bin./runjava -s
Если по какой-то причине скрипт отработает некорректно (например, вы установили JDK по нестандартному пути), либо у вас установлено несколько разных JDK и вы хотите указать скрипту конкретную, то можно задать явный путь:
./runjava -S /usr/java/jdk1.6.0_5/bin/java
Теперь можно запускать скрипт начальной конфигурации:
./install -dis
Итак, если мы ничего не упустили, то скрипт отработает без ошибок. После завершения установочного скрипта не забываем посмотреть, все ли прошло хорошо:
- searching for jicmp:- trying to load /usr/lib/libjicmp.so: OK- searching for jrrd: - trying to load /usr/lib/libjrrd.so: OK - checking database version... 8.2
Должны быть найдены библиотеки jicmp и jrrd. Если что-то пошло не так, то можно явно задать пути поиска:
./install -disU -l /usr/lib/jni:/usr/lib
Также не забываем, что если мы устанавливаем базу данных OpenNMS на свежую инсталляцию СУБД PostgreSQL, то пароль пользователя postgres пока пустой. Если же у вас уже был установлен сервер PostgreSQL, то вам могут понадобиться опциональные аргументы для скрипта инсталляции:
-A,–admin-password <arg>
// Пароль администратора сервера postgres (по умолчанию: ”)
-a,–admin-username <arg>
// Имя администратора сервера postgres (по умолчанию: ‘postgres’)
-c,–clean-database
// Очистить существующую базу при создании
-D,–database-url <arg>
// JDBC УРЛ базы данных (по умолчанию: jdbc:postgresql://localhost:5432/)
-P,–database-name <arg>
// Имя базы данных PostgreSQL (по умолчанию: opennms)
-p,–password <arg>
// Пароль для базы данных opennms (по умолчанию: ‘opennms’)
-u,–username <arg>
// Имя пользователя БД opennms (по умолчанию: ‘opennms’)
Список всех возможных атрибутов можно просмотреть, набрав:
./install -help
После успешной начальной установки и конфигурации можно запускать
OpenNMS:
./opennms start
Теперь набираем в браузере строку http://127.0.0.1:8980/opennms/ и
вводим имя пользователя “admin” и пароль “admin”.
Установка в Windows XP
Установка для Windows не должна вызвать каких-либо затруднений и
сводится к запуску файла opennms-installer-1.5.90.jar и следованию
указаниям графического установщика, поэтому подробно описывать процесс
не имеет смысла. Перед установкой необходимо предварительно
инсталлировать JDK не ниже 5 версии и PostgreSQL ветки 8.2 (8.3 не
поддерживается). Также отдельно устанавливается библиотека jicmp,
и путь к ней должен содержаться в переменной окружения PATH.
Описание сетевой инфраструктуры для мониторинга
Для более наглядного описания системы представим себе, что мы
настраиваем ее для мониторинга корпоративной сети предприятия с
головным офисом и небольшой сетью филиалов. Каждый из филиалов
объединен с головным офисом в единую сеть (см. рис. 1).
Рисунок 1. Общая схема сети организации с удаленными офисами
Пусть адресное пространство корпоративной сети будет задано следующим
образом:
* 10.10.10.0/24 - адресное пространство головного офиса, выделенное для серверов, маршрутизаторов,
коммутаторов, сетевых принтеров и т.п.; * 10.10.11.0/24 - адресное пространство головного офиса для рабочих станций пользователей;
* 10.10.12.0/24 - адресное пространство офиса No.1;
* 10.10.13.0/24 - адресное пространство офиса No.2;
* 10.10.14.0/24 - адресное пространство офиса No.3.
Наша сеть состоит из достаточного количества маршрутизаторов (например Cisco 2800 серии в головном офисе и маршрутизаторов попроще – Cisco серий 2600, 1800 и т. п.). На маршрутизаторах настроены SNMP-агенты
различных версий, включая третью. Кроме того, имеются также серверы, среди которых терминальные, серверы баз данных, почтовые и т. п., на многих из которых также установлены SNMP-агенты (например, с помощью Net-SNMP).
Настройка диапазонов сетевого обнаружения (Discovery)
Параметры обнаружения устройств описываются в файле discovery-cofiguration.xml. Уточню, что все конфигурационные файлы хранятся в каталоге openNMS-install-path\etc, где openNMS-install-path – путь установки OpenNMS. Ниже представлен пример файла discovery-cofiguration.xml для нашего варианта сетевой инфраструктуры:
<discovery-configuration threads="1" packets-per-second="1" initial-sleep-time="30000"restart-sleep-time="86400000" retries="3" timeout="800">
<include-range retries="2" timeout="1500">
<begin>10.10.10.1</begin>
<end>10.10.14.254</end> </include-range> <exclude-range> <begin>10.10.11.1</begin> <end>10.10.11.254</end> </exclude-range> <specific>10.10.11.1</specific> <include-url>file:/opt/OpenNMS/etc/moreip.txt</include-url> </discovery-configuration>
Согласно приведенному файлу, будет осуществляться опрос (посылаться ICMP ping) диапазона адресов 10.10.10.0/24, 10.10.12.0/24, 10.10.13.0/24 и 10.10.14.0/24, а также одиночного IP-адреса 10.10.11.1 и списка IP-адресов, указанных в файле /opt/OpenNMS/etc/moreip.txt.
Опишем некоторые глобальные атрибуты по умолчанию, задаваемые в теге<discovery-configuration>:
* threads - количество потоков для опроса. * packets-per-second - количество генерируемых ICMP-пакетов в секунду. Не стоит указывать слишком большое число,
если задержки в вашей сети велики.
* initial-sleep-time - время перед стартом процесса обнаружения (в
миллисекундах, значение по умолчанию - 5 минут). Задержка необходима для полного старта системы,
перед тем как начнут генерироваться события (events).
* restart-sleep-time - время после окончания процесса обнаружения, через которое процесс будет повторно запущен
(в миллисекундах,значение по умолчанию - 24 часа).
* timeout - время ожидания ответа от обнаруживаемого IP-адреса.
* retries - количество попыток обнаружения, если с первой попытки ничего не обнаружено.
Глобальные атрибуты можно переопределить внутри вложенных в тег <discovery-configuration> тегов.
* Тег <specific> - указывает определенный IP-адрес, включенных в процесс обнаружения. * Тег <include-range> - указывает диапазон IP-адресов, включенных в процесс обнаружения.
* Тег <exclude-range> - указывает диапазон IP-адресов, исключенных из процесса обнаружения. * Тег <include-url> - определяет файл со списком включенных в процесс обнаружения IP-адресов, один IP-адрес в каждой строке.
Все вложенные теги необязательны, но возможно также их множественное добавление. Так, можно задать несколько диапазонов с помощью <include-range>, определить несколько тегов <specific> и <include-url>.
Итак, при запуске системы OpenNMS по истечении времени initial-sleep-time запускается процесс обнаружения интерфейсов. Если получен ответ на ICMP-запрос, то для обнаруженного интерфейса регистрируется событие (event) newSuspect, на основе которого в дальнейшем будет осуществлена попытка обнаружения сервисов,
функционирующих на данном интерфейсе. А что делать, если ICMP-запросы блокируются сетевым экраном? Для таких случаев существует альтернативный метод для регистрации событий newSuspect. В подкаталоге bin установленной системы openNMS находится Perl-скрипт send-event.pl, который можно использовать для самостоятельной регистрации данного события:
/opt/opennms/bin/send-event.pl --interface ip-address uei.opennms.org/internal/discovery/newSuspect
где “ip-address” – нужный IP-адрес.
Посмотреть на ход процесса обнаружения можно, заглянув в файл discovery.log, находящийся в подкаталоге logs установленной системы openNMS.
Продолжим в следующей статье.
Постовой
Отличный сайт, на котором вы узнаете только интересные факты. Хомяки вырабатывают электричество, что в природе тверже алмаза, бессмертное животное и многое другое.
Я очень рад, что когда у меня были проблемы с зубами, я попал в отличную клинику. Центр стоматологии Клуб 32 без сомнения лучшая стоматология в Москве. VIP обслуживание.