Überwachen von Azure IoT Hub

Wenn Sie über unternehmenskritische Anwendungen und Geschäftsprozesse verfügen, die auf Azure-Ressourcen beruhen, sollten Sie Verfügbarkeit, Leistung und Betrieb dieser Ressourcen überwachen. In diesem Artikel wird das Überwachen von Daten beschrieben, die von Azure IoT Hub generiert wurden. Außerdem wird erläutert, wie Sie die Funktionen von Azure Monitor nutzen können, um diese Daten zu analysieren und Warnungen dafür zu erstellen.

Azure Monitor: Übersicht

Die Seite Übersicht im Azure-Portal für jeden IoT-Hub enthält Diagramme, die einige Nutzungsmetriken bereitstellen, z. B. die Anzahl der verwendeten Nachrichten und die Anzahl der mit dem IoT-Hub verbundenen Geräte.

Standardmetrikdiagramme auf der IoT Hub-Seite „Übersicht“.

Ein richtiger Zählwert für Nachrichten wird möglicherweise um 1 Minute verzögert. Aufgrund der Infrastruktur des IoT Hub-Dienstes kann der Wert bei der Aktualisierung manchmal zwischen höheren und niedrigeren Werten springen (bounce). Dieser Zähler sollte nur bei Werten, die während der letzten Minute aufgelaufen sind, falsch sein.

Die im Bereich „Übersicht“ angezeigten Informationen sind zwar nützlich, stellen aber nur eine kleine Menge der Überwachungsdaten dar, die für einen IoT-Hub verfügbar sind. Einige Überwachungsdaten werden automatisch gesammelt und sind zur Analyse verfügbar, sobald Sie Ihren IoT-Hub erstellen. Mit einigen Konfigurationsschritten können Sie zusätzliche Typen von Datensammlungen aktivieren.

Was ist Azure Monitor?

Azure IoT Hub überwacht Daten mithilfe von Azure Monitor, einem Dienst zur Überwachung des gesamten Stapels. Azure Monitor kann Ihre Azure-Ressourcen und andere Cloudressourcen oder lokale Ressourcen überwachen.

Beginnen Sie mit dem Artikel Überwachen von Azure-Ressourcen mit Azure Monitor, in dem die folgenden Konzepte beschrieben werden:

  • Was ist Azure Monitor?
  • In Azure gesammelte Überwachungsdaten
  • Konfigurieren der Datensammlung
  • Metriken und Protokolle
  • Standardtools in Azure für Analysen und Erkenntnisse
  • Warnungen, die beim Überwachen von Daten ausgelöst werden

Weitere Informationen zu den Metriken und Protokollen, die von Azure IoT Hub erstellt werden, finden Sie in der Referenz zur Überwachung von Azure IoT Hub-Daten.

Wichtig

Die vom IoT Hub-Dienst mithilfe von Azure Monitor-Ressourcenprotokollen ausgegebenen Ereignisse sind nicht unbedingt zuverlässig oder geordnet. Einige Ereignisse sind möglicherweise verloren gegangen oder nicht in der richtigen Reihenfolge. Weil Ressourcenprotokolle nicht als Echtzeitprotokolle vorgesehen sind, kann es mehrere Minuten dauern, bis Ereignisse an dem von Ihnen gewählten Zielort protokolliert werden.

Der restliche Artikel baut auf dem Artikel Überwachen von Azure-Ressourcen mit Azure Monitor auf, indem die für Azure IoT Hub erfassten spezifischen Daten beschrieben werden. Sie sehen Beispiele zum Konfigurieren Ihrer Datensammlung und erfahren, wie diese Daten mit Azure-Tools analysiert werden.

Sammlung und Routing

Bei Plattformmetriken, dem Aktivitätsprotokoll und Ressourcenprotokollen gibt es eindeutige Spezifikationen für Sammlung, Speicher und Routing.

  • Plattformmetriken und das Aktivitätsprotokoll werden automatisch erfasst und gespeichert, können jedoch mithilfe einer Diagnoseeinstellung an andere Speicherorte weitergeleitet werden.

  • Ressourcenprotokolle werden erst erfasst und gespeichert, nachdem Sie eine Diagnoseeinstellung erstellt und die Protokolle an mindestens einen Speicherort weitergeleitet haben.

  • Metriken und Protokolle können an verschiedene Speicherorte weitergeleitet werden. Hierzu zählen unter anderem folgende:

    • Der Azure Monitor-Protokollspeicher über einen zugeordneten Log Analytics-Arbeitsbereich. Dort können sie mithilfe von Log Analytics analysiert werden.
    • Azure Storage zur Archivierung und Offlineanalyse
    • Ein Event Hubs-Endpunkt, an dem sie von externen Anwendungen, z. B. Security Information & Event Management (SIEM)-Tools von Drittanbietern, gelesen werden können.

