Telemetrie în Junos pentru sarcini de lucru AI/ML
Autor: Shalini Mukherjee
Introducere
Întrucât traficul clusterului AI necesită rețele fără pierderi, cu debit mare și latență scăzută, un element critic al rețelei AI este colectarea datelor de monitorizare. Junos Telemetry permite monitorizarea granulară a indicatorilor cheie de performanță, inclusiv praguri și contoare pentru gestionarea congestionării și echilibrarea încărcării în trafic. Sesiunile gRPC acceptă transmiterea în flux a datelor de telemetrie. gRPC este un cadru modern, open-source, de înaltă performanță, care este construit pe transportul HTTP/2. Îmbunătățește capabilitățile native de streaming bidirecțional și include metadate personalizate flexibile în antetele solicitărilor. Pasul inițial în telemetrie este de a ști ce date urmează să fie colectate. Putem apoi analiza aceste date în diferite formate. Odată ce colectăm datele, este important să le prezentăm într-un format ușor de monitorizat, să luăm decizii și să îmbunătățim serviciul oferit. În această lucrare, folosim o stivă de telemetrie constând din Telegraf, InfluxDB și Grafana. Această stivă de telemetrie colectează date folosind un model push. Modelele tradiționale de atragere necesită un consum mare de resurse, necesită intervenție manuală și ar putea include lacune de informații în datele pe care le colectează. Modelele Push depășesc aceste limitări prin furnizarea de date în mod asincron. Acestea îmbogățesc datele utilizând ușor de utilizat tags si nume. Odată ce datele sunt într-un format mai lizibil, le stocăm într-o bază de date și le folosim într-o vizualizare interactivă web aplicație pentru analiza rețelei. Figura. 1 ne arată modul în care această stivă este concepută pentru colectarea, stocarea și vizualizarea eficientă a datelor, de la dispozitivele de rețea care transmit date către colector până la datele afișate pe tablouri de bord pentru analiză.
Stiva TIG
Am folosit un server Ubuntu pentru a instala tot software-ul, inclusiv stiva TIG.
telegraf
Pentru a colecta date, folosim Telegraf pe un server Ubuntu care rulează 22.04.2. Versiunea Telegraf care rulează în această demonstrație este 1.28.5.
Telegraf este un agent server bazat pe plugin pentru colectarea și raportarea valorilor. Folosește procesor plugins pentru a îmbogăți și a normaliza datele. Ieșirea plugins sunt folosite pentru a trimite aceste date către diverse magazine de date. În acest document folosim două plugins: unul pentru senzorii openconfig și celălalt pentru senzorii nativi Juniper.
InfluxDB
Pentru a stoca datele într-o bază de date cu serii de timp, folosim InfluxDB. Pluginul de ieșire din Telegraf trimite datele către InfluxDB, care le stochează într-un mod extrem de eficient. Folosim V1.8 deoarece nu există niciun CLI prezent pentru V2 și mai sus.
Grafana
Grafana este folosită pentru a vizualiza aceste date. Grafana extrage datele din InfluxDB și permite utilizatorilor să creeze tablouri de bord bogate și interactive. Aici rulăm versiunea 10.2.2.
Configurare pe comutator
Pentru a implementa această stivă, trebuie mai întâi să configurăm comutatorul așa cum se arată în Figura 2. Am folosit portul 50051. Orice port poate fi folosit aici. Conectați-vă la comutatorul QFX și adăugați următoarea configurație.
Nota: Această configurație este pentru laboratoare/POC, deoarece parola este transmisă în text clar. Utilizați SSL pentru a evita acest lucru.
Mediu
Nginx
Acest lucru este necesar dacă nu puteți expune portul pe care este găzduit Grafana. Următorul pas este să instalați nginx pe serverul Ubuntu pentru a servi ca agent proxy invers. Odată ce nginx este instalat, adăugați liniile prezentate în Figura 4 la fișierul „implicit” și mutați fișierul din /etc/nginx în /etc/nginx/sites-enabled.
Asigurați-vă că firewall-ul este ajustat pentru a oferi acces deplin la serviciul nginx, așa cum se arată în Figura 5.
Odată ce nginx este instalat și modificările necesare sunt făcute, ar trebui să putem accesa Grafana de pe un web browser utilizând adresa IP a serverului Ubuntu unde este instalat tot software-ul.
Există o mică eroare în Grafana care nu vă permite să resetați parola implicită. Utilizați acești pași dacă vă confruntați cu această problemă.
Pași care trebuie efectuati pe serverul Ubuntu pentru a seta parola în Grafana:
- Accesați /var/lib/grafana/grafana.db
- Instalați sqllite3
o sudo apt install sqlite3 - Rulați această comandă pe terminalul dvs
o sqlite3 grafana.db - Se deschide linia de comandă Sqlite; rulați următoarea interogare:
> șterge de la utilizator unde login='admin' - Reporniți grafana și tastați admin ca nume de utilizator și parolă. Se solicită o nouă parolă.
Odată ce tot software-ul este instalat, creați fișierul de configurare în Telegraf, care vă va ajuta să extrageți datele de telemetrie din comutator și să îl împingeți în InfluxDB.
Openconfig Sensor Plugin
Pe serverul Ubuntu, editați fișierul /etc/telegraf/telegraf.conf pentru a adăuga toate cele necesare plugins si senzori. Pentru senzorii openconfig, folosim pluginul gNMI prezentat în Figura 6. Pentru scopuri demonstrative, adăugați numele de gazdă ca „spine1”, numărul portului „50051” care este folosit pentru gRPC, numele de utilizator și parola comutatorului și numărul de secunde pentru reapelare în caz de eșec.
În strofa abonamentului, adăugați un nume unic, „cpu” pentru acest senzor special, calea senzorului și intervalul de timp pentru preluarea acestor date de la comutator. Adăugați același plugin inputs.gnmi și inputs.gnmi.subscription pentru toți senzorii de configurare deschisi. (Figura 6)
Plugin de senzor nativ
Acesta este un plugin de interfață de telemetrie Juniper folosit pentru senzorii nativi. În același fișier telegraf.conf, adăugați pluginul de senzor nativ inputs.jti_openconfig_telemetry unde câmpurile sunt aproape la fel ca openconfig. Utilizați un ID de client unic pentru fiecare senzor; aici, folosim „telegraf3”. Numele unic folosit aici pentru acest senzor este „mem” (Figura 7).
În cele din urmă, adăugați un plugin de ieșire outputs.influxdb pentru a trimite aceste date senzorului către InfluxDB. Aici, baza de date este numită „telegraf” cu numele de utilizator „influx” și parola „influxdb” (Figura 8).
După ce ați editat fișierul telegraf.conf, reporniți serviciul telegraf. Acum, verificați în InfluxDB CLI pentru a vă asigura că sunt create măsurători pentru toți senzorii unici. Tastați „influx” pentru a intra în CLI InfluxDB.
După cum se vede în figura. 9, introduceți promptul influxDB și utilizați baza de date „telegraf”. Toate denumirile unice date senzorilor sunt listate ca măsurători.
Pentru a vedea rezultatul oricărei măsurători, doar pentru a vă asigura că fișierul telegraf este corect și că senzorul funcționează, utilizați comanda „select * from cpu limit 1” așa cum se arată în Figura 10.
De fiecare dată când se fac modificări în fișierul telegraf.conf, asigurați-vă că opriți InfluxDB, reporniți Telegraf și apoi porniți InfluxDB.
Conectați-vă la Grafana din browser și creați tablouri de bord după ce vă asigurați că datele sunt colectate corect.
Accesați Conexiuni > InfuxDB > Adăugați o nouă sursă de date.
- Dați un nume acestei surse de date. În această demonstrație este „test-1”.
- Sub strofa HTTP, utilizați IP-ul serverului Ubuntu și portul 8086.
- În detaliile InfluxDB, utilizați același nume de bază de date, „telegraf” și furnizați numele de utilizator și parola serverului Ubuntu.
- Faceți clic pe Salvare și testare. Asigurați-vă că vedeți mesajul „de succes”.
- Odată ce sursa de date este adăugată cu succes, accesați Tablouri de bord și faceți clic pe Nou. Să creăm câteva tablouri de bord care sunt esențiale pentru sarcinile de lucru AI/ML în modul editor.
Exampfișiere ale graficelor senzorilor
Următoarele sunt exampfișierele unor contoare majore care sunt esențiale pentru monitorizarea unei rețele AI/ML.
ProcenttagUtilizarea pentru o interfață de intrare et-0/0/0 pe coloana vertebrală-1
- Selectați sursa de date ca test-1.
- În secțiunea FROM, selectați măsurarea ca „interfață”. Acesta este numele unic folosit pentru această cale de senzor.
- În secțiunea UNDE, selectați dispozitivul::tag, iar în tag valoare, selectați numele de gazdă al comutatorului, adică spine1.
- În secțiunea SELECT, alegeți ramura senzorului pe care doriți să o monitorizați; în acest caz, alegeți „field(/interfaces/interface[if_name='et-0/0/0']/state/counters/if_in_1s_octets)”. Acum, în aceeași secțiune, faceți clic pe „+” și adăugați această matematică de calcul (/50000000000 * 100). Practic calculăm procentultagutilizarea unei interfețe 400G.
- Asigurați-vă că FORMAT este „serie temporală” și denumiți graficul în secțiunea ALIAS.
Ocuparea maximă a tamponului pentru orice coadă
- Selectați sursa de date ca test-1.
- În secțiunea FROM, selectați măsurarea ca „tampon”.
- În secțiunea UNDE, există trei câmpuri de completat. Selectați dispozitivul::tag, iar în tag value selectează numele de gazdă al comutatorului (adică spine-1); ȘI selectați /cos/interfaces/interface/@name::tag și selectați interfața (adică et- 0/0/0); ȘI selectați și coada, /cos/interfaces/interface/queues/queue/@queue::tag și alegeți coada numărul 4.
- În secțiunea SELECT, alegeți ramura senzorului pe care doriți să o monitorizați; în acest caz, alegeți „field(/cos/interfaces/interface/queues/queue/PeakBufferOccupancy).”
- Asigurați-vă că FORMAT este „serie temporală” și denumiți graficul în secțiunea ALIAS.
Puteți aduna date pentru mai multe interfețe pe același grafic, așa cum se vede în Figura 17 pentru et-0/0/0, et-0/0/1, et-0/0/2 etc.
PFC și ECN înseamnă derivat
Pentru a găsi derivata medie (diferența de valoare într-un interval de timp), utilizați modul de interogare brută.
Aceasta este interogarea de aflux pe care am folosit-o pentru a găsi derivata medie între două valori PFC pe et-0/0/0 a Spine-1 într-o secundă.
SELECT derivat(mean(„/interfețe/interfață[if_name='et-0/0/0′]/state/pfc-counter/tx_pkts”), 1s) DIN „interfață” WHERE („dispozitiv”::tag = „Spine-1”) ȘI $timeFilter GROUP BY time($interval)
SELECT derivat(mean(„/interfețe/interfață[if_name='et-0/0/8′]/state/error-counters/ecn_ce_marked_pkts”), 1s) DIN „interfață” WHERE („dispozitiv”::tag = „Spine-1”) ȘI $timeFilter GROUP BY time($interval)
Erorile de resurse de intrare înseamnă derivată
Interogarea brută pentru erorile de resurse înseamnă derivată este:
SELECT derivat(mean(„/interfețe/interfață[if_name='et-0/0/0′]/state/error-counters/if_in_resource_errors”), 1s) FROM „interfață” WHERE („dispozitiv”::tag = „Spine-1”) ȘI $timeFilter GROUP BY time($interval)
Picăturile din coadă înseamnă derivat
Interogarea brută pentru picăturile de coadă derivată medie este:
SELECT derivat(medie ("/cos/interfaces/interface/queues/queue/tailDropBytes"), 1s) FROM "buffer" WHERE ("dispozitiv"::tag = „Leaf-1” ȘI „/cos/interfaces/interface/@name”::tag = „et-0/0/0” ȘI „/cos/interfaces/interface/queues/queue/@queue”::tag = '4') AND $timeFilter GROUP BY time($__interval) fill(null)
Utilizarea CPU
- Selectați sursa de date ca test-1.
- În secțiunea FROM, selectați măsurarea ca „newcpu”
- În UNDE, există trei câmpuri de completat. Selectați dispozitivul::tag iar în tag valoare selectați numele de gazdă al comutatorului (adică coloana vertebrală-1). ȘI în /components/component/properties/property/name:tagși selectați cpuutilization-total AND în nume::tag selectați RE0.
- În secțiunea SELECT, alegeți ramura senzorului pe care doriți să o monitorizați. În acest caz, alegeți „câmp(stare/valoare)”.
Interogarea brută pentru găsirea derivatei nenegative a cozii scade pentru mai multe comutatoare pe mai multe interfețe, în biți/sec.
SELECT non_negative_derivative(mean(“/cos/interfaces/interface/queues/queue/tailDropBytes”), 1s)*8 FROM „buffer” WHERE (dispozitiv::tag =~ /^Spine-[1-2]$/) și (“/cos/interfaces/interface/@name”::tag =~ /et-0\/0\/[0-9]/ sau „/cos/interfaces/interface/@name”::tag=~/et-0\/0\/1[0-5]/) ȘI $timeFilter GROUP BY time($__interval),dispozitiv::tag umple (null)
Aceștia au fost câțiva dintre exampfișiere ale graficelor care pot fi create pentru monitorizarea unei rețele AI/ML.
Rezumat
Această lucrare ilustrează metoda de extragere a datelor de telemetrie și de vizualizare a acestora prin crearea de grafice. Această lucrare vorbește în mod specific despre senzorii AI/ML, atât nativi, cât și openconfig, dar configurația poate fi utilizată pentru toate tipurile de senzori. Am inclus, de asemenea, soluții pentru mai multe probleme cu care te-ai putea confrunta în timpul creării configurării. Pașii și rezultatele descrise în această lucrare sunt specifice versiunilor stivei TIG menționate mai devreme. Acesta poate fi modificat în funcție de versiunea software-ului, de senzori și de versiunea Junos.
Referințe
Juniper Yang Data Model Explorer pentru toate opțiunile de senzor
https://apps.juniper.net/ydm-explorer/
Forum Openconfig pentru senzori openconfig
https://www.openconfig.net/projects/models/
Sediu corporativ și de vânzări
Juniper Networks, Inc.
Calea inovației 1133
Sunnyvale, CA 94089 SUA
Telefon: 888. JUNIPER (888.586.4737)
sau +1.408.745.2000
Fax: +1.408.745.2100
www.juniper.net
Sediul APAC și EMEA
Juniper Networks International BV
Boeing Avenue 240
1119 PZ Schiphol-Rijk
Amsterdam, Olanda
Telefon: +31.207.125.700
Fax: +31.207.125.701
Copyright 2023 Juniper Networks. Inc. Toate drepturile rezervate. Juniper Networks, sigla Juniper Networks, Juniper, Junos și alte mărci comerciale sunt mărci comerciale înregistrate ale Juniper Networks. inc. și/sau afiliații săi din Statele Unite și alte țări. Alte nume pot fi mărci comerciale ale proprietarilor respectivi. Juniper Networks nu își asumă nicio responsabilitate pentru eventualele inexactități din acest document. Juniper Networks își rezervă dreptul de a modifica. modifica. transferați sau revizuiți în alt mod această publicație fără notificare.
Trimite feedback la: design-center-comments@juniper.net V1.0/240807/ejm5-telemetry-junos-ai-ml
Documente/Resurse
![]() |
Juniper NETWORKS Telemetrie în Junos pentru software-ul AI ML Workloads [pdfGhid de utilizare Telemetrie în software Junos pentru AI ML Workloads, Junos pentru AI ML Workloads Software, AI ML Workloads Software, Workloads Software, Software |