Как стать автором
Поиск
Написать публикацию
Обновить
116.59
MWS
Единый контур решений для цифровой трансформации

Тренды развития сетевой телеметрии и подход MWS к её внедрению

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров1.1K

Привет, я Борис Хасанов, и это заключительная часть цикла статей про сетевую телеметрию. В первой и второй частях рассказал про основы и базовые протоколы. Сегодня расскажу, как мы подошли к работе с телеметрией в облаке MWS и рассмотрю тренды развития сетевой телеметрии на ближайшее время.

Тренды развития сетевой телеметрии

Как читатель мог видеть, основные протоколы и механизмы для получения сетевой телеметрии плоскостей управления и передачи данных придуманы и воплощены несколько лет тому назад. Значит ли это, что всё уже придумано и развитие остановилось? Конечно, нет. Поэтому я хочу остановиться на новых предложениях, которые задают векторы или тренды дальнейшего развития сетевой телеметрии. 

На мой взгляд, правильный маркер этих трендов — работа Инженерного совета Интернета (IETF), потому что именно там вносятся предложения, в виде черновиков стандартов, по дальнейшему развитию протоколов сетевой телеметрии. В них же содержится мотивация того, зачем это нужно, и в рабочих группах проходит обсуждение этих предложений (с позитивными или негативными комментариями, которые авторы должны учесть, чтобы достичь консенсуса). Поэтому далее я сделаю короткий обзор того, что обсуждается сейчас в части сетевой телеметрии, в IETF.

Hint: коллегам, которые не захотят пробираться через списки стандартов и их описание, рекомендую сразу переходить к части TLDR и ознакомиться с выводами.

Развитие сетевой телеметрии плоскости управления

Протокол ВМР

Наименование документа

Краткое описание

RFC 8671

Добавление Adj-RIB-Out в ВМР

RFC 9069

Добавление Local RIB в ВМР

draft-ietf-grow-bmp-tlv

Новые TLV для BMP Route Monitoring and Peer Down Messages: дополняет TLV соотв. сообщений, дает возможность передавать характеристики NLRI и вендорскую информацию (имплементации в FRR и pmacct, Wireshark)

draft-ietf-grow-bmp-path-marking-tlv

BMP Extension for Path Status TLV: передача статуса пути в BMP (Invalid, Best, Primary, Backup...)

draft-ietf-grow-bmp-tlv-ebit

Поддержка Enterprise-specific TLVs in the BGP Monitoring Protocol: возможность передачи вендорской информации

draft-ietf-grow-bmp-rel

Логирование routing events в BMP: передача event-driven информации (Policy discard, Validation Fail, Mailformed packet...) и данных

draft-ietf-grow-bmp-yang

BMP Yang модель: конфигурация ВМР через Netconf или gNMI, телеметрия ВМР (конфиг и телеметрия телеметрии…)

draft-ietf-grow-bmp-bgp-rib-stats

Расширение диапазонов счетчиков статистики с 32-бит до 64

draft-lucente-grow-bmp-offline

Периодическая рассылка сообщения Peer Summary

draft-liu-grow-bmp-over-quic

Реализация ВМР поверх QUIC

Обзор развития стандартизации ВМР

Развитие сетевой телеметрии плоскости передачи данных

Протокол IPFIX

Наименование документа

Краткое описание

RFC 9487

Export SRv6 information in IPFIX

RFC 9160 

Export of MPLS Segment Routing Label Type Information in IPFIX

draft-ietf-opsawg-ipfix-on-path-telemetry

Export of Delay Performance Metrics in IP Flow Information eXport (IPFIX)

draft-spiegel-ippm-ioam-rawexport

In-situ OAM raw data export with IPFIX

Обзор развития стандартизации IPFIX

Развитие Netconf/Yang в IETF

Наименование документа

Краткое описание

RFC 8639

Subscription to YANG Notifications – описывает механизмы динамических подписок клиента на стрим событий от сервера

 

RFC 8640