Im Azure-Portal können Sie aus Ihrem IoT-Hub unter Überwachung die Option Diagnoseeinstellungen und dann Diagnoseeinstellung hinzufügen auswählen, um Diagnoseeinstellungen zu erstellen, die auf die von Ihrem IoT-Hub ausgegebenen Protokolle und Plattformmetriken festgelegt sind.

Screenshot, der zeigt, wie im Azure-Portal eine Diagnoseeinstellung in Ihrem IoT-Hub hinzugefügt wird

Der folgende Screenshot zeigt eine Diagnoseeinstellung für die Weiterleitung des Ressourcenprotokolltyps Verbindungsvorgänge und aller Plattformmetriken an einen Log Analytics-Arbeitsbereich:

Screenshot des Formulars „Diagnoseeinstellungen“ zum Überwachen eines IoT-Hubs

Weitere Informationen zum Erstellen einer Diagnoseeinstellung über das Azure-Portal, die Befehlszeilenschnittstelle (CLI) oder PowerShell finden Sie unter Erstellen einer Diagnoseeinstellung zum Sammeln von Plattformprotokollen und Metriken in Azure. Wenn Sie eine Diagnoseeinstellung erstellen, legen Sie fest, welche Kategorien von Protokollen gesammelt werden sollen. Die Kategorien für Azure IoT Hub werden in der Referenz zu Azure IoT Hub-Überwachungsdaten im Abschnitt „Ressourcenprotokolle“ aufgeführt. Ereignisse werden nur bei Fehlern in einigen Kategorien ausgegeben.

Beim Routing von IoT Hub-Plattformmetriken an andere Speicherorte gilt:

  • Diese Plattformmetriken können nicht über Diagnoseeinstellungen exportiert werden: Verbundene Geräte und Geräte gesamt.

  • Mehrdimensionale Metriken, z B. einige Routingmetriken, werden zurzeit als vereinfachte eindimensionale Metriken exportiert, die über Dimensionswerte aggregiert werden. Weitere Informationen finden Sie unter Exportieren von Plattformmetriken an andere Speicherorte.

Analysieren von Metriken

Mithilfe des Metrik-Explorers können Sie Metriken für Azure IoT Hub zusammen mit Metriken aus anderen Azure-Diensten analysieren. Weitere Informationen zur Verwendung dieses Tools finden Sie unter Analysieren von Metriken mit dem Azure Monitor-Metrik-Explorer.

Wechseln Sie zum Öffnen des Metrik-Explorers zum Azure-Portal, öffnen Sie Ihren IoT-Hub, und wählen Sie unter Überwachung die Option Metriken aus. Der Bereich für diesen Explorer ist standardmäßig auf die Plattformmetriken festgelegt, die von Ihrem IoT-Hub ausgegeben werden.

Screenshot: Seite „Metrik-Explorer“ für einen IoT Hub

Eine Liste der Plattformmetriken, die für Azure IoT Hub gesammelt werden, finden Sie in der Referenz zu Azure IoT Hub-Überwachungsdaten im Abschnitt „Metriken“. Eine Liste der Plattformmetriken, die für alle Azure-Dienste gesammelt werden, finden Sie unter Unterstützte Metriken von Azure Monitor.

Bei IoT Hub-Plattformmetriken, die in Anzahlen von Einheiten gesammelt werden, sind einige Aggregationen möglicherweise nicht verfügbar oder können nicht verwendet werden. Weitere Informationen finden Sie in der Referenz zu Azure IoT Hub-Überwachungsdaten im Abschnitt „Unterstützte Aggregationen“.

Einige IoT Hub-Metriken, z. B. Routingmetriken, sind mehrdimensional. Bei diesen Metriken können Sie Filter anwenden und auf der Grundlage einer Dimension auf Ihre Diagramme aufteilen.

Analysieren von Protokollen

Daten in Azure Monitor-Protokollen werden in Tabellen gespeichert, wobei jede Tabelle ihren eigenen Satz an eindeutigen Eigenschaften hat. Die Daten in diesen Tabellen sind einem Log Analytics-Arbeitsbereich zugeordnet und können in Log Analytics abgefragt werden. Weitere Informationen zu Azure Monitor-Protokollen finden Sie in der Azure Monitor-Dokumentation unter Übersicht über Azure Monitor-Protokolle.

Zum Weiterleiten von Daten an Azure Monitor-Protokolle müssen Sie eine Diagnoseeinstellung erstellen, um Ressourcenprotokolle oder Plattformmetriken an einen Log Analytics-Arbeitsbereich zu senden. Weitere Informationen finden Sie unter Sammlung und Routing.

