Condividi tramite


Come implementare l'osservabilità di IoT Edge usando il monitoraggio e la risoluzione dei problemi

Si applica a:IoT Edge 1.5 segno di spunta IoT Edge 1.5

Importante

IoT Edge 1.5 LTS è la versione supportata. IoT Edge 1.4 LTS è di fine vita a partire dal 12 novembre 2024. Se si usa una versione precedente, vedere Aggiornare IoT Edge.

In questo articolo vengono illustrati i concetti e le tecniche per l'implementazione delle dimensioni di osservabilità: misurazione e monitoraggio erisoluzione dei problemi. Vengono illustrati gli argomenti seguenti:

  • Definire gli indicatori di prestazioni del servizio da monitorare
  • Misurare gli indicatori di prestazioni del servizio usando le metriche
  • Monitorare le metriche e rilevare i problemi usando le cartelle di lavoro di Monitoraggio di Azure
  • Risolvere i problemi di base usando cartelle di lavoro curate
  • Risolvere i problemi avanzati usando la traccia distribuita e i log correlati
  • Facoltativamente, distribuire uno scenario di esempio in Azure per praticare le informazioni apprese

Sceneggiatura

Per andare oltre le considerazioni astratte, si userà uno scenario reale che raccoglie le temperature della superficie dell'oceano dai sensori in Azure IoT.

La Niña

Diagramma che mostra la soluzione La Niña che raccoglie la temperatura della superficie dai sensori e lo invia ad Azure IoT Edge.

Il servizio La Niña misura la temperatura della superficie nell'Oceano Pacifico per prevedere gli invernali di La Niña. I buoi nell'oceano hanno dispositivi IoT Edge che inviano dati sulla temperatura della superficie al cloud di Azure. Un modulo personalizzato in ogni dispositivo IoT Edge pre-elabora i dati di telemetria prima di inviarli al cloud. Nel cloud, le Azure Functions di backend elaborano i dati e li salvano in Azure Blob Storage. I client del servizio, ad esempio flussi di lavoro di inferenza ml, sistemi decisionali e interfacce utente diverse, possono ottenere messaggi con dati relativi alla temperatura da Archiviazione BLOB di Azure.

Misurazione e monitoraggio

Ora verrà creata una soluzione di misurazione e monitoraggio per il servizio La Niña incentrata sul valore aziendale.

Oggetto della misurazione e del monitoraggio

Per comprendere ciò che verrà monitorato, è necessario comprendere cosa fa effettivamente il servizio e quali sono i client del servizio previsti dal sistema. In questo scenario, le aspettative di un consumer di servizi La Niña comune potrebbero essere classificate in base ai fattori seguenti:

  • Copertura. I dati provengono dalla maggior parte delle boe installate
  • Aggiornamento. I dati provenienti dalle boe sono aggiornati e pertinenti
  • Velocità effettiva. I dati sulla temperatura vengono forniti dalle boe senza ritardi significativi
  • Correttezza. Il rapporto dei messaggi persi (errori) è ridotto

La soddisfazione relativa a questi fattori implica che il servizio funziona in base alle aspettative del cliente.

Il passaggio successivo consiste nella definizione di strumenti per misurare i valori di tali fattori. Questo processo viene eseguito dagli indicatori del livello di servizio (SLI) seguenti:

Indicatore del livello di servizio Fattori
Rapporto tra i dispositivi on-line e il numero totale di dispositivi Copertura
Rapporto tra i dispositivi che segnalano frequentemente e il numero di dispositivi che segnalano Aggiornamento, velocità effettiva
Rapporto tra i dispositivi che consegnano correttamente i messaggi e il numero totale di dispositivi Correttezza
Rapporto tra i dispositivi che consegnano rapidamente i messaggi e il numero totale di dispositivi Velocità effettiva.

A tale scopo, è possibile applicare una scala scorrevole su ogni indicatore e definire valori di soglia esatti che rappresentano ciò che comporta per il cliente essere "soddisfatto". Per questo scenario, vengono selezionati i valori soglia di esempio, come descritto nella tabella seguente con obiettivi formali del livello di servizio :For this scenario, we select sample threshold values as laid out in the following table with formal Service Level Objectives (SLOs):

Obiettivo del livello di servizio Fattore
Il 90% dei dispositivi ha segnalato metriche non oltre di 10 minuti fa (erano online) per l'intervallo di osservazione Copertura
Il 95% dei dispositivi online invia la temperatura 10 volte al minuto per l'intervallo di osservazione Aggiornamento, velocità effettiva
Il 99% dei dispositivi online consegna correttamente i messaggi con meno del 5% degli errori per l'intervallo di osservazione Correttezza
Il 95% dei dispositivi online recapita il 90° percentile dei messaggi entro 50 ms per l'intervallo di osservazione Velocità effettiva.

