Netmond V2. Дизайн
В этом разделе кратко описываются основы конструкции и функционирования
Netmond.
Все функционирование Netmond построено вокруг одного главного
цикла ассинхронной работы с сокетами - классической схемы сервера с одним
процессом в памяти, способным обслуживать множество сетевых процессов
одновременно; и одним файлом конфигурации, где предварительно описываются
все необходимые действия по мониторингу сети.
Netmond рассматривает сеть как иерархическую совокупность обьектов
определенных типов.
Верхний уровнь иерархии - это узловые (материнские) обьекты, имеющие
собственные IP адреса, например роутеры и хосты. На них имеются подобьекты,
например интерфейсы и сервисы, и так далее. Узловые обьекты также могут
выстраиваться в древовидную стуктуру по мере их удаления от точки мониторинга -
корня иерархии.
Этот принцип однозначно устанавливает зависимости одних обьектов от других,
что позволяет:
- Представить топологию сети.
- Исключить паразитный трафик при мониторинге недоступных обьектов.
- Избежать ложных срабатываний системы оповещения о неполадках.
Мониторинг обьектов может осуществляться одновременно двумя, принципиально
разными способами:
- Трапинг
- Когда сетевой обьект мониторинга (агент) извещает сервер Netmond
о произошедшем событии с помощью специальных SNMP сообщений.
- Поллинг
- В этом случае Netmond самостоятельно производит периодический
опрос сетевых обьектов разнообразными протоколами и Вами определенными
способами.
Одновременное применение этих способов мониторинга позволяет нивелировать
недостатки друг друга.
Опрос обьектов, по-возможности, распределяется на интервале поллинга в
зависимости от дистанции (колличества хопов) до обьекта - близкие обьекты
опрашиваются прежде более удаленных. Эта дистанция и некоторые другие
зависимости динамически определяются в процессе работы программы с помощью
ICMP echo с IP опцией Record-Route (встроенный метод PING).
Накопленные данные Netmond хранит в переменных
в памяти, сохраняются только текущие и предыдущие значения каждой переменной.
Переменные имеют собственные имена и не имеют фиксированного типа
представления данных, поэтому в разные моменты времени одна и та же
переменная может содержать число, строку символов, IP-адрес и т.п.
За каждым обьектом мониторинга закрепляется некоторый фиксированный набор
предопределенных переменных, свойственных данному обьекту. Пользователь
может определить также и собственные переменные, значения которых планирует
получать из сети произвольно заданными способами.
Доступ к результирующим значениям переменных возможен с помощью различных
способов сохранения данных, которые обеспечивают:
- Запись данных в файлы.
- Передачу данных внешним процессам.
- Обработку данных простым встроенным анализатором.
В любой момент времени можно получить доступ к данным Netmond и по
запросу из внешних сетевых процессов, для этого в программе предусмотрен
сервер NetState со специальным протоколом обмена.
Обьекты мониторинга группируются по типам, определящим особенности
функционирования обьекта. Название типа отражает сущность обьекта или его
предназначение.
Следующие типы обьектов мониторинга определены в Netmond:
- OBJECT
- Первичная цель мониторинга, материнский обьект с IP адресом.
- INTERFACE
- Сетевой интерфейс, подобьект OBJECT.
- SERVICE
- Произвольный сетевой сервис, подобьект OBJECT.
- BGPAS
- Номер автономной системы, подобьект OBJECT.
- BGPPEER
- BGP пир в автономной системе (IP адрес), подобьект BGPAS.
- ENVMON
- Контроллер окружающей среды Cisco, подобьект OBJECT.
- ENVTEMP
- Температурный датчик Cisco, подобьект ENVMON.
У каждого OBJECT может быть индивидуально определено:
- Его сетевой адрес (IP или FQDN).
- Краткое описание.
- Список методов опроса METHOD.
- Интервал поллинга POLLING (время между выполнением списка METHOD).
- Список возможных трапов TRAP.
- Список переменных VARIABLE.
- Список методов сохранения данных SAVE.
- Интервал сохранения SAVING (время между выполнением списка SAVE).
- Список сетевых интерфейсов INTERFACE.
- Список произвольных сервисов SERVICE.
- Список автономных систем BGPAS.
- Список температурных датчиков ENVTEMP.
У INTERFACE могут определяться:
- Краткое описание.
- Нарицательная скорость.
- Список методов сохранения данных SAVE.
У SERVICE могут определяться:
У BGPAS могут определяться:
- Краткое описание.
- Список BGP пиров BGPPEER или автоматическое определение.
- Список методов сохранения данных SAVE.
У ENVTEMP могут определяться:
- Краткое описание.
- Список имен температурных датчиков или автоматическое определение.
- Список методов сохранения данных SAVE.
Все эти типы обьектов представлены в Netmond в виде соответствующих
структур данных, динамически распределяемых в памяти.
Что-бы определить текущее состояние и получить необходимые данные об
обьектах мониторинга их нужно опросить и/или ожидать
от них соответствующих SNMP трапов.
Мониторинг сетевых обьектов с помощью поллинга осуществляется разнообразными
методами опроса METHOD. Различные методы группируются в опросные
списки и привязываются к обьектам мониторинга, каждый из методов в этом списке
выполняет определенные для него действия по сетевому взаимодействию с данным
обьектом. Такие действия могут определяться пользователем с помощью
скриптов-сценариев или могут использоваться заранее предусмотренные сценарии
и протоколы.
Методы в списке METHOD выполняются на обьекте последовательно,
в порядке как указано пользователем. Работа списка прерывается на первом же
методе который не смог отработать и завершился по таймауту или вернул
какой-либо статус ошибки.
Таким образом, результатом работы списка и является текущее состояние
и статус данного обьекта.
Произвольными методами опроса могут обладать только обьекты OBJECT
и SERVICE. Обьекты остальных типов опрашиваются
по SNMP специально предусмотренными алгоритмами, которые реализованы во
встроенном методе ROUTER, применяемом на обьекте OBJECT.
С помощью METHOD возможна также установка значений произвольных
переменных VARIABLE данного обьекта.
В Netmond предусмотрены следующие опросные протоколы и сценарии
для использования в качестве METHOD на обьектах типа OBJECT
и SERVICE:
- PING
- ICMP-echo запрос с IP опцией Record-Route. Используется для
простого определения коннективности с обьектом и возможной фиксацией сетевой
топологии до него. ВНИМАНИЕ: к сожалению не все операционные системы коррекно
отрабатывают IP опцию Record-Route!
- ICMP
- ICMP-echo - серия запросов для тестирования коннективности с
обьектом.
- SNMP
- SNMP v1 Get - простой запрос произвольных SNMP переменных
VARIABLE.
- ROUTER
- Сложный алгоритм SNMP опроса с возможной индексацией по MIB таблицам
предопределенных SNMP переменных. Должен использоваться на OBJECT
который имеет INTERFACE, BGPPEER и ENVTEMP типы
подобьектов.
- TCP
- TCP-сессия с произвольным текстовым сценарием на определенном порту и
возможностью получения значений произвольных переменных VARIABLE.
- UDP
- UDP-сиквенс с произвольным текстовым сценарием на определенном порту и
возможностью получения значений произвольных переменных VARIABLE.
- RADIUS
- RADIUS Authenticate-Only - простой запрос работоспособности
Radius сервера.
- TACACS
- TACACS+ PAP Authentication - простой запрос работоспособности
Tacacs сервера.
- DNS
- DNS IN A или DNS IN SOA - простой запрос
работоспособности DomainName сервера.
Все протоколы и сценарии оформлены в виде отдельных независимых модулей
с унифицированным Netmond API, предусмотрена возможность добавления
новых модулей по мере развития программы.
Для мониторинга сетевых обьектов с помощью трапинга в Netmond может
быть активизирован специальный трап-сервер, собирающий все поступающие от
сетевых агентов SNMP сообщения-трапы. Таким образом агенты могут оперативно
извещать сервер о каких-то событиях, происходящих на оборудовании сети.
В каждом таком сообщении передается определенный набор SNMP переменных,
состоящих из имени переменной и ее текущего значения.
Имя переменной представлено в виде специального SNMP идентификатора
обьекта (ASN.1 Object Identifier) - массива целых чисел разделенных точками.
В качестве значений могут быть числа, строки, идентификаторы и т.д.
Для сопоставления интересующих нас SNMP переменных с более удобными в
использовании текстовыми именами и для их привязки к сетевым обьектам
мониторинга в Netmond возможно описание произвольных трап методов
TRAP.
Трап-сервер Netmond поддерживает следующие виды SNMP сообщений,
которые не требуют дополнительного описания:
- Generic Traps
- Стандартные универсальные SNMP трапы. К ним относятся:
- Cold-Start - "Холодная" перезагрузка данного устройства.
- Warm-Start - "Теплая" перезагрузка данного устройства.
- Link-Up - Указанный интерфейс вошел в рабочее состояние.
- Link-Down - Интерфейс вышел из рабочего состояния.
- Enterprise-specific Traps
- Специальные отраслевые SNMP трапы. К ним относятся:
- BGP-Established - Указанный BGP-пир вошел в рабочее состояние.
- BGP-BackWardTransition - BGP-пир вышел из рабочего состояния.
- Cisco-Reload - Данное устройство Cisco было перезапущено.
Все другие разновидности трапов должны быть предварительно описаны как
методы TRAP в файле конфигурации Netmond и применены на
соответствующих обьектах мониторинга с указанием всех интересующих
переменных VARIABLE.
Все данные хранятся в переменных VARIABLE в памяти программы.
Некоторые переменные могут быть заданы параметрами конфигурации, они
остаются неизменными до следующей переконфигурации. Например, имя обьекта
мониторинга это константа. Другие переменные могут периодически изменять
свои значения, например в результате опроса обьектов в сети. Для упрощения
настройки в Netmond предусмотрен ряд типовых предопределенных переменных,
среди которых переменными SNMP являются переменные обьекта, опрашиваемого
с помощью встроенного метода ROUTER.
Все константы и некоторые переменные являются статическими, то есть
непосредственно переменными кода программы - HardCode VARIABLE.
Другие данные хранятся в памяти Netmond в формализованном виде
в специальных, динамически распределяемых структурах - Soft VARIABLE.
Значения последних могут быть неопределены в первоначальные моменты времени.
Переменные группируются в списки и индивидуально закрепляются за каждым
сетевым обьектом мониторинга, у разных типов обьектов существует разный набор
предопределенных переменных.
У обьектов типа OBJECT и SERVICE возможно определение
произвольных переменных.
Все константы и переменные состоят из собственного имени и хранимого
значения. Имя переменной обычно отражает смысл содержимого и может состоять
из букв латинского алфавита на верхнем и нижнем регистре, цифр и знака
подчеркивания - [a-zA-Z0-9_]. Имя должно начинатся с буквы и может
иметь длину до 100 символов. Регистр букв не учитывается, однако имена всех
HardCode VARIABLE для удобства представлены в верхнем регистре.
При определении новой переменной в файле конфигурации или при ссылке на
уже существующую переменную или константу первым символом в имени является
знак доллара $ - признак имени переменной.
Значения переменных VARIABLE могут принимать один из следующих
типов:
- Integer
- Простое целое число.
- Unsigned
- Беззнаковое 32-x разрядное целое число, возможно SNMP-счетчик (counter).
- Floating
- Число c плавающей точкой, реально это double.
- IpAddress
- IP адрес.
- String
- Строка 8-и битных символов оканчивающаяся '\0'.
- ObjID
- SNMP идентификатор обьекта, OID = 1.3.6.1...
Soft VARIABLE не имеют фиксированного типа, одна и та же
переменная в разные моменты времени может хранить значения разных типов.
При выводе данных типа String значение всегда заключается в двойные
апострофы. Если значение переменной не определено, то при выводе оно может
быть представлено специальным ключевым словом Unused.
В каждой Soft VARIABLE хранится:
- Имя переменной.
- Ее SNMP идентификатор OID (только для SNMP переменных).
- Текущее значение.
- Предыдущее значение.
- Время последней модификации (только когда Netmond собран с опцией
USE_VAR_MTIME).
Дополнительно в числовых Soft VARIABLE типа Integer,
Unsigned или Floating вычисляются и хранятся следующие расширенные
значения:
- Минимальное значение.
- Максимальное значение.
- Среднее значение.
- Дельта приращение.
Такие значения вычисляются за каждый период сохранения
данных SAVING обьекта - владельца переменной (за это время может
пройти множество его поллингов POLLING).
Значения некоторых целочисленных Soft variables могут быть
представлены в виде строки состояния (UP, DOWN, ESTABLISHED и тд).
Для ссылки на такие расширенные значения используется уточняющий суффикс,
следующий за именем переменной через точку:
- $Name.Old
- Ссылка на предыдущее значение переменной $Name.
- $Name.State
- Вернуть значение целочисленной переменной $Name в виде
соответствующей строки состояния.
- $Name.Ave
- Средне арифметическое значение числовой переменной $Name за
период сохранения данных Saving
обьекта - владельца.
- $Name.Min
- Минимальное значение за период.
- $Name.Max
- Максимальное значение за период.
- $Name.Delta
- Приращение значения за период.
На имена переменных можно ссылаться из файла конфигурации или по сетевому
запросу извне к встроенному NetState серверу.
Напомним, что на любые переменные и константы можно ссылаться по их именам
без учета регистра символов.
Вывод данных из Netmond может производиться с помощью различных
методов сохранения данных SAVE. На любой обьект мониторинга независимо
от его типа может быть назначен целый ряд разнообразных способов сохранения
данных.
Для каждого типа обьекта предусмотрен простой и
наиболее оптимальный метод SAVE, который сохраняет значения
определенных переменных VARIABLE в обычный
текстовый файл. Но возможно также описать и собственный метод сохранения данных
в произвольном формате и несколькими способами.
Медоты сохранения данных SAVE предоставляют три способа выдачи
значений переменных VARIABLE:
- Сохранение в файл.
- Вывод в пайп.
- Передача в качестве аргументов внешней программе.
Выдача значений VARIABLE может производиться:
- Периодически, с указанным интервалом времени SAVING.
- В момент изменения состояния обьекта.
- В результате выполнения заданного условия.
Вывод осуществляется в определенном пользователем формате представления
текстовых данных.
С использованием условных методов сохранения возможна реализация простой
системы оповещения технического персонала о неполадках в сети.
Как уже упоминалось выше, Netmond хранит все накопленные данные
о текущем состоянии сети у себя в памяти, в специально предназначенных
контейнерах - переменных VARIABLE. Значения VARIABLE могут
вводиться в программу по результатам работы поллинга и
трапинга, а выводиться с помощью разнообразных методов
сохранения SAVE.
Однако вывод данных с помощью SAVE выполняется только по инициативе
самого Netmond (периодически или в зависимости от каких-то условий)
совершенно конкретных значений, предусмотренных конфигурацией программы.
Что может быть очень удобно при решении задач накопления и долговременного
хранения данных, но, например, практически не пригодно для задачи получения
мнговенной актуальной картины состояния всей сети в реальном времени.
Для решения задачи вывода любых данных в произвольные моменты времени в
Netmond встроен специальный сервер NetState, который обеспечивает
авторизованным сетевым клиентам асинхронный доступ ко всему массиву переменных
VARIABLE на чтение.
Весь массив переменных VARIABLE представляется в виде иерархии
имен переменных и их владельцев, разделенных специальным символом `!':
Обьект!Подобьект!Переменная = Значение
Возможно получение текущих и предыдущих значений переменных, а также выбор
интересующих переменных по REGEX-маскам на их имена.
Первоначально механизм NetState был предусмотрен для динамической
выдачи текущего состояния сети непосредственно в интерфейс оператора, что
и обусловило его название.
Смотри также:
Операторы конфигурации
Встроенные переменные
Протокол NetState
Примеры конфигурации
© 1998-2002, Rinet Software
soft@risp.ru
|