Telemetría en Junos para cargas de traballo de IA/ML
Autor: Shalini Mukherjee
Introdución
Como o tráfico do clúster de IA require redes sen perdas con alto rendemento e baixa latencia, un elemento crítico da rede de IA é a recollida de datos de monitorización. Junos Telemetry permite un seguimento granular dos indicadores clave de rendemento, incluídos limiares e contadores para a xestión da conxestión e o equilibrio da carga de tráfico. As sesións de gRPC admiten a transmisión de datos de telemetría. gRPC é un marco moderno, de código aberto e de alto rendemento que se basea no transporte HTTP/2. Potencia as capacidades nativas de transmisión bidireccional e inclúe metadatos personalizados flexíbeis nas cabeceiras das solicitudes. O paso inicial en telemetría é saber que datos se van recoller. Despois podemos analizar estes datos en varios formatos. Unha vez recollidos os datos, é importante presentalos nun formato que sexa fácil de controlar, tomar decisións e mellorar o servizo que se ofrece. Neste artigo, usamos unha pila de telemetría formada por Telegraf, InfluxDB e Grafana. Esta pila de telemetría recolle datos mediante un modelo push. Os modelos de extracción tradicionais requiren un uso intensivo de recursos, requiren intervención manual e poden incluír lagoas de información nos datos que recollen. Os modelos push superan estas limitacións entregando datos de forma asíncrona. Eles enriquecen os datos mediante o uso fácil de usar tags e nomes. Unha vez que os datos están nun formato máis lexible, almacenámolos nunha base de datos e utilizámolos nunha visualización interactiva web aplicación para analizar a rede. Figura. A figura 1 móstranos como está deseñada esta pila para a recollida, almacenamento e visualización de datos eficientes, desde os dispositivos de rede que envían datos ao colector ata os datos que se amosan nos paneis para a súa análise.
Pila TIG
Usamos un servidor Ubuntu para instalar todo o software, incluíndo a pila TIG.
Telegrafa
Para recoller datos, usamos Telegraf nun servidor Ubuntu que executa o 22.04.2. A versión de Telegraf que se executa nesta demostración é a 1.28.5.
Telegraf é un axente de servidor impulsado por complementos para recoller e informar métricas. Usa un procesador plugins para enriquecer e normalizar os datos. A saída plugins úsanse para enviar estes datos a varios almacéns de datos. Neste documento utilizamos dous plugins: un para sensores openconfig e outro para sensores nativos de Juniper.
InfluxDB
Para almacenar os datos nunha base de datos de series temporais, usamos InfluxDB. O complemento de saída en Telegraf envía os datos a InfluxDB, que os almacena dun xeito altamente eficiente. Estamos a usar a versión 1.8 xa que non hai ningunha CLI para a versión 2 ou superior.
Grafana
Grafana úsase para visualizar estes datos. Grafana extrae os datos de InfluxDB e permite aos usuarios crear paneis de control ricos e interactivos. Aquí estamos executando a versión 10.2.2.
Configuración no Switch
Para implementar esta pila, primeiro necesitamos configurar o conmutador como se mostra na Figura 2. Usamos o porto 50051. Aquí pódese usar calquera porto. Inicie sesión no interruptor QFX e engada a seguinte configuración.
Nota: Esta configuración é para laboratorios/POC xa que o contrasinal transmítese en texto claro. Use SSL para evitar isto.
Medio ambiente
Nginx
Isto é necesario se non podes expoñer o porto no que está aloxado Grafana. O seguinte paso é instalar nginx no servidor Ubuntu para servir como axente de proxy inverso. Unha vez instalado nginx, engade as liñas mostradas na Figura 4 ao ficheiro "predeterminado" e move o ficheiro de /etc/nginx a /etc/nginx/sites-enabled.
Asegúrese de que o firewall estea axustado para dar acceso total ao servizo nginx como se mostra na Figura 5.
Unha vez instalado nginx e feitos os cambios necesarios, deberíamos poder acceder a Grafana desde a web navegador utilizando o enderezo IP do servidor Ubuntu onde está instalado todo o software.
Hai un pequeno fallo en Grafana que non che permite restablecer o contrasinal predeterminado. Use estes pasos se se atopa con este problema.
Pasos a realizar no servidor Ubuntu para establecer o contrasinal en Grafana:
- Vaia a /var/lib/grafana/grafana.db
- Instalar sqllite3
o sudo apt install sqlite3 - Executa este comando no teu terminal
o sqlite3 grafana.db - Ábrese o indicador de comandos de Sqlite; executa a seguinte consulta:
>eliminar do usuario onde login='admin' - Reinicie grafana e escriba admin como nome de usuario e contrasinal. Solicita un novo contrasinal.
Unha vez instalado todo o software, cree o ficheiro de configuración en Telegraf que axudará a extraer os datos de telemetría do interruptor e empúxao a InfluxDB.
Complemento de sensor Openconfig
No servidor Ubuntu, edite o ficheiro /etc/telegraf/telegraf.conf para engadir todo o necesario plugins e sensores. Para os sensores openconfig, usamos o complemento gNMI que se mostra na Figura 6. Para fins de demostración, engade o nome de host como "spine1", o número de porto "50051" que se usa para gRPC, o nome de usuario e o contrasinal do switch e o número. de segundos para volver a marcar en caso de falla.
Na estrofa da subscrición, engade un nome único, "cpu" para este sensor en particular, a ruta do sensor e o intervalo de tempo para coller estes datos do interruptor. Engade o mesmo complemento inputs.gnmi e inputs.gnmi.subscription para todos os sensores de configuración abertos. (Figura 6)
Complemento de sensor nativo
Este é un complemento de interface de telemetría de Juniper usado para sensores nativos. No mesmo ficheiro telegraf.conf, engade o complemento de sensor nativo inputs.jti_openconfig_telemetry onde os campos son case os mesmos que openconfig. Use un ID de cliente único para cada sensor; aquí, usamos "telegraf3". O nome único usado aquí para este sensor é "mem" (Figura 7).
Por último, engade un complemento de saída outputs.influxdb para enviar os datos deste sensor a InfluxDB. Aquí, a base de datos chámase "telegraf" co nome de usuario como "influx" e contrasinal "influxdb" (Figura 8).
Despois de editar o ficheiro telegraf.conf, reinicie o servizo de telegraf. Agora, comprobe a CLI de InfluxDB para asegurarse de que se crean medidas para todos os sensores únicos. Escriba "influx" para entrar na CLI de InfluxDB.
Como se ve na figura. 9, introduza o indicador de influxDB e use a base de datos "telegraf". Todos os nomes únicos dados aos sensores están listados como medidas.
Para ver a saída de calquera medida, só para asegurarse de que o ficheiro de telegraf é correcto e que o sensor funciona, use o comando "seleccionar * do límite da CPU 1" como se mostra na Figura 10.
Cada vez que se fagan cambios no ficheiro telegraf.conf, asegúrate de deter InfluxDB, reiniciar Telegraf e despois iniciar InfluxDB.
Inicie sesión en Grafana desde o navegador e cree paneis despois de asegurarse de que os datos se recollen correctamente.
Vaia a Conexións > InfuxDB > Engadir nova fonte de datos.
- Dálle un nome a esta fonte de datos. Nesta demostración é "test-1".
- Baixo a estrofa HTTP, use a IP do servidor Ubuntu e o porto 8086.
- Nos detalles de InfluxDB, use o mesmo nome da base de datos, "telegraf", e proporcione o nome de usuario e o contrasinal do servidor Ubuntu.
- Fai clic en Gardar e probar. Asegúrate de ver a mensaxe "con éxito".
- Unha vez que se engade a fonte de datos con éxito, vai a Paneles e fai clic en Novo. Imos crear algúns paneis que son esenciais para as cargas de traballo de AI/ML no modo editor.
Exampos de gráficos de sensores
Os seguintes son os exampficheiros dalgúns contadores principais que son esenciais para supervisar unha rede de IA/ML.
Porcenttage utilización para unha interface de entrada et-0/0/0 en spine-1
- Seleccione a fonte de datos como proba-1.
- Na sección DE, seleccione a medida como "interfaz". Este é o nome único usado para esta ruta do sensor.
- Na sección ONDE, selecciona o dispositivo::tag, e no tag valor, seleccione o nome de host do switch, é dicir, spine1.
- Na sección SELECCIONAR, escolla a rama do sensor que quere supervisar; neste caso, escolla "field(/interfaces/interface[if_name='et-0/0/0']/state/counters/if_in_1s_octets)". Agora, na mesma sección, fai clic en "+" e engade esta matemática de cálculo (/50000000000 * 100). Basicamente estamos calculando o porcentaxetage utilización dunha interface 400G.
- Asegúrate de que o FORMATO é "serie temporal" e nomea o gráfico na sección ALIAS.
Ocupación máxima do buffer para calquera cola
- Seleccione a fonte de datos como proba-1.
- Na sección DE, seleccione a medida como "búfer".
- Na sección ONDE hai tres campos para cubrir. Seleccionar dispositivo::tag, e no tag value seleccione o nome de host do interruptor (é dicir, spine-1); E selecciona /cos/interfaces/interface/@name::tag e seleccione a interface (é dicir, et- 0/0/0); E selecciona tamén a cola, /cos/interfaces/interface/queues/queue/@queue::tag e escolle a cola número 4.
- Na sección SELECCIONAR, escolla a rama do sensor que quere supervisar; neste caso, escolla "field(/cos/interfaces/interface/queues/queue/PeakBufferOccupancy)."
- Asegúrate de que o FORMATO é "serie temporal" e nomea o gráfico na sección ALIAS.
Podes agrupar datos de varias interfaces no mesmo gráfico como se ve na Figura 17 para et-0/0/0, et-0/0/1, et-0/0/2, etc.
PFC e ECN significan derivada
Para atopar a derivada media (a diferenza de valor dentro dun intervalo de tempo), use o modo de consulta en bruto.
Esta é a consulta de afluencia que usamos para atopar a derivada media entre dous valores de PFC en et-0/0/0 de Spine-1 nun segundo.
SELECCIONAR derivado(mean(“/interfaces/interface[if_name='et-0/0/0′]/state/pfc-counter/tx_pkts”), 1s) FROM “interface” WHERE (“dispositivo”::tag = 'Columna vertebral-1') E $timeFiltro GRUPO POR tempo ($intervalo)
SELECCIONAR derivado(mean(“/interfaces/interface[if_name='et-0/0/8′]/state/error-counters/ecn_ce_marked_pkts”), 1s) FROM “interface” WHERE (“dispositivo”::tag = 'Columna vertebral-1') E $timeFiltro GRUPO POR tempo ($intervalo)
Os erros dos recursos de entrada significan derivados
A consulta en bruto para erros de recursos significa derivada é:
SELECCIONAR derivado(mean(“/interfaces/interface[if_name='et-0/0/0′]/state/error-counters/if_in_resource_errors”), 1s) FROM “interface” WHERE (“dispositivo”::tag = 'Columna vertebral-1') E $timeFiltro GRUPO POR tempo ($intervalo)
As gotas de cola significan derivada
A consulta en bruto para a derivada media de caídas de cola é:
SELECCIONAR derivado(media ("/cos/interfaces/interface/queues/queue/tailDropBytes"), 1s) FROM "buffer" WHERE ("dispositivo"::tag = "Folla-1" E "/cos/interfaces/interface/@nome"::tag = 'et-0/0/0' E "/cos/interfaces/interface/queues/queue/@queue"::tag = '4') E $timeFilter GROUP BY time($__interval) fill(null)
Utilización da CPU
- Seleccione a fonte de datos como proba-1.
- Na sección DE, seleccione a medida como "newcpu"
- No DONDE hai tres campos para cubrir. Seleccionar dispositivo::tag e no tag value seleccione o nome de host do switch (é dicir, spine-1). E en /components/component/properties/property/nome:tag, e seleccione cpuutilization-total AND no nome::tag seleccione RE0.
- Na sección SELECCIONAR, escolla a rama do sensor que quere supervisar. Neste caso, escolla "campo(estado/valor)".
A consulta en bruto para atopar a derivada non negativa das caídas de cola para varios interruptores en múltiples interfaces en bits/s.
SELECT non_negative_derivative(mean(“/cos/interfaces/interface/queues/queue/tailDropBytes”), 1s)*8 FROM “buffer” WHERE (dispositivo::tag =~ /^Spine-[1-2]$/) e ("/cos/interfaces/interface/@name"::tag =~ /et-0\/0\/[0-9]/ ou "/cos/interfaces/interface/@name"::tag=~/et-0\/0\/1[0-5]/) E $timeFilter GROUP BY time($__interval),dispositivo::tag recheo (nulo)
Estes foron algúns dos exampficheiros dos gráficos que se poden crear para supervisar unha rede AI/ML.
Resumo
Este artigo ilustra o método de extraer datos de telemetría e visualizalos mediante a creación de gráficos. Este artigo fala específicamente dos sensores AI/ML, tanto nativos como openconfig, pero a configuración pódese usar para todo tipo de sensores. Tamén incluímos solucións para varios problemas que podes enfrontar ao crear a configuración. Os pasos e saídas descritos neste documento son específicos para as versións da pila TIG mencionadas anteriormente. Está suxeito a cambios dependendo da versión do software, dos sensores e da versión de Junos.
Referencias
Juniper Yang Data Model Explorer para todas as opcións de sensor
https://apps.juniper.net/ydm-explorer/
Foro Openconfig para sensores openconfig
https://www.openconfig.net/projects/models/
Sede Corporativa e Comercial
Juniper Networks, Inc.
1133 Camiño da Innovación
Sunnyvale, CA 94089 EUA
Teléfono: 888. JUNIPER (888.586.4737)
ou +1.408.745.2000
Fax: +1.408.745.2100
www.juniper.net
Sede APAC e EMEA
Juniper Networks International BV
Boeing Avenue 240
1119 PZ Schiphol-Rijk
Amsterdam, Países Baixos
Teléfono: +31.207.125.700
Fax: +31.207.125.701
Copyright 2023 Juniper Networks. Inc. Todos os dereitos reservados. Juniper Networks, o logotipo de Juniper Networks, Juniper, Junos e outras marcas comerciais son marcas rexistradas de Juniper Networks. inc. e/ou as súas filiales nos Estados Unidos e noutros países. Outros nomes poden ser marcas comerciais dos seus respectivos propietarios. Juniper Networks non asume ningunha responsabilidade por calquera imprecisión neste documento. Juniper Networks resérvase o dereito de cambiar. modificar. transferir ou revisar esta publicación sen previo aviso.
Enviar comentarios a: design-center-comments@juniper.net V1.0/240807/ejm5-telemetry-junos-ai-ml
Documentos/Recursos
![]() |
Telemetría de Juniper NETWORKS en Junos para o software de cargas de traballo de AI ML [pdfGuía do usuario Telemetría en Junos para AI ML Workloads Software, Junos para AI ML Workloads Software, AI ML Workloads Software, Workloads Software, Software |