La definizione degli SLO deve descrivere anche l'approccio del modo in cui vengono misurati i valori degli indicatori:

  • Intervallo di osservazione: 24 ore. Le affermazioni SLO sono vere nelle ultime 24 ore. Ciò significa che se un SLI si interrompe e viola un SLO corrispondente, sono necessarie 24 ore dopo che l'SLI è stato risolto per considerare di nuovo valido l'SLO.
  • Frequenza di misurazione: 5 minuti. Le misurazioni vengono eseguite per valutare i valori SLI ogni 5 minuti.
  • Oggetto delle misurazioni: l'interazione tra il dispositivo IoT e il cloud, un ulteriore consumo dei dati sulla temperatura non rientra nell'ambito.

Come viene eseguita la misurazione

A questo punto, è chiaro cosa verrà misurato e quali valori di soglia verranno usati per determinare se il servizio viene eseguito in base alle aspettative.

È una pratica comune misurare gli indicatori del livello di servizio, come quelli definiti, tramite metriche. Questo tipo di dati di osservabilità è considerato relativamente piccolo in valori. Viene prodotto da vari componenti di sistema e raccolto in un back-end di osservabilità centrale da monitorare con dashboard, cartelle di lavoro e avvisi.

Quali sono i componenti di cui è costituito il servizio La Niña:

Diagramma dei componenti di La Niña, inclusi i dispositivi IoT Edge e i servizi di Azure

