Netmond V2. Протокол NetState

Для получения актуальной картинки наблюдаемой сети в реальном времени в Netmond предусмотрен специальный механизм - NetState сервер.
Сервер включается директивой Port в конфигурации Netmond с указанием номера TCP порта и списка доступа.


Общее описание протокола

Протокол NetState предназначен для передачи данных в сети от сервера к клиенту по запросам клиента. NetState является текстовым протоколом взаимодействия клиента и сервера в установленном TCP соединении на определенном порту сервера.
В качестве "стандартного" порта сервера предлагается использовать TCP порт с номером 3333 (ну палец так упал).

Функция клиента состоит из:

  1. Инициализации соединения с сервером.
  2. Посылке формализованных команд.
  3. Интепретации возвращаемых данных.
  4. Завершении соединения.

Функция сервера заключается в:

  1. Готовности принять входящее соединение на определенном порту.
  2. Разграничении доступа.
  3. Интерпретации поступающих команд.
  4. Возвращению соответствующих запросам данных.

Сервер всегда ожидает поступления соединения на известном TCP порту. При необходимости, клиент устанавливает TCP соединение с сервером. Затем сервер посылает приветствие и ожидает команд клиента в течении времени Timeout, или отвергает клиента на основании списка доступа и закрывает это соединение. При наличии доступа, между клиентом и сервером происходит обмен командами и соответствующими ответами до тех пор пока соединение не закрывается клиентом или не прерывается по ошибке.

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

  • Регистр букв в ключевых словах команд не учитывается.
  • Аргументом является REGEX-выражение, регистр букв учитывается.
  • Строка с командами и аргументом завершается CRLF парой.
  • Ключевые слова и аргументы содержат только печатаемые ASCII-символы.
  • Члены строки разделяются между собой любым колличеством пробелов.
  • Результирующая длина строки не должна превышать 1024 символов.

После посылки команды клиент ожидает ответа от сервера в течении времени Timeout. Очередная команда посылается клиентом только при получении приглашения ввода от сервера.

Ответы NetState протокола мультистроковые. Они состоят из произвольного колличества строк - индикаторов статуса, с возможными ключевыми словами, и строк, являющихся возвращаемыми данными. Принята следующая нотация синтаксиса ответов, возвращаемых клиенту сервером:

  • Каждая строка завершается CRLF парой и имеет длину не более 1024 символов.
  • Индикаторами статуса являются строки, начинающиеся с символа ! (знак восклицания).
  • Строки, не начинающиеся с символа ! считаются возвращаемыми данными.
  • Одиночный символ ! со слитно следующей за ним CRLF парой является признаком завершения ответа сервера и приглашением для ввода следующей команды клиента.
  • Символ ! со следующим за ним пробелом и возможно не пустой строкой текста до CRLF должен рассматриваться клиентом только как сообщение сервера об ошибке.
  • Символ ! со слитно следующим за ним ключевым словом в верхнем регистре и CRLF парой является переключателем принадлежности к типу обьекта возвращаемых данных, которые будут следовать в дальнейших строках вплоть до очередного индикатора статуса.
  • Строки с возвращаемыми данными не могут начинаться с символа !.
  • Возвращаемые данные могут отсутстовать.

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

Клиент может посылать серию команд в одной сессии с сервером. Соединение завершается клиентом с помощью специальной команды QUIT без аргументов.
Единственной причиной преждевременного закрытия соединия по инициативе сервера может быть только Timeout - исчерпание максимального времени ожидания команд от клиента.


Типы обьектов

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

OBJECT
Первичная цель мониторинга, материнский обьект с IP адресом.
INTERFACE
Сетевой интерфейс, подобьект OBJECT.
SERVICE
Произвольный сетевой сервис, подобьект OBJECT.
BGPAS
Автономная система (номер), подобьект OBJECT.
BGPPEER
BGP пир в автономной системе (имя или IP адрес), подобьект BGPAS.
ENVMON
Контроллер окружающей среды оборудования Cisco, подобьект OBJECT.
ENVTEMP
Температурный датчик обороудования Cisco, подобьект ENVMON.

Типы обьектов протокола NetState должны строго соответствовать типам обьектов Netmond. Однако, сервер NetState может иметь и возвращать большее колличество типов обьектов, суть которых заранее не известна клиенту. В этом случае клиент самостоятельно принимает решение как использовать неизвестные ему типы обьектов, например он может их просто игнорировать. Если же клиент NetState запрашивает данные о неизвестном серверу типе обьекта, то сервер вернет сообщение об ошибке.


Команды клиента