Dynamic Subscription to YANG Events and Datastores over NETCONF – возможность использования клиента Netconf для запроса и получения данных из хранилища Yang-модели через динамическую подписку

RFC 8641

Subscription to YANG Notifications for Datastore Updates – расширение возможностей RPC (establish-subscription, modify-subscription, delete-subscription, resync-subscription), нотификации апдейтов, введение термина Yang-push подписок

draft-ietf-netconf-https-notif 

предлагается использование HTTPS-транспорта для сконфигурированных на клиенте подписок

draft-ietf-netconf-udp-notif 

предлагается использование UDP-транспорта для сконфигурированных на клиенте подписок

draft-ietf-netconf-distributed-notif

возможность экспорта данных с нескольких процессов, н-р, на Routing Engine

draft-ietf-netconf-yang-notifications-versioning

возможность информировать получателя об изменении версии Yang-модуля

draft-tgraf-netconf-notif-sequencing

для корреляции данных от различных Yang-push источников добавляется sysName + connection ID

draft-tgraf-netconf-yang-push-observation-time

измерение времени задержки между экспортом данных и их получением

draft-ietf-nmop-yang-message-broker-integration

Архитектура по интеграции Yang-push телеметрии с брокером сообщений Kafka

Обзор развития стандартизации Yang-push-телеметрии

Какие тенденции для развития сетевой телеметрии или TLDR

Если попытаться оценить текущие предложения по развитию ВМР, то мы увидим:

  1. Стандартизовано добавление в ВМР статистики Adj-RIB-out и Local RIB (требуйте у вашего вендора!).

  2. Предложено сделать все сообщения ВМР использующими TLV (полагаю, нет нужды объяснять, почему это так важно для развития протокола в целом).

  3. Ведётся большая работа по дополнению ВМР различного рода нужной информацией (статус пути, routing events).

  4. Прозорливые коллеги уже думают про стандартизацию ВМР поверх QUIC (хочу напомнить, что такая же работа ведётся для BGP over QUIC, уже описана его FSM — ждём имплементаций).

  5. Имеется большое количество имплементаций (с нюансами, конечно, но разве бывает иначе).

Поэтому можно с уверенностью сказать, что ВМР продолжает активно развиваться и остаётся удобным и практичным инструментом получения телеметрии о состоянии BGP и плоскости управления в целом для мультивендорных сетей.

Телеметрия плоскости передачи данных

IPFIX

Известно, что IPFIX является единственным стандартным вендоро-независимым вариантом экспорта информации о потоках трафика с оборудования c очень широким списком поддерживаемых для экспорта информационных элементов.  После добавления в этот список таких новых технологий, как SR-MPLS50, SRv6, экспорта метрик (таблица: «Обзор развития стандартизации IPFIX»), он «играет новыми красками», например, для SRv6 с его помощью мы можем понять:

  • Сколько пакетов, попавших в SR Policy, было доставлено или «пролито»?

  • По какой причине они не были доставлены?

  • Активный SID и информацию, каким протоколом он был распространён?

  • Список сегментов (SL)

  • Кто будет следующим SRv6-узлом и сколько ещё сегментов (SID) остаётся до узла назначения?

  • Какая задержка между конечными узлами?

Netconf/Yang

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

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

  • gRPC/gNMI c OpenConfig (и/или вендорскими) моделями

  • Netconf+Yang-push (IETF-модели)

Как я говорил выше, достаточно много вендоров поддерживают (в том или ином объёме) OpenConfig-модели (наряду, конечно, с собственными), и, на мой субъективный взгляд, их распространённость на текущий день выше. Однако в IETF в последнее время активно развивается второй вариант с Yang-push.

Кратко расскажу суть Yang-push: в ней возможны динамические и предварительно сконфигурированные подписки на определённые пути в Yang-хранилище. У динамических подписок есть ещё важное отличие: Yang-push-данные отправляются через другое транспортное подключение (HTTPS, UDP), т. е. такой своеобразный Control + Data Plane.

