Monitoraggio dell'hub IoT di Azure

Quando si usano applicazioni e processi aziendali critici basati sulle risorse di Azure, è consigliabile monitorare tali risorse per verificarne disponibilità, prestazioni e funzionamento. Questo articolo descrive i dati di monitoraggio generati da hub IoT di Azure e come usare le funzionalità di Monitoraggio di Azure per analizzare e inviare avvisi su questi dati.

Panoramica del monitoraggio

La pagina Panoramica nella portale di Azure per ogni hub IoT include grafici che forniscono alcune metriche di utilizzo, ad esempio il numero di messaggi usati e il numero di dispositivi connessi all'hub IoT.

Grafici delle metriche predefiniti nella pagina Panoramica dell'hub IoT.

Un valore di conteggio dei messaggi corretto potrebbe essere ritardato di 1 minuto. A causa dell'infrastruttura del servizio hub IoT, il valore può talvolta rimbalzare tra valori superiori e inferiori all'aggiornamento. Questo contatore non deve essere corretto solo per i valori accumulati nell'ultimo minuto.

Le informazioni presentate nel riquadro Panoramica sono utili, ma rappresentano solo una piccola quantità di dati di monitoraggio disponibili per un hub IoT. Alcuni dati di monitoraggio vengono raccolti automaticamente e disponibili per l'analisi non appena si crea l'hub IoT. Con alcune configurazioni è possibile abilitare altri tipi di raccolta dati.

Che cos'è Monitoraggio di Azure?

hub IoT di Azure monitora i dati usando Monitoraggio di Azure, un servizio di monitoraggio dello stack completo. Monitoraggio di Azure può monitorare le risorse di Azure e altre risorse cloud o locali.

Iniziare con l'articolo Monitoraggio delle risorse di Azure con Monitoraggio di Azure, che descrive i concetti seguenti:

  • Che cos'è Monitoraggio di Azure?
  • Dati di monitoraggio raccolti in Azure
  • Configurazione della raccolta dati
  • Metriche e log
  • Strumenti standard in Azure per l'analisi e le informazioni dettagliate
  • Avvisi attivati durante il monitoraggio dei dati

Per altre informazioni sulle metriche e i log creati da hub IoT di Azure, vedere Monitoraggio hub IoT di Azure informazioni di riferimento sui dati.

Importante

Gli eventi generati dal servizio hub IoT che usano i log delle risorse di Monitoraggio di Azure non sono sicuramente affidabili o ordinati. Alcuni eventi possono andare persi o recapitati non in ordine. I log delle risorse non devono essere in tempo reale, quindi potrebbero essere necessari alcuni minuti prima che gli eventi vengano registrati nella destinazione scelta.

Il resto di questo articolo si basa sull'articolo Monitoraggio delle risorse di Azure con Monitoraggio di Azure descrivendo i dati specifici raccolti per hub IoT di Azure. Verranno visualizzati esempi per configurare la raccolta dati e come analizzare questi dati con gli strumenti di Azure.

Raccolta e routing

Le metriche della piattaforma, il log attività e i log delle risorse hanno specifiche di raccolta, archiviazione e routing univoche.

  • Le metriche della piattaforma e il log attività vengono raccolti e archiviati automaticamente, ma possono essere instradati ad altre posizioni usando un'impostazione di diagnostica.

  • I log delle risorse non vengono raccolti e archiviati fino a quando non si crea un'impostazione di diagnostica e li si instrada a una o più posizioni.

  • Le metriche e i log possono essere indirizzati a diverse posizioni, tra cui:

    • Archivio log di Monitoraggio di Azure tramite un'area di lavoro Log Analytics associata. I log possono essere analizzate usando Log Analytics.
    • Archiviazione di Azure per l'archiviazione e l'analisi offline
    • Un endpoint di Hub eventi in cui possono essere letti da applicazioni esterne, ad esempio strumenti SIEM (Security Information and Event Management) di terze parti.