Команды клиента протокола NetState состоят из:

  1. Ключевых слов модификаторов команды, опционально.
  2. Ключевого слова команды.
  3. Аргумента команды.

Команда подается одной строкой, где все ее члены разделяются между собой произвольным колличеством пробелов и завершаются CRLF парой. Результирующая длинна строки не может превышать 1024 символа, иначе она будет усечена сервером.

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

Модификаторы опциональны, они могут отсутствовать в команде. В настоящий момент распознаются следующие ключевые слова модификаторов:

OLD
Вернуть предыдущие значения запрашиваемых переменных. По-умолчанию возвращаются текущие значения.
MTIME
Вернуть время последней модификации запрашиваемых переменных. По-умолчанию возвращаются значения переменных. Сервер распознает этот модификатор только если он собран с опцией USE_VAR_MTIME.

Командой является ключевое слово типа обьекта, на который запрашиваются данные, или специальное ключевое слово ANY - запрос любых типов обьектов. В настоящий момент распознаются следующие ключевые слова команд:

ANY
Запрос любых (всех) данных независимо от типа их владельцев.
OBJECT
Запрос собственных данных обьектов верхнего уровня.
INTERFACE
Запрос данных только по интерфейсам на обьектах.
SERVICE
Запрос данных только по сетевым сервисам на обьектах.
BGPAS
Запрос данных только по автономным системам BGP.
BGPPEER
Запрос данных только по BGP пирам.
ENVMON
Запрос данных только по контроллерам окружающей среды Cisco.
ENVTEMP
Запрос данных только по температурным датчикам Cisco.
QUIT
Завершить работу и закрыть соединение.

Исключением из этих правил является команда выхода QUIT, она состоит из одного ключевого слова и не имеет модификаторов и аргументов. По команде QUIT сервер закрывает сессию с клиентом ничего не возвращая.

В качестве агрумента команды указывается выражение в REGEX формате, используемое для маскирования имен переменных и их полных путей - имен владельцев. По этой маске сервер должен отфильтровать данные перед выдачей клиенту.

Пример простой команды с модификатором и аргументом:

Old Any .*\r\n

Где, Old - модификатор, Any - команда и .* - агрумент. По такой команде сервер вернет предыдущие значения всех известных ему переменных независимо от принадлежности их владельцев.


Возвращаемые данные

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

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

Данные возвращаются сервером NetState построчно, где каждая строка состоит из полного названия переменной и ее значения, разделенные знаком равенства:

object!subobject!variable = value

Название переменной представлено в виде полного пути к ней в иерархии обьектов Netmond, где члены иерархии отделяются друг от друга специальным символом ! (знак восклицания).

Значение переменной представлено в виде числа (с возможной точкой) или в виде строки текста, заключенной в символы двойных апострофов, например "No error". Если значение переменной еще не определено, то в качестве значения может фигурировать ключевое слово Unused.

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

Признаком завершения вывода массива данных со всеми сопутствующими переключателями типов обьектов является одиночный символ ! - приглашение для ввода следующих команд.


Пример простой сессии

Ниже приведенный пример илюстрирует простую сессию с NetState сервером, в которой клиент получает текушие и предыдущие значения счетчиков байт интерфейсов с их тайм-штампами:


   netmon:bob:~/work> telnet localhost 3333
   Trying 127.0.0.1...
   Connected to localhost.
   Escape character is '^]'.
S: NetState server ready (timeout 30 sec.)
S: !
C: interface Octets
S: !INTERFACE
S: host-1!Serial0/0!ifInOctets = 2345522619
S: host-1!Serial0/0!ifOutOctets = 2566982883
S: !INTERFACE
S: host-1!Serial0/2!ifInOctets = 3272028327
S: host-1!Serial0/2!ifOutOctets = 1026741022
S: !
C: interface REPLY
S: !INTERFACE
S: host-1!Serial0/0!REPLYTIME = 948284131
S: !INTERFACE
S: host-1!Serial0/2!REPLYTIME = 948284131
S: !
C: old interface Octets
S: !INTERFACE
S: host-1!Serial0/0!ifInOctets = 2345415173
S: host-1!Serial0/0!ifOutOctets = 2566644924
S: !INTERFACE
S: host-1!Serial0/2!ifInOctets = 3271986926
S: host-1!Serial0/2!ifOutOctets = 1025637499
S: !
C: old interface REPLY
S: !INTERFACE
S: host-1!Serial0/0!REPLYTIME = 948284101
S: !INTERFACE
S: host-1!Serial0/2!REPLYTIME = 948284101
S: !
C: quit
   Connection closed by foreign host.


Смотри также:
Директива Trap
Встроенные переменные

© 1998-2002, Rinet Software