Пример RPC establish-subscription
Пример RPC establish-subscription

Оба типа этих подписок могут быть как периодическими, так и активироваться в случае каких-то изменений состояния. Если нотификации отправляются для динамических подписок, то будет использоваться предварительно установленная Netconf-сессия, а если для статических подписок, то может использоваться либо HTTPS-транспорт, либо UDP. Для стриминга апдейтов (извиняюсь за англицизмы) используются два типа нотификаций: push-update и push-change-update:

Пример push-update нотификации о состоянии интерфейса
Пример push-update нотификации о состоянии интерфейса
Пример push-change-update нотификации по состоянию интерфейса
Пример push-change-update нотификации по состоянию интерфейса

Кроме того, есть отдельный набор нотификаций о состоянии самой подписки:

  • subscription-started

  • subscription-modified

  • subscription-terminated

  • subscription-suspended

  • subscription-resumed

  • subscription-completed

  • replay-completed

Закончить часть, посвящённую развитию архитектуры Yang-push, я хотел бы кратким описанием предлагаемой целевой архитектуры интеграции сетевой телеметрии с брокером сообщений, например, Apache Kafka. Это крайне важно, т. к. нам необходимо куда-то отправлять собранные данные для хранения и последующего отображения и желательно с сохранением семантики объектов Yang. Как же видится такая интеграционная архитектура? Она приведена на схеме ниже и может показаться на первый взгляд весьма запутанной, хотя я и не являюсь автором черновика этого стандарта, но всё-таки попробую кое-что разъяснить.

Итак, на схеме мы видим несколько компонентов:

  • Маршрутизатор — Yang-push-publisher

  • Коллектор телеметрии – Yang-push-receiver

  • Брокер сообщений — Kafka, Rabbit MQ

  • Реестр для Yang-схем

  • Потребитель данных — клиентское приложение, подписывающееся на данные из Kafka и записывающее их в хранилище

  • Хранилище данных — TSDB, например

