Telemetrie in Junos voor AI/ML-workloads
Auteur: Shalini Mukherjee
Invoering
Omdat AI-clusterverkeer verliesvrije netwerken met een hoge doorvoer en lage latentie vereist, is een cruciaal element van het AI-netwerk het verzamelen van monitoringgegevens. Junos Telemetry maakt gedetailleerde monitoring van belangrijke prestatie-indicatoren mogelijk, inclusief drempels en tellers voor congestiebeheer en verkeersbelastingverdeling. gRPC-sessies ondersteunen het streamen van telemetriegegevens. gRPC is een modern, open-source, high performance framework dat is gebouwd op HTTP/2-transport. Het maakt native bidirectionele streamingmogelijkheden mogelijk en bevat flexibele aangepaste metagegevens in aanvraagheaders. De eerste stap in telemetrie is om te weten welke gegevens moeten worden verzameld. We kunnen deze gegevens vervolgens in verschillende formaten analyseren. Nadat we de gegevens hebben verzameld, is het belangrijk om deze te presenteren in een formaat dat eenvoudig te monitoren is, beslissingen te nemen en de aangeboden service te verbeteren. In dit artikel gebruiken we een telemetriestack bestaande uit Telegraf, InfluxDB en Grafana. Deze telemetriestack verzamelt gegevens met behulp van een push-model. Traditionele pull-modellen zijn resource-intensief, vereisen handmatige interventie en kunnen informatiehiaten bevatten in de data die ze verzamelen. Push-modellen overwinnen deze beperkingen door data asynchroon te leveren. Ze verrijken de data door gebruik te maken van gebruiksvriendelijke tags en namen. Zodra de data in een leesbaarder formaat is, slaan we het op in een database en gebruiken we het in een interactieve visualisatie web toepassing voor het analyseren van het netwerk. Figuur 1 laat zien hoe deze stack is ontworpen voor efficiënte gegevensverzameling, -opslag en -visualisatie, van netwerkapparaten die gegevens naar de collector pushen tot de gegevens die op dashboards worden weergegeven voor analyse.
TIG-stapel
We hebben een Ubuntu-server gebruikt om alle software te installeren, inclusief de TIG-stack.
Telegraaf
Om gegevens te verzamelen gebruiken we Telegraf op een Ubuntu-server met versie 22.04.2. De Telegraf-versie die in deze demo draait, is 1.28.5.
Telegraf is een plugin-gestuurde serveragent voor het verzamelen en rapporteren van statistieken. Het gebruikt processor plugins om de data te verrijken en te normaliseren. De output plugins worden gebruikt om deze gegevens naar verschillende gegevensopslagplaatsen te sturen. In dit document gebruiken we twee plugins: één voor openconfig-sensoren en de andere voor Juniper-native sensoren.
InfluxDB
Om de data op te slaan in een time series database, gebruiken we InfluxDB. De output plugin in Telegraf stuurt de data naar InfluxDB, die het op een zeer efficiënte manier opslaat. We gebruiken V1.8 omdat er geen CLI aanwezig is voor V2 en hoger.
Grafana
Grafana wordt gebruikt om deze data te visualiseren. Grafana haalt de data uit InfluxDB en stelt gebruikers in staat om rijke en interactieve dashboards te maken. Hier draaien we versie 10.2.2.
Configuratie op de switch
Om deze stack te implementeren, moeten we eerst de switch configureren zoals weergegeven in Figuur 2. We hebben poort 50051 gebruikt. Elke poort kan hier worden gebruikt. Meld u aan bij de QFX-switch en voeg de volgende configuratie toe.
Opmerking: Deze configuratie is voor labs/POC's omdat het wachtwoord in platte tekst wordt verzonden. Gebruik SSL om dit te voorkomen.
Omgeving
Nginx
Dit is nodig als u de poort waarop Grafana wordt gehost niet kunt blootstellen. De volgende stap is om nginx op de Ubuntu-server te installeren om te dienen als een reverse proxy-agent. Zodra nginx is geïnstalleerd, voegt u de regels in Afbeelding 4 toe aan het bestand "default" en verplaatst u het bestand van /etc/nginx naar /etc/nginx/sites-enabled.
Zorg ervoor dat de firewall is aangepast om volledige toegang tot de nginx-service te verlenen, zoals weergegeven in Afbeelding 5.
Zodra nginx is geïnstalleerd en de vereiste wijzigingen zijn aangebracht, zouden we Grafana vanaf een web browser door gebruik te maken van het IP-adres van de Ubuntu-server waar alle software is geïnstalleerd.
Er is een kleine storing in Grafana waardoor u het standaardwachtwoord niet kunt resetten. Gebruik deze stappen als u dit probleem ondervindt.
Stappen die op de Ubuntu-server moeten worden uitgevoerd om het wachtwoord in Grafana in te stellen:
- Ga naar /var/lib/grafana/grafana.db
- Installeer sqllite3
of sudo apt install sqlite3 - Voer deze opdracht uit op uw terminal
of sqlite3 grafana.db - De SQLite-opdrachtprompt wordt geopend; voer de volgende query uit:
>verwijderen van gebruiker waar login='admin' - Start grafana opnieuw op en typ admin als gebruikersnaam en wachtwoord. Er wordt om een nieuw wachtwoord gevraagd.
Zodra alle software is geïnstalleerd, maakt u het configuratiebestand in Telegraf aan. Dit bestand helpt bij het ophalen van de telemetriegegevens van de switch en het pushen ervan naar InfluxDB.
Openconfig Sensor-plug-in
Bewerk op de Ubuntu-server het bestand /etc/telegraf/telegraf.conf om alle vereiste plugins en sensoren. Voor de openconfig-sensoren gebruiken we de gNMI-plug-in die is weergegeven in Afbeelding 6. Voeg voor demodoeleinden de hostnaam toe als "spine1", het poortnummer "50051" dat wordt gebruikt voor gRPC, de gebruikersnaam en het wachtwoord van de switch en het aantal seconden voor opnieuw kiezen in geval van een storing.
Voeg in de abonnementsstrofe een unieke naam toe, "cpu" voor deze specifieke sensor, het sensorpad en het tijdsinterval voor het ophalen van deze gegevens van de switch. Voeg dezelfde plugin inputs.gnmi en inputs.gnmi.subscription toe voor alle open config-sensoren. (Afbeelding 6)
Native Sensor-plug-in
Dit is een Juniper telemetrie-interface-plugin die wordt gebruikt voor native sensoren. Voeg in hetzelfde telegraf.conf-bestand de native sensor-plugin inputs.jti_openconfig_telemetry toe, waarbij de velden bijna hetzelfde zijn als openconfig. Gebruik een unieke client-ID voor elke sensor; hier gebruiken we "telegraf3". De unieke naam die hier voor deze sensor wordt gebruikt, is "mem" (Figuur 7).
Voeg ten slotte een output-plugin outputs.influxdb toe om deze sensordata naar InfluxDB te sturen. Hier heet de database “telegraf” met de gebruikersnaam “influx” en het wachtwoord “influxdb” (Figuur 8).
Zodra u het telegraf.conf-bestand hebt bewerkt, start u de telegraf-service opnieuw op. Controleer nu in de InfluxDB CLI of er metingen zijn gemaakt voor alle unieke sensoren. Typ 'influx' om de InfluxDB CLI te openen.
Zoals te zien is in Figuur 9, voer de influxDB-prompt in en gebruik de database “telegraf”. Alle unieke namen die aan de sensoren zijn gegeven, worden vermeld als metingen.
Om de uitvoer van een willekeurige meting te bekijken, alleen om er zeker van te zijn dat het telegrafbestand correct is en de sensor werkt, gebruikt u de opdracht “select * from cpu limit 1” zoals weergegeven in Afbeelding 10.
Zorg ervoor dat u InfluxDB stopt, Telegraf opnieuw opstart en InfluxDB opnieuw start telkens wanneer u wijzigingen aanbrengt in het bestand telegraf.conf.
Meld u via de browser aan bij Grafana en maak dashboards. Controleer eerst of de gegevens correct worden verzameld.
Ga naar Verbindingen > InfuxDB > Nieuwe gegevensbron toevoegen.
- Geef een naam aan deze gegevensbron. In deze demo is het "test-1".
- Gebruik onder de HTTP-stanza het IP-adres en de poort 8086 van de Ubuntu-server.
- Gebruik in de InfluxDB-gegevens dezelfde databasenaam, “telegraf”, en geef de gebruikersnaam en het wachtwoord van de Ubuntu-server op.
- Klik op Opslaan en testen. Zorg ervoor dat u het bericht 'geslaagd' ziet.
- Zodra de gegevensbron succesvol is toegevoegd, ga naar Dashboards en klik op Nieuw. Laten we een paar dashboards maken die essentieel zijn voor AI/ML-workloads in editormodus.
Examples van sensorgrafieken
De volgende zijn exampvan enkele belangrijke tellers die essentieel zijn voor het monitoren van een AI/ML-netwerk.
procenttage gebruik voor een ingangsinterface et-0/0/0 op spine-1
- Selecteer de gegevensbron als test-1.
- Selecteer in het gedeelte FROM de meting als "interface". Dit is de unieke naam die voor dit sensorpad wordt gebruikt.
- Selecteer in het gedeelte WHERE het apparaat::tag, en in de tag waarde, selecteer de hostnaam van de switch, dat wil zeggen spine1.
- In de SELECT-sectie kiest u de sensortak die u wilt bewaken; in dit geval kiest u “field(/interfaces/interface[if_name='et-0/0/0']/state/counters/if_in_1s_octets)”. Klik nu in dezelfde sectie op “+” en voeg deze berekeningswiskunde toe (/50000000000 * 100). We berekenen in principe het percentagetagHet gebruik van een 400G-interface.
- Zorg ervoor dat het FORMAT 'tijdreeks' is en geef de grafiek een naam in het ALIAS-gedeelte.
Maximale bufferbezetting voor elke wachtrij
- Selecteer de gegevensbron als test-1.
- Selecteer in het gedeelte VAN de meting als “buffer”.
- In het gedeelte WHERE zijn er drie velden om in te vullen. Selecteer apparaat::tag, en in de tag waarde selecteer de hostnaam van de switch (bijv. spine-1); EN selecteer /cos/interfaces/interface/@name::tag en selecteer de interface (d.w.z. et-0/0/0); EN selecteer ook de wachtrij, /cos/interfaces/interface/queues/queue/@queue::tag en kies wachtrijnummer 4.
- Kies in het gedeelte SELECT de sensortak die u wilt bewaken; in dit geval kiest u “field(/cos/interfaces/interface/queues/queue/PeakBufferOccupancy).”
- Zorg ervoor dat het FORMAT “tijdreeks” is en geef de grafiek een naam in het ALIAS-gedeelte.
U kunt gegevens voor meerdere interfaces in dezelfde grafiek verzamelen, zoals weergegeven in Afbeelding 17 voor et-0/0/0, et-0/0/1, et-0/0/2, enz.
PFC en ECN gemiddelde afgeleide
Om de gemiddelde afgeleide (het verschil in waarde binnen een tijdsbestek) te vinden, gebruikt u de onbewerkte querymodus.
Dit is de instroomquery die we hebben gebruikt om de gemiddelde afgeleide tussen twee PFC-waarden op et-0/0/0 van Spine-1 in een seconde te vinden.
SELECT afgeleide(gemiddelde(“/interfaces/interface[if_name='et-0/0/0′]/status/pfc-teller/tx_pkts”), 1s) VAN “interface” WAAR (“apparaat”::tag = 'Spine-1') EN $timeFilter GROEPEER OP tijd($interval)
SELECT afgeleide(gemiddelde(“/interfaces/interface[if_name='et-0/0/8′]/status/fouttellers/ecn_ce_marked_pkts”), 1s) VAN “interface” WAAR (“apparaat”::tag = 'Spine-1') EN $timeFilter GROEPEER OP tijd($interval)
Inputbronfouten betekenen afgeleide
De ruwe query voor de gemiddelde afgeleide van resourcefouten is:
SELECT afgeleide(gemiddelde(“/interfaces/interface[if_name='et-0/0/0′]/status/fouttellers/if_in_resource_errors”), 1s) VAN “interface” WAAR (“apparaat”::tag = 'Spine-1') EN $timeFilter GROEPEER OP tijd($interval)
Staartdruppels betekenen afgeleide
De ruwe query voor de gemiddelde afgeleide van tail drops is:
SELECT derived(mean(“/cos/interfaces/interface/queues/queue/tailDropBytes”), 1s) FROM “buffer” WHERE (“device”::tag = 'Blad-1' EN “/cos/interfaces/interface/@name”::tag = 'et-0/0/0' EN “/cos/interfaces/interface/wachtrijen/wachtrij/@wachtrij”::tag = '4') EN $timeFilter GROEPEER OP tijd($__interval) fill(null)
CPU-gebruik
- Selecteer de gegevensbron als test-1.
- Selecteer in het gedeelte VAN de meting als “newcpu”
- In de WHERE zijn er drie velden om in te vullen. Selecteer apparaat::tag en in de tag waarde selecteert de hostnaam van de switch (d.w.z. spine-1). EN in /components/component/properties/property/name:tag, en selecteer cpuutilization-total AND in name::tag Selecteer RE0.
- Kies in het SELECT-gedeelte de sensortak die u wilt bewaken. Kies in dit geval “field(state/value)”.
De onbewerkte query voor het vinden van de niet-negatieve afgeleide van tail drops voor meerdere switches op meerdere interfaces in bits/sec.
SELECT non_negative_derivative(mean(“/cos/interfaces/interface/queues/queue/tailDropBytes”), 1s)*8 FROM “buffer” WHERE (device::tag =~ /^Spine-[1-2]$/) en (“/cos/interfaces/interface/@name”::tag =~ /et-0\/0\/[0-9]/ of “/cos/interfaces/interface/@name”::tag=~/et-0\/0\/1[0-5]/) EN $timeFilter GROEPEER OP tijd($__interval),apparaat::tag fill(nul)
Dit waren enkele van de exampenkele grafieken die kunnen worden gemaakt voor het monitoren van een AI/ML-netwerk.
Samenvatting
Dit artikel illustreert de methode om telemetriegegevens te verzamelen en te visualiseren door grafieken te maken. Dit artikel gaat specifiek over AI/ML-sensoren, zowel native als openconfig, maar de opstelling kan voor alle soorten sensoren worden gebruikt. We hebben ook oplossingen opgenomen voor meerdere problemen die u kunt tegenkomen bij het maken van de opstelling. De stappen en uitvoer die in dit artikel worden beschreven, zijn specifiek voor de eerder genoemde versies van de TIG-stack. Het kan worden gewijzigd, afhankelijk van de versie van de software, de sensoren en de Junos-versie.
Referenties
Juniper Yang Data Model Explorer voor alle sensoropties
https://apps.juniper.net/ydm-explorer/
Openconfig-forum voor openconfig-sensoren
https://www.openconfig.net/projects/models/
Bedrijfs- en verkoophoofdkantoor
Juniper Networks, Inc.
1133 Innovatie Manier
Sunnyvale, CA 94089 VS
Telefoon: 888. JUNIPER (888.586.4737)
of +1.408.745.2000
Faxen: +1.408.745.2100
www.juniper.net
Hoofdkantoor APAC en EMEA
Juniper Networks International BV
Boeinglaan 240
1119 PZ Schiphol Rijk
Amsterdam, Nederland
Telefoon: +31.207.125.700
Faxen: +31.207.125.701
Copyright 2023 Juniper Networks. Inc. Alle rechten voorbehouden. Juniper Networks, het Juniper Networks-logo, Juniper, Junos en andere handelsmerken zijn geregistreerde handelsmerken van Juniper Networks. Inc. en/of haar dochterondernemingen in de Verenigde Staten en andere landen. Andere namen kunnen handelsmerken zijn van hun respectievelijke eigenaren. Juniper Networks aanvaardt geen verantwoordelijkheid voor eventuele onjuistheden in dit document. Juniper Networks behoudt zich het recht voor om deze publicatie te wijzigen, aan te passen, over te dragen of anderszins te herzien zonder voorafgaande kennisgeving.
Stuur feedback naar: design-center-comments@juniper.net V1.0/240807/ejm5-telemetrie-junos-ai-ml
Documenten / Bronnen
![]() |
Juniper NETWORKS Telemetrie in Junos voor AI ML Workloads Software [pdf] Gebruikershandleiding Telemetrie in Junos voor AI ML-werklastsoftware, Junos voor AI ML-werklastsoftware, AI ML-werklastsoftware, Werklastsoftware, Software |