Esiste un dispositivo IoT Edge con Temperature Sensor modulo personalizzato (C#) che genera un valore di temperatura e lo invia a monte con un messaggio di telemetria. Per questo messaggio viene instradato a un altro modulo personalizzato Filter (C#). Questo modulo controlla la temperatura ricevuta rispetto a una finestra di soglia (0-100 gradi Celsius). Se la temperatura si trova all'interno della finestra, FilterModule invia il messaggio di telemetria al cloud.

Nel cloud, il messaggio viene elaborato dal back-end. Il back-end è costituito da una catena di due funzioni di Azure e un account di archiviazione. La funzione .NET di Azure preleva il messaggio di telemetria dall'endpoint degli eventi dell'hub IoT, lo elabora e lo invia alla funzione Java di Azure. La funzione Java salva il messaggio nel contenitore BLOB dell'account di archiviazione.

Un dispositivo hub IoT include i moduli di sistema edgeHub e edgeAgent. Questi moduli espongono tramite un endpoint Prometheus un elenco di metriche predefinite. Queste metriche vengono raccolte e inviate al servizio Log Analytics di Monitoraggio di Azure dal modulo dell'agente di raccolta metriche in esecuzione nel dispositivo IoT Edge. Oltre ai moduli di sistema, i moduli Temperature Sensor e Filter possono essere instrumentati anche con alcune metriche specifiche dell'azienda. Tuttavia, gli indicatori del livello di servizio definiti possono essere misurati solo con le metriche predefinite. A questo punto, quindi, non occorrono ulteriori implementazioni.

In questo scenario esiste una flotta di 10 boe. Una delle boe è intenzionalmente configurata per il malfunzionamento in modo da poter dimostrare il rilevamento e la successiva risoluzione del problema.

Come si esegue il monitoraggio

Verranno monitorati gli obiettivi del livello di servizio (SLO) e gli indicatori del livello di servizio (SLI) corrispondenti con le cartelle di lavoro di Monitoraggio di Azure. Questa distribuzione dello scenario include la cartella di lavoro SLO/SLI La Nina assegnata all'hub IoT.

Screenshot del monitoraggio dell'hub IoT che mostra le cartelle di lavoro. Dalla Raccolta nel portale di Azure.

Per ottimizzare l'esperienza utente, le cartelle di lavoro sono progettate per seguire il concetto glance - >scan - > commit:

Occhiata

A questo livello, è possibile vedere l'intera immagine a colpo d'occhio. I dati vengono aggregati e rappresentati a livello di flotta:

Screenshot del report sintetico del monitoraggio nel portale di Azure che mostra un problema con la copertura dei dispositivi e l’aggiornamento dei dati.

Da ciò che è possibile vedere, il servizio non funziona in base alle aspettative. C'è una violazione dell'SLO relativo all'aggiornamento dei dati. Solo il 90% dei dispositivi invia i dati frequentemente, mentre i clienti del servizio si attendono il 95%.

Tutti i valori SLO e soglia sono configurabili nella scheda delle impostazioni della cartella di lavoro:

Screenshot delle impostazioni della cartella di lavoro nel portale di Azure.

Scansione

Facendo clic sullo SLO violato, è possibile eseguire il drill-down al livello scan e vedere come i dispositivi contribuiscono al valore SLI aggregato.

Screenshot della frequenza dei messaggi di dispositivi diversi.

È presente un singolo dispositivo (su 10) che invia i dati di telemetria al cloud "raramente". Nella definizione di SLO è stato dichiarato che "frequentemente" significa almeno 10 volte al minuto. La frequenza di questo dispositivo è al di sotto di tale soglia.

Conferma

Facendo clic sul dispositivo problematico, verrà eseguito il drill-down al livello commit. Questa è una cartella di lavoro curata Dettagli dispositivo fornita già pronta con l'offerta di monitoraggio dell'hub IoT. La cartella di lavoro SLO/SLI La Nina lo riutilizza per visualizzare i dettagli delle prestazioni del dispositivo specifico.

Screenshot dei dati di telemetria di messaggistica per un dispositivo nel portale di Azure.

Risoluzione dei problemi

Misurazione e monitoraggio consente di osservare e prevedere il comportamento del sistema, confrontarlo con le aspettative definite e rilevare, infine, problemi esistenti o potenziali. La risoluzione dei problemi, d’altro canto, consente di identificare e individuare la causa del problema.

Risoluzione dei problemi di base

La cartella di lavoro a livello di commit fornisce informazioni dettagliate sull'integrità del dispositivo. Ciò include l'utilizzo delle risorse a livello di modulo e dispositivo, latenza dei messaggi, frequenza, QLen e altro ancora. In molti casi, queste informazioni possono aiutare a individuare la radice del problema.

In questo scenario, tutti i parametri del dispositivo di problemi sembrano normali e non è chiaro perché il dispositivo invia messaggi meno frequentemente del previsto. La scheda messaggistica della cartella di lavoro a livello di dispositivo conferma anche quanto segue:

Screenshot di messaggi di esempio nel portale di Azure.

Il modulo Temperature Sensor (tempSensor) ha generato 120 messaggi di telemetria, ma solo 49 di essi erano upstream nel cloud.

Prima di tutto, controllare i log prodotti dal Filter modulo. Selezionare Risoluzione dei problemi live!, quindi selezionare il Filter modulo.

Screenshot dei log del modulo di filtro nel portale di Azure.

L'analisi dei log del modulo non rivela il problema. Il modulo riceve messaggi e non sono presenti errori. Tutto sembra in ordine.

Risoluzione dei problemi completa

Due strumenti di osservabilità servono a scopi di risoluzione dei problemi profondi: tracce e log. In questo scenario, le tracce mostrano come un messaggio di telemetria con la temperatura della superficie dell'oceano viaggia dal sensore fino all'archiviazione nel cloud, cosa invoca cosa e con quali parametri. I log mostrano cosa accade all'interno di ogni componente di sistema durante questo processo. La vera potenza delle tracce e dei log si ottiene quando vengono correlati. Con questa configurazione è possibile leggere i log di un componente di sistema specifico, ad esempio un modulo in un dispositivo IoT o una funzione back-end, mentre elabora un messaggio di telemetria specifico.

Il servizio La Niña usa OpenTelemetry per produrre e raccogliere tracce e log in Monitoraggio di Azure.

Diagramma che illustra un dispositivo IoT Edge che invia dati di telemetria a Monitoraggio di Azure.

I moduli Temperature Sensor IoT Edge esportano Filter i log e i dati di traccia usando OTLP (OpenTelemetry Protocol) nel modulo OpenTelemetryCollector in esecuzione nello stesso dispositivo perimetrale. Il OpenTelemetryCollector modulo esporta quindi i log e le tracce in Azure Monitor Application Insights.

La funzione .NET di Azure invia i dati di traccia ad Application Insights con l'esportatore diretto Azure Monitor Open Telemetry. Invia anche i log correlati direttamente ad Application Insights usando un'istanza ILogger configurata.

La funzione back-end Java usa l’agente Java di strumentazione automatica OpenTelemetry per produrre ed esportare i dati di traccia e i log correlati all'istanza di Application Insights.

Per impostazione predefinita, i moduli IoT Edge nei dispositivi del servizio La Niña non sono impostati per produrre dati di traccia e il livello di registrazione è impostato su Information. La quantità di dati di traccia è controllata da un campionatore a rapporto. Il campionatore viene impostato con una probabilità che una determinata attività venga inclusa in una traccia. Per impostazione predefinita, la probabilità è 0. Con questa configurazione, i dispositivi evitano di sovraccaricare Azure Monitor con dati di osservabilità dettagliati quando non sono necessari.

Dopo aver analizzato i log di Information livello del Filter modulo, è necessario approfondire la causa del problema. Aggiornare le proprietà nei gemelli dei moduli Temperature Sensor e Filter, aumentare il loggingLevel fino a Debug, e modificare il traceSampleRatio da 0 a 1:

Screenshot della risoluzione dei problemi del modulo che mostra come aggiornare le proprietà gemelle di FilterModule.

Dopo aver apportato queste modifiche, riavviare i Temperature Sensor moduli e Filter :

Screenshot della risoluzione dei problemi del modulo che mostra il pulsante Riavvia FilterModule.

In pochi minuti, le tracce e i log dettagliati arrivano in Monitoraggio di Azure dal dispositivo con problemi. L'intero flusso di messaggi end-to-end dal sensore nel dispositivo all'archiviazione nel cloud è disponibile per il monitoraggio con la mappa delle applicazioni in Application Insights:

Screenshot della mappa delle applicazioni in Application Insights.

Da questa mappa è possibile eseguire il drill-down delle tracce. Alcune tracce sembrano normali e contengono tutti i passaggi del flusso, ma alcuni sono brevi, quindi non accade nulla dopo il Filter modulo.

Screenshot delle tracce di monitoraggio.

Analizzare una di queste brevi tracce per scoprire cosa è successo nel Filter modulo e perché non ha inviato il messaggio upstream al cloud.

Poiché i log sono correlati alle tracce, è possibile eseguire query sui log specificando TraceId e SpanId per recuperare i log per questa istanza di esecuzione del Filter modulo:

Filtro di query di traccia di esempio basato sull'ID traccia e sull'ID intervallo.

I log mostrano che il modulo ha ricevuto un messaggio con una temperatura di 70,465 gradi. Tuttavia, la soglia di filtro impostata su questo dispositivo è da 30 a 70. Quindi il messaggio non ha superato la soglia. Questo dispositivo è configurato in modo non corretto. Questa configurazione è la causa del problema rilevato durante il monitoraggio delle prestazioni del servizio La Niña con la cartella di lavoro.

Correggere la configurazione del Filter modulo in questo dispositivo aggiornando le proprietà nel modulo gemello. Inoltre, ridurre loggingLevel a Information e impostare traceSampleRatio su 0:

JSON di esempio che mostra i valori del rapporto tra livello di registrazione ed esempio di traccia.

Dopo aver apportato queste modifiche, riavviare il modulo. In pochi minuti, il dispositivo segnala nuovi valori delle metriche a Monitoraggio di Azure. I grafici delle cartelle di lavoro riflettono questi aggiornamenti:

Screenshot del grafico della cartella di lavoro di Monitoraggio di Azure.

La frequenza dei messaggi nel dispositivo problematico torna normale. Il valore SLO complessivo diventa di nuovo verde se non accade altro durante l'intervallo di osservazione configurato:

Screenshot del report sintetico del monitoraggio nel portale di Azure.

Provare l’esempio

A questo punto, è possibile distribuire l'esempio di scenario in Azure per seguire i passaggi e provare i propri casi d'uso.

Per distribuire questa soluzione, è necessario:

  1. Clonare il repository IoT Elms.

    git clone https://github.com/Azure-Samples/iotedge-logging-and-monitoring-solution.git
    
  2. Aprire una console di PowerShell ed eseguire lo script deploy-e2e-tutorial.ps1.

    ./Scripts/deploy-e2e-tutorial.ps1
    
    

Passaggi successivi

In questo articolo viene configurata una soluzione con funzionalità di osservabilità end-to-end per il monitoraggio e la risoluzione dei problemi. Una sfida comune in queste soluzioni per i sistemi IoT consiste nell'inviare dati di osservabilità dai dispositivi al cloud. I dispositivi in questo scenario dovrebbero essere online e abbiano una connessione stabile ad Azure Monitor, ma questo non è sempre il caso.

Consulta gli articoli di approfondimento, ad esempio *Distributed Tracing with IoT Edge*, per consigli e tecniche per gestire gli scenari in cui i dispositivi sono in genere offline o hanno connessioni limitate o ristrette sul backend di osservabilità nel cloud.