Nella portale di Azure dall'hub IoT in Monitoraggio è possibile selezionare Impostazioni di diagnostica e quindi Aggiungi impostazione di diagnostica per creare impostazioni di diagnostica con ambito per i log e le metriche della piattaforma generate dall'hub IoT.

Screenshot che mostra come aggiungere un'impostazione di diagnostica nell'hub IoT nel portale di Azure.

Lo screenshot seguente mostra un'impostazione di diagnostica per il routing del tipo di log delle risorse Connessione ion Operations e tutte le metriche della piattaforma a un'area di lavoro Log Analytics.

Screenshot del modulo Impostazioni di diagnostica per il monitoraggio di un hub IoT.

Per altre informazioni sulla creazione di un'impostazione di diagnostica usando il portale di Azure, l'interfaccia della riga di comando o PowerShell, vedere Creare un'impostazione di diagnostica per raccogliere i log e le metriche della piattaforma in Azure. Quando si crea un'impostazione di diagnostica, si specificano quali categorie di log raccogliere. Le categorie per hub IoT di Azure sono elencate in Log delle risorse nel riferimento ai dati di monitoraggio hub IoT di Azure. Gli eventi vengono generati solo per gli errori in alcune categorie.

Quando si instradano le metriche della piattaforma hub IoT ad altre posizioni:

  • Queste metriche della piattaforma non sono esportabili tramite le impostazioni di diagnostica: dispositivi Connessione eDispositivi totali.

  • Le metriche multidimensionali, ad esempio alcune metriche di routing, vengono attualmente esportate come metriche unidimensionali bidimensionali aggregate tra i valori delle dimensioni. Per altre informazioni, vedere Esportazione delle metriche della piattaforma in altre posizioni.

Analisi delle metriche

È possibile analizzare le metriche per hub IoT di Azure con le metriche di altri servizi di Azure usando Esplora metriche. Per altre informazioni su questo strumento, vedere Analizzare le metriche con Esplora metriche di Monitoraggio di Azure.

Per aprire Esplora metriche, passare al portale di Azure e aprire l'hub IoT, quindi selezionare Metriche in Monitoraggio. Questo strumento di esplorazione è limitato, per impostazione predefinita, alle metriche della piattaforma generate dall'hub IoT.

Screenshot che mostra la pagina esplora metriche per un hub IoT.

Per un elenco delle metriche della piattaforma raccolte per hub IoT di Azure, vedere Metriche nel riferimento ai dati di monitoraggio hub IoT di Azure. Per un elenco delle metriche della piattaforma raccolte per tutti i servizi di Azure, vedere Metriche supportate con Monitoraggio di Azure.

Per hub IoT metriche della piattaforma raccolte in unità di conteggio, alcune aggregazioni potrebbero non essere disponibili o utilizzabili. Per altre informazioni, vedere Aggregazioni supportate in Informazioni di riferimento sui dati di monitoraggio hub IoT di Azure.

Alcune metriche hub IoT, ad esempio le metriche di routing, sono multidimensionali. Per queste metriche, è possibile applicare filtri e suddivisione ai grafici in base a una dimensione.

Analisi dei log

I dati nei log di Monitoraggio di Azure vengono archiviati in tabelle, ognuna delle quali ha un proprio set di proprietà univoche. I dati in queste tabelle sono associati a un'area di lavoro Log Analytics e possono essere sottoposti a query in Log Analytics. Per altre informazioni sui log di Monitoraggio di Azure, vedere Panoramica dei log di Monitoraggio di Azure nella documentazione di Monitoraggio di Azure.

Per instradare i dati ai log di Monitoraggio di Azure, è necessario creare un'impostazione di diagnostica per inviare i log delle risorse o le metriche della piattaforma a un'area di lavoro Log Analytics. Per altre informazioni, vedere Raccolta e routing.

Per eseguire Log Analytics, passare al portale di Azure e aprire l'hub IoT, quindi selezionare Log in Monitoraggio. Queste query di Log Analytics hanno come ambito, per impostazione predefinita, i log e le metriche raccolti nei log di Monitoraggio di Azure per l'hub IoT.