На шаге 1 — происходит обнаружение (discovery) транспортных параметров (capabilities — выбираются: протокол — HTTPS или UDP, тип кодирования — JSON/XML/ CBOR, параметры нотификаций — поддержка 'notification-envelope’ модели, параметры подписок на нотификации).

Рекомендованная архитектура интеграции Yang-push c брокером сообщений и call flow
Рекомендованная архитектура интеграции Yang-push c брокером сообщений и call flow

На шаге 2 — на маршрутизаторе конфигурируется Yang-push-подписка (статически — через конфигурацию или динамически* — через Netconf RPC).

На шаге 3 — посылаются нотификации об изменении состояния подписки от маршрутизатора (Yang-push-publisher) коллектору (Yang-push-receiver). Он добавляет возможность подписываться на определённую версию модуля Yang и, соответственно, добавляет в нотификации состояния подписки: имя модуля, его версию (revision) и метку (revision-label).

На шаге 4 — маршрутизатор отправляет коллектору либо Push-update-сообщение, либо Push-change-update, либо периодически (стриминг телеметрии начался, ура!) или в случае происшедших изменений. Для варианта стриминга в случае изменений черновик стандарта предлагает использовать специальный заголовок с указанием времени события, имени хоста и номера идентификационной последовательности, чтобы потребитель (консьюмер) данных мог понять, от кого они и когда.

Пример push-update нотификации (JSON-кодировка) с заголовком, в котором — время, имя хоста и последовательность
Пример push-update нотификации (JSON-кодировка) с заголовком, в котором — время, имя хоста и последовательность

Кроме того, не забываем про свежий черновик стандарта, позволяющий прямую публикацию Yang-push-метрик (стриминг телеметрии) непосредственно с линейных карт, параметр message-publisher-id позволяет потребителю данных понять, от какого именно процесса (источника) они. Коллеги позаботились и о ещё большей точности для поступающих данных — они предложили добавить в сообщения push-update/push-change-update т. н. обсервационный таймстамп (observation timestamp) и точку-во-времени (point-in-time).

Пример push-update нотификации (JSON-кодировка) с обсервационным тайм-аутом
Пример push-update нотификации (JSON-кодировка) с обсервационным тайм-аутом

На 5-м шаге — все Yang-зависимости должны быть определены через Yang-библиотеку, содержащую все модули Yang, хранилища данных и их схемы, а затем через Netconf RPC <get-schema> все соответствующие модули Yang должны быть запрошены с устройства.

Итак, мы добрались до 6-го шага, и пока все, на мой взгляд, было более-менее понятно и логично. Но на этом шаге начинается основная магия и, на мой личный взгляд, уровень сложности возрастает, т. к. в игру вступают компоненты, которых мы ранее не наблюдали, а именно Реестр Yang-схем (Yang Schema Registry). Как видно из названия обязательное требование к нему: поддержка Yang для определения схем. Каждая схема регистрируется в Реестре, в ответ Реестр выдает Schema ID (шаг 7), которая будет использована брокером сообщений. Авторы  рекомендуют использовать для этого Confluent Schema Registry, основная задача которой — обеспечить понимание того, как «разбирать» присылаемые данные телеметрии.

На шаге 8 — сериализованные коллектором (receiver) данные вместе со Schema ID отправляются брокеру сообщений. Он анализирует заголовок схемы и пишет данные в тот или иной топик.

Для того чтобы проверить схему на корректность, на шаге 9 брокер сообщений использует ID-подписки, чтобы запросить нужную схему у потребителя данных. На шагах 10 и 11 потребитель данных запрашивает схему у Реестра и получает её. После этого данные, вместе с обсервационным таймстампом, отправляются в хранилище.

Дело с Yang-push не ограничивается только теоретизированием, в IETF за последние пару лет проведено несколько хакатонов с тестированием с конфигурированных Yang-push-подписок (в т. ч. и interoperability), изменением их состояния, получением push-нотификаций на MVP в мультивендорном варианте и с Open Source имплементациями. Последний из этой серии проводился во время последнего IETF-121. Его результаты внушают оптимизм по развитию этой технологии, растёт число имплементаций, что не может не радовать. Не могу не отметить, что коллегам предстоит ещё много работы, т. к. пока они проверили работу целевой архитектуры только на соответствие шагам 1–5.

Ниже я привожу выдержки из результатов последнего хакатона.

Результаты проверок имплементация Yang-push в IETF

Статус верификации Yang-push для MVP-1/2, хакатон IETF-121
Статус верификации Yang-push для MVP-1/2, хакатон IETF-121
Статус верификации Yang-push для MVP-3, хакатон IETF-121
Статус верификации Yang-push для MVP-3, хакатон IETF-121

Где MVP-1 — посвящён базовым требованиям реализации Yang-push, MVP-2 — масштабированию и безопасности Yang-push, MVP-3 — оптимизации.

Участники:

  • YANG-Push Publisher — Cisco IOS XR

  • YANG-Push Publisher — 6WIND VSR

  • YANG-Push Publisher — Huawei VRP

  • YANG-Push Receiver — Pmacct

  • YANG-Push Receiver — Netgauze 2

  • udp-notifdissector — Wireshark

Подводя резюме сказанному про Yang-push, приведу мнение признанного эксперта в этой области, широко известного (легендарного) в индустрии человека Benoit Claise в моём вольном переводе: «Yang-push-архитектура и её расширения — наиболее перспективные, потому что они позволяют решить задачу сохранения семантики данных после прохождения данными всей цепочки от коллектора Yang-push до места хранения данных в хранилище, например, Time Series Database — TSDB. А семантика данных крайне важна для их последующей обработки системами ML».

Наша работа с сетевой телеметрией в облаке MWS

На nexthop 2023 мой коллега Дмитрий Дементьев выступил с докладом об адаптации SRv6 в МТС. В докладе описывается наш подход к созданию сетевой инфраструктуры нового облака в MTS Web Services (MWS).  Было очевидно, что нам будет необходимо получать данные о сетевом состоянии фабрики для обеспечения работоспособности сети и облачных сервисов.

Мы попытались сначала сформулировать основные требования к системе получения сетевой телеметрии:

  • Использование только Open Source компонентов в решении

  • Сбор данных с сетевого оборудования (коммутаторы фабрики в первую очередь) в квазиреальном времени, используя PUSH-модель

  • Телеметрия как плоскости передачи данных, так и плоскости управления

  • Сбор телеметрии на основе открытых Yang-моделей (Open Config/IETF)

  • Использование ВМР для телеметрии плоскости управления

  • Масштабируемость коллектора и других компонентов решения

  • СУБД, используемая в решении, должна отвечать требованиям также масштабируемости, быстроты записи-чтения и отказоустойчивости

  • Возможность динамического добавления новых устройств для сбора с них телеметрии

  • Гибкие возможности по созданию дашбордов

  • Развёртывание в K8s-кластере

  • Интеграция с имеющейся общей платформой observability

Было понятно, что хотя в качестве временного решения мы можем использовать традиционную poll-модель c SNMP, но в целевой архитектуре мы должны иметь именно push-модель сетевой телеметрии с подпиской на определённые данные с устройств.

Итак, в задаче построения архитектуры сбора сетевой телеметрии с самого начала нам были заданы достаточно строгие ограничения, например, интеграция с observability-платформой сразу задала жёсткие требования о том, как и в каком формате мы должны отдавать им собранные данные. Другими примерами, например, были временные и ресурсные ограничения на создание прототипа (MVP).

Суровая реальность

Первый момент, который стал менять наш подход, — это поддержка телеметрии нашим вендором коммутаторов. Выяснилось, что поддерживается только gNMI (что было в целом ожидаемо), но только в варианте со своими (вендорскими) Yang-моделями, про OpenConfig в среднесрочной перспективе можно было забыть.  Это не заставило отказаться нас от сути решения, кроме того, мы смогли получить доступ к вендорским моделям и разобраться, стриминг каких данных мы сможем получить с устройства. Мы сосредоточились на базовой информации: состоянии интерфейсов (входящий и исходящий трафик, ошибки и т. д.) плюс системных данных: утилизации ЦПУ, оперативной памяти, состоянии БП. Были и другие ограничения у вендора, из-за которых пришлось корректировать архитектуру нашего решения.

Сразу стало понятно, что одним из ключевых вопросов будет выбор коллектора или клиента для сбора сетевой телеметрии. Перед нами встала дилемма: искать какой-то существующий Open Source продукт и попытаться его использовать или создавать свой «с нуля», как говорится. После анализа наших текущих возможностей и тех ограничений, про которые я сказал выше, было принято решение использовать готовый Open Source продукт.

Как выбирали компоненты

Для Open Source вариантов работы с gNMI есть два наиболее известных варианта клиентов (коллекторов или агентов):

  • gnmic

  • Telegtaf

gnmic — прост в запуске и гибок, имеет интуитивно понятный CLI, поддерживает возможность экспорта данных в разных форматах. Telegraf — в свою очередь, намного более универсальный продукт, имеющий более 300 вариантов (plugins) импорта и экспорта информации, структурированный конфиг, возможность дополнительного препроцессинга данных при помощи скриптов, агрегации данных и т. д. Кроме того, разработчики Telegraf также делают TSDB — InfluxDB и широко известную многим Grafana. По совокупности этих характеристик мы решили использовать Telegraf для MVP, а gnmic использовали в процессе отладки. Таким образом, первоначально решили использовать все три компонента в связке: Telegraf + InfluxDB + Grafana.

Естественно, у обоих вариантов есть и свои ограничения, например, Telegraf требует рестарта после изменений конфигурационного файла (например, после добавления в него нового коммутатора).

К сожалению, Telegraf на текущий момент не поддерживает ВМР. Поэтому встал вопрос об использовании дополнительного коллектора для сбора телеметрии плоскости управления. Посмотрев на имеющиеся Open Source имплементации ВМР,  решили взять goBMP-коллектор на эту роль.

Платформа Observability (OBS)

Не могу в этой статье описать архитектуру нашей платформы observability, надеюсь, коллеги сделают подробный доклад по ней или напишут отдельную статью. Скажу лишь, что она создавалась для мониторинга разнообразных (инфраструктурных и других) сервисов, работающих в K8s. Сейчас более важно понять — как нам было необходимо интегрироваться с нею, поэтому я нарисовал следующую схему:

Представление платформы OBS с точки зрения интеграции с ней
Представление платформы OBS с точки зрения интеграции с ней

То есть практически для нас было принципиально понять, что мы должны подключаться в Kafka c определёнными IPv6-адресами и топиком (topic). В теории всё выглядело достаточно просто: Telegraf должен выступить продюсером для Кафки — и вуаля.

Прорисовка архитектуры MVP по сбору телеметрии

Итак, на первый взгляд, для сбора телеметрии всё выглядело понятно и прозрачно:

Первоначальная архитектура MVP для сбора телеметрии
Первоначальная архитектура MVP для сбора телеметрии

Сетевые устройства отдают по gNMI стрим данных (метрики) по состоянию системы и интерфейсов, а также состояние BGP-таблиц, коллекторы их принимают и сохраняют в СУБД, система визуализации отображеют их на дашбордах. Просто, не правда ли? И тут вспоминается стишок: «Гладко было на бумаге…»

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

Во-вторых, уже на старте выяснилось, что наш вендор коммутаторов не поддерживает протокол ВМР, соответственно, получать его с устройств мы не можем, а значит, надо искать альтернативное решение, в частности, попытаться получить ВМР с другой стороны: с агента маршрутизации на хостах (FRR).

В-третьих, надо решить задачу масштабирования и отказоустойчивости с прицелом на то, что вся эта архитектура будет развёртываться в K8s.

Поэтому на свет появился второй вариант архитектуры:

Второй вариант архитектуры MVP для сбора телеметрии
Второй вариант архитектуры MVP для сбора телеметрии

Во втором варианте мы попытались решить проблемы, озвученные выше. Отказоустойчивость решалась разбиением коллекторов на K8s-кластеры и дублированием стриминга от устройств, такой Active-Active-вариант. Также на этом этапе, для упрощения, мы решили не дублировать OBS ещё одним контуром визуализации и не стали устанавливать свои InfluxDB+Grafana в качестве параллельного контура, поэтому они не нарисованы на схеме. Именно с таким вариантом мы пошли на реализацию прототипа.

С какими проблемами столкнулись

gNMI-телеметрия (плоскость передачи данных)

Как уже писал выше, нам удалось разобраться с приватными вендорскими Yang-моделями. Далее нам встретились еще несколько неожиданных ограничений:

  • невозможность получения данных с элемента более низкого уровня без возможности предварительно подписаться на элемент более верхнего уровня (например, стрим телеметрии path ="/interfaces/interface[name=e0]/state/counters/in-octets" не отправлялся без предварительной подписки на path ="/interfaces/interface[name=e0]/state/counters")

  • ограничения на количество gNMI-подписок на коммутаторе в моменте

  • используемые таймстампы не распознавались корректно в Telegraf

Пришлось искать «обходные пути» (workarounds), чтобы как-то запустить это. Но про это дальше.

[[inputs.gnmi]]
  addresses = ["192.168.1.1:11111"]
  username = "user"
  password = "password"
  encoding = "json_ietf"
  redial = "10s"
  max_msg_size = "10MB"
[[inputs.gnmi.subscription]]
  name = "in-octets_e0"
  origin = "XXXX"
  path = "/interfaces/interface[name=e0]/state/counters/in-octets"
  subscription_mode = "sample"
  sample_interval = "10s"

Пример конфигурации gNMI-телеметрии для Telegraf

ВМР — телеметрия плоскости управления

Выше я уже говорил, что ВМР не поддерживается вендором наших коммутаторов на текущий момент. Именно поэтому мы решили получать информацию о состоянии таблиц BGP с агента маршрутизации на хосте — FRR.  Для минимизации количества ВМР-сессий мы решили собирать ВМР со Route Servers, имеющих пиринг со всеми FRR на хостах.

router bgp 4207710099
 bgp router-id 192.168.11.11
[SNIP]
 bmp targets test-BMP
  bmp connect 192.168.1.101 port 5050 min-retry 30000 max-retry 3000 source-interface eth2
 exit
exit

Пример конфигурации BMP для FRR 10.0

Кроме того, для проведения теста goBMP мы также подали на него стриминг ВМР-телеметрии с маршрутизатора одного известного вендора, поддерживающего ВМР в достаточно широком объёме.

И тут goBMP показал себя не с лучшей стороны, он стал работать нестабильно, и пошли следующие сообщения об ошибках:

W0607 18:17:23.730701   10632 bmpstats.go:61] unprocessed stats type:0
W0607 18:17:23.731595   10632 bmpstats.go:61] unprocessed stats type:14
W0607 18:17:23.731858   10632 bmpstats.go:61] unprocessed stats type:15
W0607 18:17:23.731865   10632 bmpstats.go:61] unprocessed stats type:16
W0607 18:17:23.732117   10632 bmpstats.go:61] unprocessed stats type:17

