Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Register
  • Sign in
  • N noc
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Locked Files
  • Issues 445
    • Issues 445
    • List
    • Boards
    • Service Desk
    • Milestones
    • Iterations
    • Requirements
  • Merge requests 30
    • Merge requests 30
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
    • Test Cases
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Container Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Code review
    • Insights
    • Issue
    • Repository
  • External wiki
    • External wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • noc
  • noc
  • Issues
  • #1488
Closed
Open
Issue created Dec 28, 2020 by Dmitry Volodin@dvOwner

zeroconf protocol

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

  • Мониторинг серверов и сервисов
  • Мониторинг объектов промышленной автоматики

Протокол рассчитан на подключение десятков и сотен тысяч агентов.

NVRAM

Локальные настройки агента хранятся в простейшем key-value store, в качестве которого может выступать энергонезависимая память (NVRAM) или файловая система.

Поиск сервера zeroconf

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

  • По ключу zeroconf в nvram. Агент уже сконфигурирован.
  • По ключу default-zeroconf в nvram. (Контроллеры, специально изготовленные для конкретного клиента)
  • По запросу DNS TXT noc-zeroconf.<domain>, где domain - DHCP option 15 (Domain name). (Контроллер размещается в технологических сетях с контролем над DNS и DHCP)
  • По запросу DNS TXT noc-zeroconf.. (Контроллер размещается в технологических сетях с контролем над DNS). Для перенаправления на свой zeroconf оператор может создать запись для всей сети
  • По запросу DNS TXT zeroconf.getnoc.com

После получения конфига секция zeroconf записывается в ключ nvram zeroconf и агент далее работает в штатном режиме.

Получение конфигурации

Агент запрашивает конфигурацию с zeroconf после загрузки и периодически с заданным интервалом. Конфигурация запрашивается по протоколу HTTPS.

GET /api/zeroconf/config?platform=<platform>&id=<id>&version=<version>&next_version=<version>&recovery_version=<version>

Где:

  • platform - идентификатор платформы (модель контроллера)
  • id - идентификатор контроллера (серийник/mac/etc).
  • version - текущая загруженная версия софта
  • next_version - (опционально) версия софта, которая будет активирована при следующей загрузке
  • recovery_version - (опционально) версия софта в разделе recovery

Сервер zeroconf в ответ формирует конфигурацию в формате JSON.

Reply

JSON structure

  • $version - 1, zeroconf protoocol version
  • $type - zeroconf message type
  • $changeid - версия конфига в формате DataStream Change-Id
  • config - конфигурация агента
    • zeroconf - конфигурация протокола zeroconf
      • url - URL сервера zeroconf
      • check_interval - интервал запроса конфига
      • check_jitter - разброс интервала опроса конфига. Число с плавающей точкой в интервале 0..1. Реальный интервал запроса конфига является случайным числом с равномерным распределением из интервала [check-interval * (1 - check_jitter), check-interval * (1 + `check_jitter)]
      • token - JWT token для следующего запроса конфига
    • update - настройки автообновления агента
      • url - URL сервера обновления
      • version - требуемая версия агента. Если отличается от текущей - немедленно начать процесс обновления.
    • telemetry - настройки endpoint'а для сброса телеметрии
      • type - noc - тип endpoint'а
      • url - URL endpoint'а
      • token - JWT token для сброса телеметрии
      • push_interval - интервал отправки телеметрии при буферизации
  • collectors - настройки сбора телеметрии, список объектов
    • id - id коллектора
    • collector - тип коллектора (см. далее)
    • description - описание
    • config - настройки коллектора (см. далее)
    • interval - интервал сбора
    • allow_buffer - разрешать буферизацию?
    • sensors - настройка отображения сенсоров коллектора на метрики @todo
    • thresholds - настройки порогов для аварийной отправки метрик @todo
  • discovery - настройки автоматического определения @todo
  • command - дополнительный командный поток @todo

Режим отправки телеметрии

По умолчанию собранная телеметрия буферизуется и отрправляется раз в config.telemetry.push_interval секунд. Но в случае срабатывания аварийного порога происходит попытка моментальной отправки накопленной телеметрии для оперативного формирования аварии в NOC.

Коллекторы

modbus_rtu

Сбор телеметрии по протоколу modbus RTU. Настройки (config)

  • bus - шина RS-485 (например, /dev/ttyS1)
  • speed - скорость шины
  • bits - размер сообщения в битах
  • parity - бит четности
  • stop - количество стоповых бит
  • slave_address - адрес modbus slave
  • register - регистр modbus
  • method - метод сбора
Edited Aug 09, 2021 by Dmitry Volodin
Assignee
Assign to
Time tracking