Примечание
В этой статье я попробую подробно расписать как работает один из важнейших модулей NOC. Описание будет основываться на состоянии разработки в текущий момент. Так как произошло достаточно много изменений с момента релиза версии 0.8, я решил назвать это описанием к версии 0.9, в надежде что до ближайшего релиза больше ничего меняться не будет, либо изменения будут минимальны. Так же по ходу статьи буду делать отметки с замечаниями моментов которые требеют дополнительного пояснения от разработчиков. Итак, попробуем...
Введение.
Service Activation это один из самых важных модулей NOC, если не самый важный. Функционал данного модуля превращает NOC из обычной системы учета с набором таблиц, в мощный инструмент для автоматизации управления сетью. Service Activation обеспечивает сбор технической информации о сети и абстрагирует ее для других модулей от типа и производителя оборудования.
Архитектура.
Принципиально данный модуль разделен на две части:
- Service Activation Engine (сокр. SAE) - центральный процесс, единая точка входа для всех задач, которые должны быть выполнены на оборудовании, распределяет все поступающие задачи между доступными активаторами
- Activator - процесс, который непосредственно выполняет подключение к оборудованию.
Активаторы объединены в пулы для распределения нагрузки по множеству процессов, но каждое сетевое устройство может обслуживаться только одним конкретным пулом
Принцип действия.
Работает все это следующим образом. На центральном сервере запускается процесс noc-sae и начинает ждать подключения от удаленных активаторов. Процесс noc-activator запускается в месте наиболее оптимальном для управления оборудованием, подключается к SAE и проходит процедуру регистрации и аутентификации, если все настройки верные в логе активатора можно будет увидеть следующее:
2014-11-24 10:28:40,755 [root] Negotiation protocol 'NOC SAE PROTOCOL (http://nocproject.org/)' version '1.0' 2014-11-24 10:28:40,763 [root] Protocol version negotiated 2014-11-24 10:28:40,767 [root] Registering as 'noc' 2014-11-24 10:28:40,778 [root] Registration accepted 2014-11-24 10:28:40,779 [root] Authenticating as noc 2014-11-24 10:28:40,812 [root] Authenticated
Все, между активатором и SAE установлен канал связи, по которому будут отправляться задачи и возвращаться результат. Данные, передаваемые по каналу сжимаются и, что важнее, шифруются, так как там же передаются логины и пароли на доступ к оборудованию.
Белое пятно
Мне неизвестно какой алгоритм и какая длина ключа используется для шифрования, поэтому невозможно оценить степень безопасности выбранного разработчиками решения, так что я бы рекомендовал не подключать активаторы через публичные сети, а использовать более известные и проверенные решения для организации безопасного канала связи активатора с SAE
Обновление. Получен комментарий от разработчика:
KEY_EXCHANGES = ["diffie-hellman-group1-sha1"] PUBLIC_KEYS = ["ssh-dss"] CIPHERS = ["aes256-cbc", "blowfish-cbc", "3des-cbc"] MACS = ["hmac-sha1", "hmac-md5"] COMPRESSIONS = ["zlib"] CIPHER_MAP = { "aes256-cbc": ("AES", 32), "blowfish-cbc": ("Blowfish", 16), "3des-cbc": ("DES3", 24), } MAC_MAP = { "hmac-sha1": hashlib.sha1, "hmac-md5": hashlib.md5 }
там протокол, эквивалентный ssh
по умолчанию будет AES 256 bit/HMAC SHA1
в следующих версиях будет обычный TLS
и JSON-RPC поверх HTTPS
и не будет protocol buffers
Так как инициатива по созданию подключения исходит от процесса активатора, это позволяет устанавливать связь через NAT или statefull firewall, что, в общем случае, упрощает развертывание удаленных активаторов.
Настройка.
Процесс noc-sae.
Настройка SAE процесса достаточно тривиальна, вот пример конфигурационного файла с описанием
[main] ## Общая секция которая есть у всех прочих процессов, не будем заострять внимание, тем более что опции достаточно очевидны logfile = /var/log/noc/noc-sae.log loglevel = info logsize = 0 logfiles = 0 syslog_host = pidfile = /var/run/noc/noc-sae.pid mrt_log = false [debug] ## Секция с опциями для отладки, необходима разработчикам, тоже проходим мимо enable_manhole = false enable_timing = false timing_base = local/timing [sae] ## Секция настроек SAE shards = default # указывает принадлежность SAE процесса одному из shards, что это и зачем тема для отдельной статьи про NOC sharding, для большинства обычных инсталляций SAE всегда будет привязан к default shard listen = 127.0.0.1 # ip адрес определяет где SAE будет ожидать подключения от активаторов, по-умолчанию стоит адрес loopback интерфейса, т.е. noc-activator должен быть запущен на том же сервере что и noc-sae, чтобы SAE слушал на всех интерфейсах можно указать адрес 0.0.0.0 port = 19701 # TCP порт на который ожидаются подключения активаторов refresh_event_filter = 600 # не знаю точно, нужно пояснение от разработчиков force_plaintext = 127.0.0.1/32 # настройка позволяющая отключить шифрование при передаче данных на активаторы подключенные с указанных ip адресов max_mrt_rate_per_sae = 0 # обе опции позволяют ограничить количество одновременно выполняемых задач, например необходимо для случаев когда TACACS сервер не справляется с потоком запросов от оборудования на аутентификацию/авторизацию подключений max_mrt_rate_per_shard = 0 # [event] strip_syslog_facility = true # не знаю точно, нужно пояснение от разработчиков strip_syslog_severity = true # не знаю точно, нужно пояснение от разработчиков
Создание пулов активаторов
Чтобы завести пул активаторов, надо через Web интерфейс пройти в Service Activation > Setup > Activators, нажать Add
Name - название пула активаторов, это же имя должно быть указано в настройках каждого процесса noc-activator, который должен подключиться и получать задачи для этого пула
Shard - указывает принадлежность пула активаторов к конкретному shard, должен совпадать с тем что указан в настройках SAE, в общем случае будет всегда default как и у SAE
Prefix Table - позволяет установить ограничение из каких сетей разрешено подключение активаторов к этому пулу. По-умолчанию существует только одна таблица "Activator::default" в которой разрешены подключения только от 127.0.0.1/32, добавить собственные можно в Main > Setup > Prefix Tables
Auth String - пароль который указывается в настройках процесса активатора в поле "secret"
Is Active - должно быть отмечено галочкой у всех активных пулов. необходимо пояснение от разработчика о поведении системы при снятии этой отметки
Min. Memebers / Min. Sessions - минимальное количество подключившихся активаторов к пулу и доступному на них сессий чтобы считать пул активным (не уверен точно, нужно пояснение разработчика)
Tags - просто теги, на функционал не влияют
Процесс noc-activator.
Попробуем разобраться с настройками активатора, тут все много интересней чем SAE.
Для начала небольшое пояснение, все процессы NOC которые работают на конкретном сервере запускаются с помощью noc-launcher, его можно строить так чтобы он запускал более одного процесса конкретного демона, это необходимо для распараллеливания нагрузки на многоядерных серверах:
[noc-activator] enabled = true user = root group = config.0 = etc/noc-activator.conf config.1 = etc/noc-activator.conf config.2 = etc/noc-activator.conf config.3 = etc/noc-activator.conf config.4 = etc/noc-activator.conf config.5 = etc/noc-activator.conf
Число означает номер инстанса, то есть копии процесса, на конкретном сервере, эти номера используются при настройке активатора.
[main] # Общая секция которая есть у всех прочих процессов logfile = /var/noc/log/noc-activator.{{instance}}.log loglevel = info logsize = 5000000 logfiles = 9 syslog_host = pidfile = /var/noc/log/run/noc-activator.{{instance}}.pid # Особая часть, есть только у активаторов, позволяет настроить логирование всех сессий связи с оборудованием log_cli_sessions = false log_cli_sessions_path = /var/log/noc/cli-sessions/{{ip}}-{{script}}-{{ts}}.log log_cli_sessions_ip_re = log_cli_sessions_script_re = log_snmp_traps = false [activator] name = noc # имя пула к которому будет подлючаться активатор secret = PASSWORD # пароль для подключения к пулу, тот что указан в поле Auth string в настройках пула ## Процесс активатора также занимается проверкой на доступность оборудования ping_instance = 1 # указывается номер инстанса, который будет заниматься отправкой icmp dedicated_ping = true # означает что инстанс не будет выполнять задачи от sae, а будет только пинговать оборудование. затрагивает только отработку скриптов, listen_instatnce может быть тем же номером что и ping_instatnce ping_count = 3 # количество попыток получить ответ прежде чем признать, что устройство недоступно ping_timeout = 2 # время ожидания ответа для каждого запроса ## Активаторы также принимают Syslog и SNMP trap от оборудования listen_instance = 0 # номер инстанса, который слушает snmp и syslog порты dedicated_collector = true # означает что инстанс не будет выполнять задачи от sae, а будет только принимать syslog и snmp trap. затрагивает только отработку скриптов, listen_instatnce может быть тем же номером что и ping_instatnce listen_traps = 0.0.0.0 # указываем на каком интерфейсе активатор будет слушать snmp traps порт (0.0.0.0 - означает все интерфейсы, или надо указать ip конкретного интерфейса) listen_syslog = 0.0.0.0 # указываем на каком интерфейсе активатор будет слушать syslog порт (0.0.0.0 - означает все интерфейсы, или надо указать ip конкретного интерфейса) listen_pm_data = 127.0.0.1 software_update = true max_scripts = 10 pm_data_secret = enable_internal_trap_parser = true [sae] host = 127.0.0.1 # ip на котором SAE ожидает подключения от активаторов, 127.0.0.1 - если активатор на том же сервере что и SAE, либо ip сервера, если активатор вынесен на отдельную машину port = 19701 # порт на котором SAE ожидает подключения local_address = [servers] listen_http = listen_ftp = listen_tftp = [ssh] key = etc/ssh/id_rsa # путь к закрытому ключу, позволяет использовать аутентификацию на оборудовании через ssh по ключу
Ух, для начала хватит. Надо будет добавить примеров по настройке для разных случаев и описать нюансы в работе некоторых приложений в Web интерфейсе
Продолжение следует...
1 Comment
Unknown User (zi)
Вот еще видео от разработчика о настройке активатора