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
- метод сбора