Телеметрія в Junos для робочих навантажень AI/ML
Автор: Шаліні Мукерджі
вступ
Оскільки для кластерного трафіку штучного інтелекту потрібні мережі без втрат із високою пропускною здатністю та низькою затримкою, критичним елементом мережі штучного інтелекту є збір даних моніторингу. Junos Telemetry забезпечує детальний моніторинг ключових показників ефективності, включаючи порогові значення та лічильники для управління перевантаженнями та балансування навантаження трафіку. Сесії gRPC підтримують потокову передачу телеметричних даних. gRPC — це сучасна високопродуктивна платформа з відкритим вихідним кодом, яка побудована на транспорті HTTP/2. Він розширює можливості рідної двонаправленої потокової передачі та включає гнучкі спеціальні метадані в заголовках запитів. Початковий крок у телеметрії – це знати, які дані збираються. Потім ми можемо аналізувати ці дані в різних форматах. Коли ми збираємо дані, важливо представити їх у форматі, який легко контролювати, приймати рішення та покращувати пропоновані послуги. У цьому документі ми використовуємо стек телеметрії, що складається з Telegraf, InfluxDB і Grafana. Цей стек телеметрії збирає дані за допомогою моделі push. Традиційні моделі вилучення ресурсомісткі, вимагають ручного втручання та можуть містити інформаційні прогалини в даних, які вони збирають. Push-моделі долають ці обмеження, доставляючи дані асинхронно. Вони збагачують дані, використовуючи зручні для користувача tags і імена. Коли дані перебувають у більш зручному для читання форматі, ми зберігаємо їх у базі даних і використовуємо в інтерактивній візуалізації web додаток для аналізу мережі. малюнок. 1 показано, як цей стек розроблено для ефективного збору, зберігання та візуалізації даних, від мережевих пристроїв, що надсилають дані до збирача, до даних, які відображаються на інформаційних панелях для аналізу.
TIG стек
Ми використовували сервер Ubuntu для встановлення всього програмного забезпечення, включаючи стек TIG.
Телеграф
Для збору даних ми використовуємо Telegraf на сервері Ubuntu під керуванням 22.04.2. Версія Telegraf, яка працює в цій демонстрації, — 1.28.5.
Telegraf — це плагін-керований серверний агент для збору показників і звітності. Він використовує процесор plugins для збагачення та нормалізації даних. Вихід plugins використовуються для надсилання цих даних до різних сховищ даних. У цьому документі ми використовуємо два plugins: один для датчиків openconfig, а інший для власних датчиків Juniper.
InfluxDB
Щоб зберігати дані в базі даних часових рядів, ми використовуємо InfluxDB. Плагін виводу в Telegraf надсилає дані до InfluxDB, яка зберігає їх у високоефективний спосіб. Ми використовуємо V1.8, оскільки немає CLI для V2 і вище.
Графана
Grafana використовується для візуалізації цих даних. Grafana отримує дані з InfluxDB і дозволяє користувачам створювати різноманітні та інтерактивні інформаційні панелі. Тут ми використовуємо версію 10.2.2.
Конфігурація на комутаторі
Щоб реалізувати цей стек, нам спочатку потрібно налаштувати комутатор, як показано на малюнку 2. Ми використали порт 50051. Тут можна використовувати будь-який порт. Увійдіть до комутатора QFX і додайте наступну конфігурацію.
Примітка: Ця конфігурація призначена для лабораторій/POC, оскільки пароль передається відкритим текстом. Щоб уникнути цього, використовуйте SSL.
Навколишнє середовище
Nginx
Це потрібно, якщо ви не можете відкрити порт, на якому розміщено Grafana. Наступним кроком є встановлення nginx на сервері Ubuntu, який буде служити агентом зворотного проксі. Після встановлення nginx додайте рядки, показані на малюнку 4, до файлу «за замовчуванням» і перемістіть файл із /etc/nginx до /etc/nginx/sites-enabled.
Переконайтеся, що брандмауер налаштовано для повного доступу до служби nginx, як показано на малюнку 5.
Після встановлення nginx і внесення необхідних змін ми зможемо отримати доступ до Grafana з a web браузер за допомогою IP-адреси сервера Ubuntu, на якому встановлено все програмне забезпечення.
У Grafana є невеликий збій, який не дозволяє скинути пароль за умовчанням. Якщо у вас виникла ця проблема, виконайте ці дії.
Дії, які потрібно виконати на сервері Ubuntu, щоб встановити пароль у Grafana:
- Перейдіть до /var/lib/grafana/grafana.db
- Встановіть sqllite3
o sudo apt інсталювати sqlite3 - Виконайте цю команду на своєму терміналі
o sqlite3 grafana.db - Відкриється командний рядок Sqlite; запустіть наступний запит:
> видалити з користувача, де login='admin' - Перезапустіть grafana та введіть admin як ім’я користувача та пароль. Він запропонує ввести новий пароль.
Після встановлення всього програмного забезпечення створіть конфігураційний файл у Telegraf, який допоможе отримувати телеметричні дані з комутатора та надсилати їх до InfluxDB.
Плагін датчика Openconfig
На сервері Ubuntu відредагуйте файл /etc/telegraf/telegraf.conf, щоб додати всі необхідні plugins і датчики. Для датчиків openconfig ми використовуємо плагін gNMI, показаний на малюнку 6. Для демонстраційних цілей додайте ім’я хоста як «spine1», номер порту «50051», який використовується для gRPC, ім’я користувача та пароль комутатора та номер секунд для повторного набору в разі невдачі.
У розділі підписки додайте унікальну назву «cpu» для цього конкретного датчика, шлях датчика та часовий інтервал для отримання цих даних із комутатора. Додайте той самий плагін inputs.gnmi та inputs.gnmi.subscription для всіх датчиків відкритої конфігурації. (Малюнок 6)
Нативний плагін датчика
Це плагін інтерфейсу телеметрії Juniper, який використовується для рідних датчиків. У той самий файл telegraf.conf додайте власний плагін датчика inputs.jti_openconfig_telemetry, де поля майже такі ж, як у openconfig. Використовуйте унікальний ідентифікатор клієнта для кожного датчика; тут ми використовуємо «telegraf3». Унікальна назва, яка використовується тут для цього датчика, — «mem» (рис. 7).
Нарешті, додайте вихідний модуль outputs.influxdb, щоб надіслати ці дані датчиків до InuxDB. Тут база даних називається «telegraf» з іменем користувача «influx» і паролем «influxdb» (рис. 8).
Після редагування файлу telegraf.conf перезапустіть службу telegraf. Тепер перевірте в InfluxDB CLI, щоб переконатися, що вимірювання створено для всіх унікальних датчиків. Введіть “influx”, щоб увійти в InfluxDB CLI.
Як видно на малюнку. 9, увійдіть у запит influxDB і використовуйте базу даних “telegraf”. Усі унікальні назви, надані датчикам, перераховані як вимірювання.
Щоб побачити результат будь-якого вимірювання, щоб переконатися, що телеграфний файл правильний і датчик працює, скористайтеся командою «select * from cpu limit 1», як показано на малюнку 10.
Кожного разу, коли вносяться зміни до файлу telegraf.conf, обов’язково зупиняйте InfluxDB, перезапускайте Telegraf, а потім запускайте InfluxDB.
Увійдіть у Grafana з браузера та створіть інформаційні панелі, переконавшись, що дані збираються правильно.
Перейдіть до З’єднання > InfuxDB > Додати нове джерело даних.
- Дайте назву цьому джерелу даних. У цій демонстрації це «test-1».
- У розділі HTTP використовуйте IP-адресу сервера Ubuntu і порт 8086.
- У деталях InfluxDB використовуйте ту саму назву бази даних, «telegraf», і вкажіть ім’я користувача та пароль сервера Ubuntu.
- Натисніть Зберегти та перевірити. Переконайтеся, що ви бачите повідомлення «успішно».
- Після успішного додавання джерела даних перейдіть до панелей інструментів і натисніть «Створити». Давайте створимо кілька інформаційних панелей, які необхідні для роботи AI/ML у режимі редактора.
ExampLes Of Sensor Graphs
Нижче наведено напрampдеякі основні лічильники, необхідні для моніторингу мережі AI/ML.
Відсотокtage використання для вхідного інтерфейсу et-0/0/0 на spine-1
- Виберіть джерело даних як test-1.
- У розділі FROM виберіть вимірювання як «інтерфейс». Це унікальна назва, яка використовується для шляху датчика.
- У розділі ДЕ виберіть пристрій::tag, і в tag значення, виберіть ім’я хоста комутатора, тобто spine1.
- У розділі ВИБІР виберіть гілку датчика, яку потрібно контролювати; у цьому випадку оберіть «field(/interfaces/interface[if_name='et-0/0/0']/state/counters/if_in_1s_octets)». Тепер у цьому ж розділі натисніть «+» і додайте цю математику розрахунку (/50000000000 * 100). В основному ми розраховуємо відсоткиtage використання інтерфейсу 400G.
- Переконайтеся, що FORMAT має значення «time-series», і назвіть графік у розділі ALIAS.
Пікова зайнятість буфера для будь-якої черги
- Виберіть джерело даних як test-1.
- У розділі FROM виберіть вимірювання як «буфер».
- У розділі WHERE є три поля для заповнення. Виберіть пристрій::tag, і в tag значення виберіть ім'я хоста комутатора (тобто spine-1); І виберіть /cos/interfaces/interface/@name::tag і виберіть інтерфейс (тобто et- 0/0/0); І також виберіть чергу, /cos/interfaces/interface/queues/queue/@queue::tag і оберіть чергу №4.
- У розділі ВИБІР виберіть гілку датчика, яку потрібно контролювати; у цьому випадку виберіть «field(/cos/interfaces/interface/queues/queue/PeakBuerOccupancy)».
- Переконайтеся, що FORMAT має значення «time-series» і назвіть графік у розділі ALIAS.
Ви можете порівнювати дані для кількох інтерфейсів на одному графіку, як показано на малюнку 17 для et-0/0/0, et-0/0/1, et-0/0/2 тощо.
PFC і ECN середня похідна
Щоб знайти середню похідну (різниця в значенні в межах діапазону часу), використовуйте режим необробленого запиту.
Це запит на приплив, який ми використали, щоб знайти середню похідну між двома значеннями PFC на et-0/0/0 Spine-1 за секунду.
SELECT derivative(mean(“/interfaces/interface[if_name='et-0/0/0′]/state/pfc-counter/tx_pkts”), 1s) FROM “interface” WHERE (“device”::tag = 'Spine-1') І $timeFilter ГРУПУВАННЯ ЗА часом ($interval)
SELECT derivative(mean(“/interfaces/interface[if_name='et-0/0/8′]/state/error-counters/ecn_ce_marked_pkts”), 1s) FROM “interface” WHERE (“device”::tag = 'Spine-1') І $timeFilter ГРУПУВАННЯ ЗА часом ($interval)
Помилки вхідного ресурсу означають похідну
Необроблений запит для помилок ресурсу означає похідну:
SELECT derivative(mean(“/interfaces/interface[if_name='et-0/0/0′]/state/error-counters/if_in_resource_errors”), 1s) FROM “interface” WHERE (“device”::tag = 'Spine-1') І $timeFilter ГРУПУВАННЯ ЗА часом ($interval)
Хвостик означає похідне
Необроблений запит для похідної середнього значення:
SELECT derivative(mean(“/cos/interfaces/interface/queues/queue/queue/tailDropBytes”), 1s) FROM “buer” WHERE (“пристрій”::tag = 'Leaf-1' І “/cos/interfaces/interface/@name”::tag = 'et-0/0/0' І “/cos/interfaces/interface/queues/queue/@queue”::tag = '4') І $timeFilter GROUP BY time($__interval) fill(null)
Завантаження ЦП
- Виберіть джерело даних як test-1.
- У розділі FROM виберіть вимірювання як «newcpu»
- У WHERE є три поля для заповнення. Виберіть пристрій::tag і в tag значення виберіть ім'я хоста комутатора (тобто spine-1). І в /components/component/properties/property/name:tagі виберіть cpuutilization-total AND у name::tag виберіть RE0.
- У розділі ВИБІР виберіть гілку датчика, яку потрібно контролювати. У цьому випадку виберіть «поле (стан/значення)».
Необроблений запит для знаходження невід’ємної похідної хвоста для кількох комутаторів на кількох інтерфейсах у бітах/с.
SELECT non_negative_derivative(mean(“/cos/interfaces/interface/queues/queue/tailDropBytes”), 1s)*8 FROM “buer” WHERE (пристрій::tag =~ /^Spine-[1-2]$/) і (“/cos/interfaces/interface/@name”::tag =~ /et-0\/0\/[0-9]/ або “/cos/interfaces/interface/@name”::tag=~/et-0\/0\/1[0-5]/) І $timeFilter GROUP BY time($__interval),device::tag заповнити (null)
Це були деякі з колишніхampфайли графіків, які можна створити для моніторингу мережі AI/ML.
Резюме
Ця стаття ілюструє метод отримання телеметричних даних і візуалізації їх шляхом створення графіків. У цьому документі конкретно йдеться про датчики AI/ML, як рідні, так і openconfig, але налаштування можна використовувати для всіх типів датчиків. Ми також включили рішення для багатьох проблем, з якими ви можете зіткнутися під час створення налаштування. Етапи та результати, описані в цьому документі, є специфічними для версій стека TIG, згаданих раніше. Він може змінюватися залежно від версії програмного забезпечення, датчиків і версії Junos.
Список літератури
Juniper Yang Data Model Explorer для всіх варіантів датчиків
https://apps.juniper.net/ydm-explorer/
Форум Openconfig для сенсорів openconfig
https://www.openconfig.net/projects/models/
Корпоративний і торговий штаб
Juniper Networks, Inc.
1133 Шлях інновацій
Саннівейл, Каліфорнія 94089 США
Телефон: 888. JUNIPER (888.586.4737)
або +1.408.745.2000
Факс: +1.408.745.2100
www.juniper.net
Штаб-квартира APAC і EMEA
Juniper Networks International BV
Boeing Avenue 240
1119 PZ Schiphol-Rijk
Амстердам, Нідерланди
Телефон: +31.207.125.700
Факс: +31.207.125.701
Авторське право 2023 Juniper Networks. Inc. Усі права захищені. Juniper Networks, логотип Juniper Networks, Juniper, Junos та інші торгові марки є зареєстрованими торговими марками Juniper Networks. вкл. та/або її філії в США та інших країнах. Інші назви можуть бути товарними знаками відповідних власників. Juniper Networks не несе відповідальності за будь-які неточності в цьому документі. Juniper Networks залишає за собою право вносити зміни. змінювати. передавати або іншим чином переглядати цю публікацію без попередження.
Надіслати відгук до: design-center-comments@juniper.net V1.0/240807/ejm5-telemetry-junos-ai-ml
Документи / Ресурси
![]() |
Телеметрія Juniper NETWORKS у програмному забезпеченні Junos for ML ML Workloads [pdfПосібник користувача Телеметрія в Junos for AI ML Workloads Software, Junos for AI ML Workloads Software, AI ML Workloads Software, Workloads Software, Software |