Ошибки, выдаваемые goBMP по неподдерживаемым статистическим отчётам

Как ясно из описания ошибок, речь идёт о том, что goBMP не поддерживает некоторые типы статистических отчётов.

В MVP мы минимально хотели видеть хотя бы статистические отчёты за номерами 7 и 8 (# routes in Adj-RIB-In, #routes in Loc-RIB) и индикации падения/поднятия сессий.

Пример BMP Peer Down Notification
Пример BMP Peer Down Notification

Однако выяснилось, что FRR на текущий момент (10.0) не поддерживает выдачу таких Peer Up / Peer Down нотификаций. Надеемся, что они появятся в каком-то из следующих релизов. Поэтому мониторинг маршрутной информации в FRR пришлось пока решать альтернативным способом.

Интеграция с OBS (Kafka)

Видимо, для того чтобы нам жизнь не казалась мёдом, выяснилось, что в силу специфики настройки Kafka в нашей платформе OBS ей нужен на входе формат данных OTLP, а этот формат, в свою очередь, не поддерживается в текущей версии Telegraf и, соответственно, первоначальный вариант с Telegraf в роли Kafka producer не заработал. Казалось, что всё пропало: «Гипс снимают, клиент уезжает…»

Как мы решали проблемы

gNMI-телеметрия — плоскость передачи данных

Проблему некорректных таймпстампов в gNMI мы с помощью вендора победили путём их модификации процессинговым скриптом Startlark (некий диалект Python). Проблему невозможности подписаться на данные нижнего уровня без подписки на данные верхнего быстро пофиксить не удалось, пришлось добавлять эти высокоуровневые подписки в конфигурацию Telegraf. Также ограничение на количество gNMI-подписок вендор пообещал устранить в ближайшем релизе софта. Нам сильно помогло плотное взаимодействие с вендором, его помощь и готовность оперативно решать выявленные проблемы.

ВМР — телеметрия плоскости управления

Проблему нестабильной работы goBMP в случае получения неподдерживаемых типов статистических отчётов мы преодолели, сделав собственный fork goBMP с некоторыми модификациями кода.

А для того чтобы всё-таки получать информацию о состоянии BGP-сессий со свитчей в фабрике (не поддерживающих ВМР), мы также нашли альтернативный вариант: посылаем Netconf-запрос на считывание BGP-сессий на свитче Python-скриптом, парсим его и далее отправляем в OBS для генерации соответствующих алертов:

NetMonBot, [03.12.2024 01:10]
BGP_OPR_NEIGH_STATE_CHANGE
 
xxx-xxx01 BGP[3487]: 2024 Dec 03 00:06:43 : xxx-xxx01 : BGP : CRITI : [BGP_OPR_NEIGH_STATE_DOWN_2]: Neighbour [XXXX:XXXX:XX:9::6] Session down due to config deletion
 
NetMonBot, [03.12.2024 01:15]
BGP_OPR_NEIGH_STATE_CHANGE
 
xxx-xxx01 BGP[3487]: 2024 Dec 03 00:06:39 : xxx-xxx01 : BGP : NOTIF : [BGP_OPR_NEIGH_STATE_CHANGE_4]: Neighbour [XXXX:XXXX:XX:9::7] Status change established -> idle
 
BGP_OPR_NEIGH_STATE_CHANGE
 
xxx-xxx01 BGP[3480]: 2024 Dec 03 00:06:59 : xxx-xxx01 : BGP : NOTIF : [BGP_OPR_NEIGH_STATE_CHANGE_4]: Neighbour [XXXX:XXXX:XX:9::7] Status change down -> up

Примеры алертов о состоянии BGP-сессий

В результате даже в отсутствие поддержки в FRR BMP Peer Up / Down Notifications мы организовали им соответствующую замену и даже более того — мы нашли вариант экспорта BGP-метрик с FRR без использования BMP как альтернативный вариант.

Интеграция с OBS (Kafka)

Мы не смирились с ситуацией неработоспособности, в нашем варианте, связки Telegraf — Kafka и, углубившись в чтение документации, выяснили, что Telegraf имеет outputs.plugin, умеющий отдавать метрики в формате Prometheus, а уже этот формат мы можем перекодировать в OTLP при помощи OpenTelemetry Collector (OTC). Хотя мы теперь приобрели новую сущность в нашей архитектуре в лице ОТС, но тем не менее нашли вариант решения нашей задачи, и архитектура MVP стала выглядеть так:

Модифицированная архитектура MVP cетевой телеметрии
Модифицированная архитектура MVP cетевой телеметрии

Это решение было подсказано коллегами из OBS, без их всесторонней помощи и содействия оперативный запуск и проверка MVP сетевой телеметрии не был бы возможен, за это им огромное спасибо!

Для небольшой справки, Telegraf также используется как коллектор телеметрии с определённых сетевых функций, работающих на хостах. Ну и самое главное, что мы добились попадания собранных метрик в платформу OBS и работоспособности MVP cетевой телеметрии в целом.

Развёртывание в K8s

Тут пришлось повозиться и прибегнуть к помощи опытных коллег из инфраструктурной команды, много работающих с K8s, и хотя тот же Telegraf имеет свой базовый helm chart, но пришлось его адаптировать к нашим реалиям, а промежуточные тесты и проверки решать через Config Map.

Целевая архитектура нашей сетевой телеметрии и планы

Взгляд на текущую и планируемую архитектуру для РМ-сети и сетевой телеметрии
Взгляд на текущую и планируемую архитектуру для РМ-сети и сетевой телеметрии

На схеме выше я показал общее высокоуровневое видение того, как мы на текущий момент видим развитие РМ в сети и применение сетевой телеметрии. Использование TWAMP-Light и Alternate marking требует дополнительных исследований и проработок. Вполне вероятно, что в итоге останется какой-то один из них. Также планируем протестировать другие варианты коллекторов ВМР. Еще ожидаем фиксации вендором имеющихся ограничений на gNMI, чтобы развернуть его уже at scale. Поэтому в текущем рассказе рано ставить точку.

На этом всё, спасибо читателям, которые прочли статью до конца.

Теги:
Хабы:
Всего голосов 4: ↑4 и ↓0+7
Комментарии0

Публикации

Информация

Сайт
mws.ru
Дата регистрации
Дата основания
Численность
501–1 000 человек
Местоположение
Россия