Как наладить обмен информацией и выполнение подпрограмм между Системой управления сетью и процессом с помощью агента SNMP?

Большая картина:

Цель состоит в том, чтобы (C ++) подпрограммы, предоставляемые процессами, выполнялись SNMP NMS (Network Management System) через агента SNMP с одной стороны.

С другой стороны, процессам нужна способность сообщать свое состояние (например, инициализируется, активен, остановлен) и регистрировать сообщения в SNMP NMS через агента SNMP.

Наиболее многообещающий подход, который я нашел, заключается в реализации субагента C ++ Net-SNMP, который предоставляет небольшой API.

например

  • setCallback (обратный вызов c)
  • logMsg (String s)
  • setState (State st)

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

Дело в том, что подпрограммы, предоставляемые объектами обратного вызова, должны быть описаны в MIB (База управляющей информации), чтобы сделать их доступными для NMS. Поскольку конкретные подпрограммы не известны во время компиляции, я ищу способ перевести сигнатуру подпрограммы в описание SMIv2 (ASN.1) для расширения MIB во время выполнения.

Знаете ли вы структуру, инструмент или подход, который отвечает требованиям или методике, чтобы сделать подпрограммы «доступными» в MIB агента SNMP?

Можно ли даже расширить Agent MIB во время выполнения?

1

Решение

Расширение MIB во время выполнения поставило бы под угрозу назначение MIB. Предполагается, что MIB сообщает менеджеру, какие переменные доступны, и если набор переменных изменяется динамически, MIB не предоставляет эту информацию менеджеру.

Я уверен, что это можно было бы решить, если бы менеджер мог регулярно загружать файл MIB по FTP, когда это необходимо, и мог динамически адаптироваться к содержимому MIB, но я не видел NMS, способную на это. Даже если это возможно, я бы настоятельно рекомендовал против такого нарушения соглашения. Есть RFC о том, как вносить изменения в модуль MIB, и вы наверняка их нарушите.

Я думаю, что лучшее, что вы могли бы сделать, это иметь список подпрограмм в таблице (которые агент может динамически изменять во время выполнения). Затем создайте скалярную переменную для чтения / записи «runSubroutine», где Manager может установить значение индекса подпрограммы, которую он хочет запустить. Положите аргументы и возвращайте значения в других переменных. Диспетчер выполнит SNMP-обход таблицы подпрограмм, найдет индекс той, которую хочет запустить, а затем отправит команду set SNMP с аргументами и индексом подпрограммы.

В конце концов, это может сработать, но, пожалуйста, ради любви к Кнуту, рассмотрите возможность использования реального протокола RPC вместо того, чтобы пытаться втиснуть такие возможности в SNMP.

0

Другие решения