Azure IoT Hub bewaken

Wanneer u kritieke toepassingen en bedrijfsprocessen hebt die afhankelijk zijn van Azure-resources, kunt u de beschikbaarheid, prestaties en werking van deze resources bewaken. In dit artikel worden de bewakingsgegevens beschreven die zijn gegenereerd door Azure IoT Hub en hoe u de functies van Azure Monitor kunt gebruiken om deze gegevens te analyseren en te waarschuwen.

Overzicht van Monitor

De pagina Overzicht in Azure Portal voor elke IoT-hub bevat grafieken die metrische gegevens over gebruik bieden, zoals het aantal gebruikte berichten en het aantal apparaten dat is verbonden met de IoT-hub.

Standaardgrafieken op de overzichtspagina van IoT Hub.

Een juiste waarde voor het aantal berichten kan met 1 minuut worden vertraagd. Vanwege de Infrastructuur van de IoT Hub-service kan de waarde soms stuiteren tussen hogere en lagere waarden bij vernieuwen. Deze teller mag alleen onjuist zijn voor waarden die in de afgelopen minuut zijn opgebouwd.

De informatie in het deelvenster Overzicht is nuttig, maar vertegenwoordigt slechts een kleine hoeveelheid bewakingsgegevens die beschikbaar zijn voor een IoT-hub. Sommige bewakingsgegevens worden automatisch en beschikbaar voor analyse zodra u uw IoT-hub maakt. U kunt andere typen gegevensverzameling inschakelen met een bepaalde configuratie.

Wat is Azure Monitor?

Azure IoT Hub bewaakt gegevens met behulp van Azure Monitor, een volledige stack-bewakingsservice. Azure Monitor kan uw Azure-resources en andere cloud- of on-premises resources bewaken.

Begin met het artikel Azure-resources bewaken met Azure Monitor, waarin de volgende concepten worden beschreven:

  • Wat is Azure Monitor?
  • Bewakingsgegevens die zijn verzameld in Azure
  • Gegevensverzameling configureren
  • Metrische gegevens en logboeken
  • Standaardhulpprogramma's in Azure voor analyse en inzichten
  • Waarschuwingen die worden geactiveerd bij het bewaken van gegevens

Zie De naslaginformatie over Azure IoT Hub-gegevens bewaken voor meer informatie over de metrische gegevens en logboeken die zijn gemaakt door Azure IoT Hub.

Belangrijk

De gebeurtenissen die door de IoT Hub-service worden verzonden met behulp van Azure Monitor-resourcelogboeken, zijn niet gegarandeerd betrouwbaar of geordend. Sommige gebeurtenissen kunnen verloren gaan of niet in orde zijn. Resourcelogboeken zijn niet bedoeld om realtime te zijn, dus het kan enkele minuten duren voordat gebeurtenissen naar uw bestemming zijn vastgelegd.

De rest van dit artikel bouwt voort op de Bewakings-Azure-resources met Azure Monitor door de specifieke gegevens te beschrijven die zijn verzameld voor Azure IoT Hub. U ziet voorbeelden voor het configureren van uw gegevensverzameling en het analyseren van deze gegevens met Azure-hulpprogramma's.

Verzameling en routering

Metrische platformgegevens, het activiteitenlogboek en resourcelogboeken hebben unieke specificaties voor verzameling, opslag en routering.

  • Metrische platformgegevens en het activiteitenlogboek worden automatisch verzameld en opgeslagen, maar kunnen worden gerouteerd naar andere locaties met behulp van een diagnostische instelling.

  • Resourcelogboeken worden pas verzameld en opgeslagen wanneer u een diagnostische instelling maakt en deze routeert naar een of meer locaties.

  • Metrische gegevens en logboeken kunnen worden doorgestuurd naar verschillende locaties, waaronder:

    • De opslag van Azure Monitor-logboeken, via een gekoppelde Log Analytics-werkruimte. Daar kunnen ze worden geanalyseerd met behulp van Log Analytics.
    • Azure Storage voor archivering en offlineanalyse
    • Een Event Hubs-eindpunt waar ze kunnen worden gelezen door externe toepassingen, zoals SIEM-hulpprogramma's (Security Information and Event Management) van derden.