Wechseln Sie zum Ausführen von Log Analytics zum Azure-Portal, öffnen Sie Ihren IoT-Hub, und wählen Sie unter Überwachung die Option Protokolle aus. Der Bereich für diese Log-Analytics-Abfragen ist standardmäßig auf die Protokolle und Metriken festgelegt, die in Azure Monitor-Protokollen für Ihren IoT-Hub gesammelt wurden.

Seite „Protokolle“ für einen IoT-Hub.

Eine Liste der Tabellen, die von Azure Monitor-Protokollen verwendet und durch Log Analytics abgefragt werden können, finden Sie in der Referenz zu Azure IoT Hub-Überwachungsdaten im Abschnitt „Tabellen in Azure Monitor-Protokollen“.

Alle Ressourcenprotokolle in Azure Monitor enthalten dieselben Felder, gefolgt von dienstspezifischen Feldern. Das allgemeine Schema wird in Azure Monitor-Ressourcenprotokollschema beschrieben. Sie finden das Schema und die Kategorien von Ressourcenprotokollen, die für Azure IoT Hub gesammelt werden, in der Referenz zu Azure IoT Hub-Überwachungsdaten im Abschnitt „Ressourcenprotokolle“. Ereignisse werden nur bei Fehlern in einigen Kategorien ausgegeben.

Das Aktivitätsprotokoll ist ein Plattformprotokoll in Azure, das einen Einblick in Ereignisse auf Abonnementebene ermöglicht. Sie können es unabhängig anzeigen oder an Azure Monitor-Protokolle weiterleiten, in denen Sie mithilfe von Log Analytics komplexere Abfragen durchführen können.

Beim Routing von IoT Hub-Plattformmetriken an Azure Monitor-Protokolle gilt:

  • Die folgenden Plattformmetriken können nicht über Diagnoseeinstellungen exportiert werden: Verbundene Geräte und Geräte gesamt.

  • Mehrdimensionale Metriken, z B. einige Routingmetriken, werden zurzeit als vereinfachte eindimensionale Metriken exportiert, die über Dimensionswerte aggregiert werden. Weitere Informationen finden Sie unter Exportieren von Plattformmetriken an andere Speicherorte.

Allgemeine Abfragen mit IoT Hub finden Sie unter Kusto-Beispielabfragen. Weitere Informationen zur Verwendung von Log Analytics-Abfragen finden Sie unter Übersicht über Protokollabfragen in Azure Monitor.

SDK-Version in IoT Hub-Protokollen

Einige Vorgänge in IoT Hub-Ressourcenprotokollen geben in ihrem properties-Objekt eine sdkVersion-Eigenschaft zurück. Wenn für diese Vorgänge ein Gerät oder eine Back-End-App eines der Azure IoT-SDKs verwendet wird, enthält diese Eigenschaft Informationen zum verwendeten SDK, die SDK-Version und die Plattform, auf der das SDK ausgeführt wird.

Die folgenden Beispiele zeigen die für einen deviceConnect-Vorgang ausgegebene Eigenschaft sdkVersion mit:

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

Die folgende Tabelle zeigt den SDK-Namen für verschiedene Azure IoT SDKs:

SDK-Name in der sdkVersion-Eigenschaft Sprache
.NET .NET (C#)
microsoft.azure.devices .NET-Dienst-SDK (C#)
microsoft.azure.devices.client .NET-Geräte-SDK (C#)
iothubclient Geräte-SDK mit C oder Python v1 (veraltet)
iothubserviceclient Dienst-SDK mit C oder Python v1 (veraltet)
azure-iot-device-iothub-py Python-Geräte-SDK
azure-iot-device Node.js-Geräte-SDK
azure-iothub Node.js-Dienst-SDK
com.microsoft.azure.iothub-java-client Java-Geräte-SDK
com.microsoft.azure.iothub.service.sdk Java-Dienst-SDK
com.microsoft.azure.sdk.iot.iot-device-client Java-Geräte-SDK
com.microsoft.azure.sdk.iot.iot-service-client Java-Dienst-SDK
C Embedded C
C + (OSSimplified = Eclipse ThreadX) Eclipse ThreadX

Sie können die Eigenschaft für die SDK-Version extrahieren, wenn Sie Abfragen für IoT Hub-Ressourcenprotokolle durchführen. Die folgende Abfrage beispielsweise extrahiert die Eigenschaft für die SDK-Version (und die Geräte-ID) aus den Eigenschaften, die von Verbindungsvorgängen zurückgegeben wurden. Diese beiden Eigenschaften werden zusammen mit dem Zeitpunkt des Vorgangs und der Ressourcen-ID des IoT-Hubs, mit dem das Gerät eine Verbindung herstellt, in die Ergebnisse geschrieben.

// 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

Kusto-Beispielabfragen

Mithilfe der folgenden Kusto-Abfragen können Sie Ihren IoT-Hub überwachen.

Wichtig

Wenn Sie im Menü IoT Hub die Option Protokolle auswählen, wird Log Analytics mit Daten ausschließlich aus Ihrer IoT Hub-Ressource geöffnet. Für Abfragen mit Daten aus anderen IoT-Hubs oder Azure-Diensten wählen Sie im Menü Azure Monitor die Option Protokolle aus. Weitere Informationen finden Sie unter Protokollabfragebereich und Zeitbereich in Azure Monitor Log Analytics.

  • Verbindungsfehler: Identifizieren Sie Geräteverbindungsfehler.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" and Level == "Error"
    
  • Drosselungsfehler: Identifizieren Sie Geräte mit den meisten gesendeten Anforderungen, was zu Drosselungsfehlern geführt hat.

    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
    
  • Unzustellbare Endpunkte: Identifizieren Sie unzustellbare oder fehlerhafte Endpunkte anhand der Häufigkeit, mit der das Problem gemeldet wurde, und erfahren Sie mehr über die Ursache dafür.

    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
    
  • Fehlerzusammenfassung: Anzahl von Fehlern über alle Vorgänge nach Typ.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Level == "Error"
    | summarize count() by ResultType, ResultDescription, Category, _ResourceId
    
  • Zuletzt verbundene Geräte: Liste der Geräte, die im angegebenen Zeitraum mit IoT Hub verbunden wurden.

    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
    
  • Verbindungsereignisse für ein bestimmtes Gerät: Alle Verbindungsereignisse, die für ein bestimmtes Gerät (test-device) protokolliert wurden.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | where DeviceId == "test-device"
    
  • SDK-Version von Geräten: Liste von Geräten und deren SDK-Versionen für Geräteverbindungen oder Gerät-zu-Cloud-Zwillingsvorgängen.

    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
    

Lesen von Protokollen aus Azure Event Hubs

Nachdem Sie die Ereignisprotokollierung über Diagnoseeinstellungen eingerichtet haben, können Sie Anwendungen erstellen, die die Protokolle lesen, sodass Sie anhand der darin enthaltenen Informationen Maßnahmen ergreifen können. Der folgende Beispielcode ruft Protokolle aus einem Event Hub ab.

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);
            }
        }
    }
}

Alerts

Azure Monitor-Warnungen informieren Sie proaktiv, wenn wichtige Bedingungen in Ihren Überwachungsdaten gefunden werden. Sie ermöglichen Ihnen, Probleme in Ihrem System zu identifizieren und zu beheben, bevor Ihre Kunden sie bemerken. Sie können Warnungen für Metriken, Protokolle und das Aktivitätsprotokoll festlegen. Verschiedene Arten von Warnungen haben Vor- und Nachteile.

Wenn Sie eine Warnungsregel erstellen, die auf Plattformmetriken (gesammelt in Anzahleinheiten) basiert, sind einige Aggregationen möglicherweise nicht verfügbar oder unbrauchbar. Weitere Informationen finden Sie in der Referenz zum Überwachen von Azure IoT Hub-Daten im Abschnitt Unterstützte Aggregationen.

Überwachen der Verbindungstrennungen pro Gerät mithilfe von Event Grid

Azure Monitor bietet eine Metrik, Verbundene Geräte, anhand derer Sie die Anzahl der mit Ihrem IoT Hub verbundenen Geräte überwachen können. Diese Metrik löst eine Warnung aus, wenn die Anzahl der verbundenen Geräte einen Schwellenwert unterschreitet. Azure Monitor gibt auch Ereignisse in der Verbindungskategorie aus, die Sie zum Überwachen von Geräteverbindungen, Verbindungstrennungen und Verbindungsfehlern verwenden können. Während diese Ereignisse für einige Szenarien möglicherweise ausreichen, bietet Azure Event Grid eine Überwachungslösung mit niedriger Latenz pro Gerät, anhand derer Sie Geräteverbindungen bei kritischen Geräten und einer kritischen Infrastruktur nachverfolgen können.

Mit Event Grid können Sie die Ereignisse DeviceConnected und DeviceDisconnected in IoT Hub abonnieren, um Warnungen auszulösen und den Geräteverbindungsstatus zu überwachen. Weil Event Grid eine viel niedrigere Ereignislatenz als Azure Monitor bietet, können Sie die Überwachung pro Gerät statt für alle verbundenen Geräte durchführen. Diese Faktoren machen Event Grid zur bevorzugten Methode für die Überwachung von Verbindungen von kritischen Geräten und einer kritischen Infrastruktur. Es wird dringend empfohlen, Event Grid zur Überwachung von Geräteverbindungen in Produktionsumgebungen zu verwenden.

Weitere Informationen zum Überwachen der Gerätekonnektivität mithilfe von Event Grid und Azure Monitor finden Sie unter Überwachen, Diagnostizieren und Beheben von Problemen bei der Gerätekonnektivität mit Azure IoT Hub.

Nächste Schritte