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, предусмотрена возможность добавления новых модулей по мере развития программы.


SNMP трапы

Для мониторинга сетевых обьектов с помощью трапинга в 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.
  • В момент изменения состояния обьекта.
  • В результате выполнения заданного условия.

Вывод осуществляется в определенном пользователем формате представления текстовых данных.

С использованием условных методов сохранения возможна реализация простой системы оповещения технического персонала о неполадках в сети.


NetState сервер

Как уже упоминалось выше, Netmond хранит все накопленные данные о текущем состоянии сети у себя в памяти, в специально предназначенных контейнерах - переменных VARIABLE. Значения VARIABLE могут вводиться в программу по результатам работы поллинга и трапинга, а выводиться с помощью разнообразных методов сохранения SAVE.

Однако вывод данных с помощью SAVE выполняется только по инициативе самого Netmond (периодически или в зависимости от каких-то условий) совершенно конкретных значений, предусмотренных конфигурацией программы. Что может быть очень удобно при решении задач накопления и долговременного хранения данных, но, например, практически не пригодно для задачи получения мнговенной актуальной картины состояния всей сети в реальном времени.

Для решения задачи вывода любых данных в произвольные моменты времени в Netmond встроен специальный сервер NetState, который обеспечивает авторизованным сетевым клиентам асинхронный доступ ко всему массиву переменных VARIABLE на чтение.

Весь массив переменных VARIABLE представляется в виде иерархии имен переменных и их владельцев, разделенных специальным символом `!':

Обьект!Подобьект!Переменная = Значение

Возможно получение текущих и предыдущих значений переменных, а также выбор интересующих переменных по REGEX-маскам на их имена.

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


Смотри также:
Операторы конфигурации
Встроенные переменные
Протокол NetState
Примеры конфигурации

© 1998-2002, Rinet Software