In Azure Portal vanuit uw IoT-hub onder Bewaking kunt u diagnostische instellingen selecteren, gevolgd door diagnostische instelling toevoegen om diagnostische instellingen te maken die zijn afgestemd op de logboeken en metrische platformgegevens die door uw IoT-hub worden verzonden.

Schermopname die laat zien hoe u een diagnostische instelling toevoegt in uw IoT-hub in Azure Portal.

In de volgende schermopname ziet u een diagnostische instelling voor het routeren van het resourcelogboektype Verbinding maken ion Operations en alle metrische platformgegevens naar een Log Analytics-werkruimte.

Schermopname van het formulier Diagnostische Instellingen voor het bewaken van een IoT-hub.

Zie Diagnostische instelling maken voor het verzamelen van platformlogboeken en metrische gegevens in Azure voor meer informatie over het maken van een diagnostische instelling met behulp van Azure Portal, CLI of PowerShell. Wanneer u een diagnostische instelling maakt, geeft u op welke categorieën logboeken moeten worden verzameld. De categorieën voor Azure IoT Hub worden vermeld onder Resourcelogboeken in de naslaginformatie over Azure IoT Hub-gegevens bewaken. Gebeurtenissen worden alleen verzonden voor fouten in sommige categorieën.

Bij het routeren van metrische gegevens van het IoT Hub-platform naar andere locaties:

  • Deze metrische platformgegevens kunnen niet worden geëxporteerd via diagnostische instellingen: Verbinding maken apparaten en Totaal aantal apparaten.

  • Multidimensionale metrische gegevens, zoals sommige metrische routeringsgegevens, worden momenteel geëxporteerd als platgemaakte enkele dimensionale metrische gegevens die zijn geaggregeerd over dimensiewaarden. Zie Metrische platformgegevens exporteren naar andere locaties voor meer informatie.

Metrische gegevens analyseren

U kunt metrische gegevens voor Azure IoT Hub analyseren met metrische gegevens van andere Azure-services met behulp van Metrics Explorer. Zie Metrische gegevens analyseren met Azure Monitor Metrics Explorer voor meer informatie over dit hulpprogramma.

Als u Metrics Explorer wilt openen, gaat u naar Azure Portal en opent u uw IoT-hub en selecteert u Vervolgens Metrische gegevens onder Bewaking. Deze verkenner is standaard afgestemd op de metrische platformgegevens die door uw IoT-hub worden verzonden.

Schermopname van de pagina Metrics Explorer voor een IoT-hub.

Zie Metrische gegevens in de naslaginformatie over Azure IoT Hub bewaken voor een lijst met metrische platformgegevens die zijn verzameld voor Azure IoT Hub. Zie Ondersteunde metrische gegevens met Azure Monitor voor een lijst met metrische platformgegevens die voor alle Azure-services worden verzameld.

Voor metrische gegevens van het IoT Hub-platform die worden verzameld in eenheden van het aantal, zijn sommige aggregaties mogelijk niet beschikbaar of bruikbaar. Zie Ondersteunde aggregaties in de naslaginformatie over Azure IoT Hub-gegevens bewaken voor meer informatie.

Sommige metrische Gegevens van IoT Hub, zoals metrische routeringsgegevens, zijn multidimensionaal. Voor deze metrische gegevens kunt u filters toepassen en splitsen op uw grafieken op basis van een dimensie.

Logboeken analyseren

Gegevens in Azure Monitor-logboeken worden opgeslagen in tabellen waarin elke tabel een eigen set unieke eigenschappen heeft. De gegevens in deze tabellen zijn gekoppeld aan een Log Analytics-werkruimte en kunnen worden opgevraagd in Log Analytics. Zie het overzicht van Azure Monitor-logboeken in de Documentatie van Azure Monitor voor meer informatie over Azure Monitor-logboeken.

Als u gegevens wilt routeren naar Azure Monitor-logboeken, moet u een diagnostische instelling maken om resourcelogboeken of metrische platformgegevens naar een Log Analytics-werkruimte te verzenden. Zie Verzameling en routering voor meer informatie.

Als u Log Analytics wilt uitvoeren, gaat u naar Azure Portal en opent u uw IoT-hub en selecteert u Vervolgens Logboeken onder Bewaking. Deze Log Analytics-query's zijn standaard gericht op de logboeken en metrische gegevens die zijn verzameld in Azure Monitor-logboeken voor uw IoT-hub.