Pagina Log per un hub IoT.

Per un elenco delle tabelle usate dai log di Monitoraggio di Azure e su cui è possibile eseguire query da Log Analytics, vedere Tabelle dei log di Monitoraggio di Azure in Monitoraggio hub IoT di Azure informazioni di riferimento sui dati.

Tutti i log delle risorse in Monitoraggio di Azure hanno gli stessi campi seguiti da campi specifici del servizio. Lo schema comune è descritto in Schema dei log delle risorse di Monitoraggio di Azure. È possibile trovare lo schema e le categorie di log delle risorse raccolti per hub IoT di Azure nei log delle risorse nel riferimento ai dati di monitoraggio hub IoT di Azure. Gli eventi vengono generati solo per gli errori in alcune categorie.

Il log attività è un account di accesso alla piattaforma azure che fornisce informazioni dettagliate sugli eventi a livello di sottoscrizione. È possibile visualizzarlo in modo indipendente o instradarlo ai log di Monitoraggio di Azure, in cui è possibile eseguire query più complesse usando Log Analytics.

Quando si instradano le metriche della piattaforma hub IoT ai log di Monitoraggio di Azure:

  • Le metriche della piattaforma seguenti non sono esportabili tramite le impostazioni di diagnostica: Dispositivi connessi e Totale dispositivi.

  • Le metriche multidimensionali, ad esempio alcune metriche di routing, vengono attualmente esportate come metriche unidimensionali bidimensionali aggregate tra i valori delle dimensioni. Per altri dettagli, vedere Esportazione delle metriche della piattaforma in altre posizioni.

Per le query comuni con hub IoT, vedere Query Kusto di esempio. Per altre informazioni sull'uso delle query di Log Analytics, vedere Panoramica delle query di log in Monitoraggio di Azure.

Versione dell'SDK nei log di hub IoT

Alcune operazioni nei log delle risorse hub IoT restituiscono una sdkVersion proprietà nel relativo properties oggetto. Per queste operazioni, quando un dispositivo o un'app back-end usa uno degli SDK di Azure IoT, questa proprietà contiene informazioni sull'SDK in uso, sulla versione dell'SDK e sulla piattaforma in cui è in esecuzione l'SDK.

Negli esempi seguenti viene mostrata la sdkVersion proprietà generata per un'operazione deviceConnect utilizzando:

  • SDK per dispositivi Node.js: "azure-iot-device/1.17.1 (node v10.16.0; Windows_NT 10.0.18363; x64)"
  • .NET (C#) SDK: ".NET/1.21.2 (.NET Framework 4.8.4200.0; Microsoft Windows 10.0.17763 WindowsProduct:0x00000004; X86)".

La tabella seguente mostra il nome dell'SDK usato per diversi SDK di Azure IoT:

Nome SDK nella proprietà sdkVersion Lingua
.NET .NET (C#)
microsoft.azure.devices SDK del servizio .NET (C#)
microsoft.azure.devices.client SDK per dispositivi .NET (C#)
iothubclient SDK per dispositivi C o Python v1 (deprecato)
iothubserviceclient SDK del servizio C o Python v1 (deprecato)
azure-iot-device-iothub-py SDK per dispositivi Python
azure-iot-device NODE.JS SDK per dispositivi
azure-iothub SDK del servizio Node.js
com.microsoft.azure.iothub-java-client Sdk per dispositivi Java
com.microsoft.azure.iothub.service.sdk Sdk del servizio Java
com.microsoft.azure.sdk.iot.iot-device-client Sdk per dispositivi Java
com.microsoft.azure.sdk.iot.iot-service-client Sdk del servizio Java
A Embedded C
C + (OSSimplified = Eclipse ThreadX) Eclipse ThreadX

È possibile estrarre la proprietà della versione dell'SDK quando si eseguono query sui log delle risorse hub IoT. Ad esempio, la query seguente estrae la proprietà della versione dell'SDK (e l'ID dispositivo) dalle proprietà restituite dalle operazioni di Connessione ions. Queste due proprietà vengono scritte nei risultati insieme all'ora dell'operazione e all'ID risorsa dell'hub IoT a cui si connette il dispositivo.

// SDK version of devices
// List of devices and their SDK versions that connect to IoT Hub
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend parsed_json = parse_json(properties_s) 
| extend SDKVersion = tostring(parsed_json.sdkVersion) , DeviceId = tostring(parsed_json.deviceId)
| distinct DeviceId, SDKVersion, TimeGenerated, _ResourceId

Query Kusto di esempio

Usare le query Kusto seguenti per monitorare l'hub IoT.

Importante

Selezionando Log dal menu hub IoT si apre Log Analytics e include i dati esclusivamente dalla risorsa dell'hub IoT. Per le query che includono dati da altri hub IoT o servizi di Azure, selezionare Log dal menu Monitoraggio di Azure. Per altre informazioni, vedere Ambito e intervallo di tempo delle query su log in Log Analytics di Monitoraggio di Azure.

  • errori di Connessione ivity: identificare gli errori di connessione del dispositivo.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" and Level == "Error"
    
  • Errori di limitazione: identificare i dispositivi che hanno effettuato la maggior parte delle richieste causando errori di limitazione.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where ResultType == "429001"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | summarize count() by DeviceId, Category, _ResourceId
    | order by count_ desc
    
  • Endpoint non recapitabili: identificare gli endpoint non integri o non integri in base al numero di volte in cui il problema è stato segnalato e conoscere il motivo.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Routes" and OperationName in ("endpointDead", "endpointUnhealthy")
    | extend parsed_json = parse_json(properties_s)
    | extend Endpoint = tostring(parsed_json.endpointName), Reason = tostring(parsed_json.details) 
    | summarize count() by Endpoint, OperationName, Reason, _ResourceId
    | order by count_ desc
    
  • Riepilogo degli errori: numero di errori in tutte le operazioni per tipo.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Level == "Error"
    | summarize count() by ResultType, ResultDescription, Category, _ResourceId
    
  • Dispositivi connessi di recente: elenco di dispositivi che hub IoT visto connettersi nel periodo di tempo specificato.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" and OperationName == "deviceConnect"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | summarize max(TimeGenerated) by DeviceId, _ResourceId
    
  • eventi di Connessione ion per un dispositivo specifico: tutti gli eventi di connessione registrati per un dispositivo specifico (test-device).

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | where DeviceId == "test-device"
    
  • Versione DELL'SDK dei dispositivi: elenco dei dispositivi e delle relative versioni SDK per le connessioni di dispositivi o dispositivi alle operazioni del dispositivo gemello cloud.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" or Category == "D2CTwinOperations"
    | extend parsed_json = parse_json(properties_s)
    | extend SDKVersion = tostring(parsed_json.sdkVersion) , DeviceId = tostring(parsed_json.deviceId)
    | distinct DeviceId, SDKVersion, TimeGenerated, _ResourceId
    

Leggere i log da Hub eventi di Azure

Dopo aver configurato la registrazione degli eventi tramite le impostazioni di diagnostica, è possibile creare applicazioni che leggono i log in modo che sia possibile eseguire azioni sulla base delle informazioni in essi contenuti. Il codice di esempio seguente recupera i log da un hub eventi.

class Program
{ 
    static string connectionString = "{your AMS eventhub endpoint connection string}";
    static string monitoringEndpointName = "{your AMS event hub endpoint name}";
    static EventHubClient eventHubClient;
    //This is the Diagnostic Settings schema
    class AzureMonitorDiagnosticLog
    {
        string time { get; set; }
        string resourceId { get; set; }
        string operationName { get; set; }
        string category { get; set; }
        string level { get; set; }
        string resultType { get; set; }
        string resultDescription { get; set; }
        string durationMs { get; set; }
        string callerIpAddress { get; set; }
        string correlationId { get; set; }
        string identity { get; set; }
        string location { get; set; }
        Dictionary<string, string> properties { get; set; }
    };

    static void Main(string[] args)
    {
        Console.WriteLine("Monitoring. Press Enter key to exit.\n");
        eventHubClient = EventHubClient.CreateFromConnectionString(connectionString, monitoringEndpointName);
        var d2cPartitions = eventHubClient.GetRuntimeInformationAsync().PartitionIds;
        CancellationTokenSource cts = new CancellationTokenSource();
        var tasks = new List<Task>();
        foreach (string partition in d2cPartitions)
        {
            tasks.Add(ReceiveMessagesFromDeviceAsync(partition, cts.Token));
        }
        Console.ReadLine();
        Console.WriteLine("Exiting...");
        cts.Cancel();
        Task.WaitAll(tasks.ToArray());
    }

    private static async Task ReceiveMessagesFromDeviceAsync(string partition, CancellationToken ct)
    {
        var eventHubReceiver = eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition, DateTime.UtcNow);
        while (true)
        {
            if (ct.IsCancellationRequested)
            {
                await eventHubReceiver.CloseAsync();
                break;
            }
            EventData eventData = await eventHubReceiver.ReceiveAsync(new TimeSpan(0,0,10));
            if (eventData != null)
            {
                string data = Encoding.UTF8.GetString(eventData.GetBytes());
                Console.WriteLine("Message received. Partition: {0} Data: '{1}'", partition, data);
                var deserializer = new JavaScriptSerializer();
                //deserialize json data to azure monitor object
                AzureMonitorDiagnosticLog message = new JavaScriptSerializer().Deserialize<AzureMonitorDiagnosticLog>(result);
            }
        }
    }
}

Avvisi

Gli avvisi di Monitoraggio di Azure notificano in modo proattivo quando vengono riscontrate importanti condizioni nei dati di monitoraggio. Consentono di identificare e risolvere i problemi del sistema prima che gli utenti li notino. È possibile impostare avvisi su metriche, log e log attività. Ogni tipo di avviso presenta vantaggi e svantaggi.

Quando si crea una regola di avviso basata sulle metriche della piattaforma (raccolte in unità di conteggio), alcune aggregazioni potrebbero non essere disponibili o utilizzabili. Per altre informazioni, vedere Aggregazioni supportate in Monitoraggio hub IoT di Azure informazioni di riferimento sui dati.

Monitorare le disconnessioni per dispositivo con Griglia di eventi

Monitoraggio di Azure fornisce una metrica, Connessione dispositivi, che è possibile usare per monitorare il numero di dispositivi connessi al hub IoT. Questa metrica attiva un avviso quando il numero di dispositivi connessi scende al di sotto di un valore soglia. Monitoraggio di Azure genera anche eventi nella categoria connessioni che è possibile usare per monitorare gli errori di connessione, disconnessione e connessione del dispositivo. Anche se questi eventi possono essere sufficienti per alcuni scenari, Griglia di eventi di Azure offre una soluzione di monitoraggio per dispositivo a bassa latenza che è possibile usare per tenere traccia delle connessioni dei dispositivi per dispositivi critici e infrastruttura.

Con Griglia di eventi è possibile sottoscrivere gli eventi hub IoT Device Connessione ed e DeviceDisconnected per attivare gli avvisi e monitorare lo stato di connessione del dispositivo. Griglia di eventi offre una latenza di eventi molto inferiore rispetto a Monitoraggio di Azure, quindi è possibile monitorare in base ai singoli dispositivi anziché a tutti i dispositivi connessi. Questi fattori rendono Griglia di eventi il metodo preferito per il monitoraggio delle connessioni per dispositivi e infrastrutture critici. È consigliabile usare Griglia di eventi per monitorare le connessioni dei dispositivi negli ambienti di produzione.

Per altre informazioni sul monitoraggio della connettività dei dispositivi con Griglia di eventi e Monitoraggio di Azure, vedere Monitorare, diagnosticare e risolvere i problemi di connettività dei dispositivi a hub IoT di Azure.

Passaggi successivi