Logboekpagina voor een IoT-hub.

Zie Azure Monitor-logboeken in de naslaginformatie over Azure IoT Hub-gegevens voor een lijst met tabellen die door Azure Monitor-logboeken worden gebruikt en waarvoor query's kunnen worden uitgevoerd door Log Analytics.

Alle resourcelogboeken in Azure Monitor hebben dezelfde velden, gevolgd door servicespecifieke velden. Het algemene schema wordt beschreven in het schema voor resourcelogboeken van Azure Monitor. U vindt het schema en de categorieën resourcelogboeken die zijn verzameld voor Azure IoT Hub in resourcelogboeken in de naslaginformatie over azure IoT Hub-gegevens bewaken. Gebeurtenissen worden alleen verzonden voor fouten in sommige categorieën.

Het activiteitenlogboek is een platformaanmelding van Azure dat inzicht biedt in gebeurtenissen op abonnementsniveau. U kunt deze onafhankelijk bekijken of doorsturen naar Azure Monitor-logboeken, waar u complexere query's kunt uitvoeren met behulp van Log Analytics.

Bij het routeren van metrische gegevens van het IoT Hub-platform naar Azure Monitor-logboeken:

  • De volgende metrische platformgegevens kunnen niet worden geëxporteerd via diagnostische instellingen: Verbinding maken apparaten en Totaal aantal apparaten.

  • Multidimensionale metrische gegevens, zoals sommige metrische routeringsgegevens, worden momenteel geëxporteerd als platgemaakte enkele dimensionale metrische gegevens die zijn geaggregeerd over dimensiewaarden. Zie Metrische platformgegevens exporteren naar andere locaties voor meer informatie.

Zie Voorbeeldquery's van Kusto voor algemene query's met IoT Hub. Zie Overzicht van logboekquery's in Azure Monitor voor meer informatie over het gebruik van Log Analytics-query's.

SDK-versie in IoT Hub-logboeken

Sommige bewerkingen in IoT Hub-resourcelogboeken retourneren een sdkVersion eigenschap in hun properties object. Wanneer voor deze bewerkingen een apparaat- of back-end-app een van de Azure IoT SDK's gebruikt, bevat deze eigenschap informatie over de SDK die wordt gebruikt, de SDK-versie en het platform waarop de SDK wordt uitgevoerd.

In de volgende voorbeelden ziet u de sdkVersion eigenschap die wordt verzonden voor een deviceConnect bewerking met behulp van:

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

In de volgende tabel ziet u de SDK-naam die wordt gebruikt voor verschillende Azure IoT SDK's:

SDK-naam in sdkVersion-eigenschap Taal
.NET .NET (C#)
microsoft.azure.devices .NET -service-SDK (C#)
microsoft.azure.devices.client .NET -apparaat-SDK (C#)
iothubclient Apparaat-SDK voor C of Python v1 (afgeschaft)
iothubserviceclient Service-SDK voor C of Python v1 (afgeschaft)
azure-iot-device-iothub-py Python-apparaat-SDK
azure-iot-device Node.js device SDK
azure-iothub Node.js service-SDK
com.microsoft.azure.iothub-java-client Sdk voor Java-apparaten
com.microsoft.azure.iothub.service.sdk Java-service-SDK
com.microsoft.azure.sdk.iot.iot-device-client Sdk voor Java-apparaten
com.microsoft.azure.sdk.iot.iot-service-client Java-service-SDK
E Embedded C
C + (OSSimplified = Eclipse ThreadX) Eclipse ThreadX

U kunt de SDK-versie-eigenschap extraheren wanneer u query's uitvoert op IoT Hub-resourcelogboeken. Met de volgende query wordt bijvoorbeeld de SDK-versie-eigenschap (en apparaat-id) geëxtraheerd uit de eigenschappen die worden geretourneerd door Verbinding maken ionsbewerkingen. Deze twee eigenschappen worden samen met de tijd van de bewerking en de resource-id van de IoT-hub waarmee het apparaat verbinding maakt, naar de resultaten geschreven.

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

Voorbeeldquery's voor Kusto

Gebruik de volgende Kusto-query's om uw IoT-hub te bewaken.

Belangrijk

Als u Logboeken selecteert in het menu IoT Hub, wordt Log Analytics geopend en worden alleen gegevens uit uw IoT Hub-resource opgenomen. Voor query's die gegevens uit andere IoT-hubs of Azure-services bevatten, selecteert u Logboeken in het menu Azure Monitor. Zie Logboekquerybereik en tijdsbereik in Azure Monitor Log Analytics voor meer informatie.

  • Verbinding maken iviteitsfouten: Apparaatverbindingsfouten identificeren.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" and Level == "Error"
    
  • Beperkingsfouten: identificeer apparaten die de meeste aanvragen hebben gedaan, wat resulteert in beperkingsfouten.

    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
    
  • Dode eindpunten: identificeer dode of beschadigde eindpunten op het aantal keren dat het probleem is gerapporteerd en weet waarom.

    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
    
  • Foutoverzicht: het aantal fouten voor alle bewerkingen per type.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Level == "Error"
    | summarize count() by ResultType, ResultDescription, Category, _ResourceId
    
  • Onlangs verbonden apparaten: Lijst met apparaten die IoT Hub heeft gezien om verbinding te maken in de opgegeven periode.

    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
    
  • Verbinding maken iongebeurtenissen voor een specifiek apparaat: alle verbindingsgebeurtenissen die zijn geregistreerd voor een specifiek apparaat (testapparaat).

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | where DeviceId == "test-device"
    
  • SDK-versie van apparaten: lijst met apparaten en hun SDK-versies voor apparaatverbindingen of apparaat met clouddubbelbewerkingen.

    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
    

Logboeken lezen van Azure Event Hubs

Nadat u logboekregistratie van gebeurtenissen hebt ingesteld via diagnostische instellingen, kunt u toepassingen maken die de logboeken lezen, zodat u actie kunt ondernemen op basis van de informatie in deze logboeken. Met de volgende voorbeeldcode worden logboeken opgehaald uit een Event Hub.

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

Waarschuwingen

Met Azure Monitor-waarschuwingen wordt u proactief op de hoogte gesteld wanneer aan bepaalde belangrijke voorwaarden wordt voldaan in uw controlegegevens. Hiermee kunt u problemen in uw systeem identificeren en oplossen voordat uw klanten ze opmerken. U kunt waarschuwingen instellen voor metrische gegevens, logboeken en het activiteitenlogboek. Verschillende typen waarschuwingen hebben voordelen en nadelen.

Wanneer u een waarschuwingsregel maakt op basis van metrische platformgegevens (verzameld in aantal eenheden), zijn sommige aggregaties mogelijk niet beschikbaar of bruikbaar. Zie Ondersteunde aggregaties in Azure IoT Hub-gegevensreferenties bewaken voor meer informatie.

De verbinding met Event Grid per apparaat bewaken

Azure Monitor biedt een metrische, Verbinding maken apparaten die u kunt gebruiken om het aantal apparaten te bewaken dat is verbonden met uw IoT Hub. Met deze metrische waarde wordt een waarschuwing geactiveerd wanneer het aantal verbonden apparaten onder een drempelwaarde daalt. Azure Monitor verzendt ook gebeurtenissen in de categorie verbindingen die u kunt gebruiken om apparaatverbindingen, verbindingsproblemen en verbindingsfouten te bewaken. Hoewel deze gebeurtenissen mogelijk voldoende zijn voor sommige scenario's, biedt Azure Event Grid een oplossing met lage latentie, bewaking per apparaat die u kunt gebruiken om apparaatverbindingen voor kritieke apparaten en infrastructuur bij te houden.

Met Event Grid kunt u zich abonneren op het IoT Hub-apparaat Verbinding maken ed- en DeviceDisconnected-gebeurtenissen om waarschuwingen te activeren en de apparaatverbindingsstatus te bewaken. Event Grid biedt een veel lagere gebeurtenislatentie dan Azure Monitor, zodat u per apparaat kunt bewaken in plaats van voor alle verbonden apparaten. Deze factoren maken Event Grid de voorkeursmethode voor het bewaken van verbindingen voor kritieke apparaten en infrastructuur. We raden u ten zeerste aan Event Grid te gebruiken om apparaatverbindingen in productieomgevingen te bewaken.

Zie Voor meer informatie over het bewaken van apparaatconnectiviteit met Event Grid en Azure Monitor de connectiviteit van apparaten met Azure IoT Hub bewaken, diagnosticeren en oplossen.

Volgende stappen