Övervaka Azure IoT Hub

När du har kritiska appar och affärsprocesser som använder Azure-resurser är det bra att övervaka resursernas tillgänglighet, prestanda och drift. Den här artikeln beskriver övervakningsdata som genereras av Azure IoT Hub och hur du kan använda funktionerna i Azure Monitor för att analysera och avisera om dessa data.

Översikt över Övervaka

Sidan Översikt i Azure-portalen för varje IoT-hubb innehåller diagram som tillhandahåller vissa användningsmått, till exempel antalet meddelanden som används och antalet enheter som är anslutna till IoT-hubben.

Standardmåttdiagram på översiktssidan för IoT Hub.

Ett korrekt värde för antal meddelanden kan fördröjas med 1 minut. På grund av IoT Hub-tjänstinfrastrukturen kan värdet ibland studsa mellan högre och lägre värden vid uppdatering. Den här räknaren bör endast vara felaktig för värden som ackumulerats under den senaste minuten.

Informationen som visas i fönstret Översikt är användbar, men representerar bara en liten mängd övervakningsdata som är tillgängliga för en IoT-hubb. Vissa övervakningsdata samlas in automatiskt och är tillgängliga för analys så snart du skapar din IoT-hubb. Du kan aktivera andra typer av datainsamling med viss konfiguration.

Vad är Azure Monitor?

Azure IoT Hub övervakar data med hjälp av Azure Monitor, en fullständig stackövervakningstjänst. Azure Monitor kan övervaka dina Azure-resurser och andra molnresurser eller lokala resurser.

Börja med artikeln Övervaka Azure-resurser med Azure Monitor, som beskriver följande begrepp:

  • Vad är Azure Monitor?
  • Övervaka data som samlas in i Azure
  • Konfigurera datainsamling
  • Mått och loggar
  • Standardverktyg i Azure för analys och insikter
  • Aviseringar utlöses vid övervakning av data

Mer information om mått och loggar som skapats av Azure IoT Hub finns i Övervaka Azure IoT Hub-datareferens.

Viktigt!

Händelserna som genereras av IoT Hub-tjänsten med hjälp av Azure Monitor-resursloggar garanteras inte vara tillförlitliga eller ordnade. Vissa händelser kan gå förlorade eller levereras i oförordnad ordning. Resursloggar är inte avsedda att vara i realtid, så det kan ta flera minuter innan händelser loggas till ditt val av mål.

Resten av den här artikeln bygger på artikeln Övervakning av Azure-resurser med Azure Monitor genom att beskriva specifika data som samlats in för Azure IoT Hub. Du ser exempel på hur du konfigurerar din datainsamling och hur du analyserar dessa data med Azure-verktyg.

Samling och routning

Plattformsmått, aktivitetsloggen och resursloggarna har unika specifikationer för insamling, lagring och routning.

  • Plattformsmått och aktivitetsloggen samlas in och lagras automatiskt, men kan skickas till andra platser med hjälp av en diagnostikinställning.

  • Resursloggar samlas inte in och lagras förrän du skapar en diagnostikinställning och skickar dem till en eller flera platser.

  • Mått och loggar kan dirigeras till flera platser, som de här:

    • Azure Monitor Logs-lagret via en associerad Log Analytics-arbetsyta. Där kan de analyseras med Log Analytics.
    • Azure Storage för arkivering och offlineanalys
    • En Event Hubs-slutpunkt där de kan läsas av externa program, till exempel siem-verktyg (säkerhetsinformation och händelsehantering) från tredje part.

I Azure-portalen från din IoT-hubb under Övervakning kan du välja Diagnostikinställningar följt av Lägg till diagnostikinställning för att skapa diagnostikinställningar som är begränsade till loggar och plattformsmått som genereras av din IoT-hubb.

Skärmbild som visar hur du lägger till en diagnostikinställning i din IoT-hubb i Azure-portalen.

Följande skärmbild visar en diagnostikinställning för routning av resursloggtypen Anslut ionsåtgärder och alla plattformsmått till en Log Analytics-arbetsyta.

Skärmbild av formuläret Diagnostik Inställningar för övervakning av en IoT-hubb.

Mer information om hur du skapar en diagnostikinställning med hjälp av Azure-portalen, CLI eller PowerShell finns i Skapa diagnostikinställning för att samla in plattformsloggar och mått i Azure. När du skapar en diagnostikinställning anger du vilka kategorier av loggar som ska samlas in. Kategorierna för Azure IoT Hub visas under Resursloggar i datareferensen Övervakning av Azure IoT Hub. Händelser genereras endast för fel i vissa kategorier.

När du dirigerar IoT Hub-plattformsmått till andra platser:

Analysera mått

Du kan analysera mått för Azure IoT Hub med mått från andra Azure-tjänster med hjälp av Metrics Explorer. Mer information om det här verktyget finns i Analysera mått med Azure Monitor Metrics Explorer.

Öppna Metrics Explorer genom att gå till Azure-portalen och öppna din IoT-hubb och sedan välja Mått under Övervakning. Den här utforskaren är som standard begränsad till de plattformsmått som genereras av din IoT-hubb.

Skärmbild som visar sidan för måttutforskaren för en IoT-hubb.

En lista över de plattformsmått som samlats in för Azure IoT Hub finns i Mått i datareferensen Övervakning av Azure IoT Hub. En lista över de plattformsmått som samlats in för alla Azure-tjänster finns i Mått som stöds med Azure Monitor.

För IoT Hub-plattformsmått som samlas in i antal enheter kanske vissa aggregeringar inte är tillgängliga eller användbara. Mer information finns i Sammansättningar som stöds i datareferensen Övervakning av Azure IoT Hub.

Vissa IoT Hub-mått, till exempel routningsmått, är flerdimensionella. För dessa mått kan du använda filter och dela upp i dina diagram baserat på en dimension.

Analysera loggar

Data i Azure Monitor-loggar lagras i tabeller där varje tabell har en egen uppsättning unika egenskaper. Data i dessa tabeller är associerade med en Log Analytics-arbetsyta och kan efterfrågas i Log Analytics. Mer information om Azure Monitor-loggar finns i Översikt över Azure Monitor-loggar i Azure Monitor-dokumentationen.

Om du vill dirigera data till Azure Monitor-loggar måste du skapa en diagnostikinställning för att skicka resursloggar eller plattformsmått till en Log Analytics-arbetsyta. Mer information finns i Samling och routning.

Om du vill utföra Log Analytics går du till Azure-portalen och öppnar din IoT-hubb och väljer sedan Loggar under Övervakning. Dessa Log Analytics-frågor är som standard begränsade till loggar och mått som samlas in i Azure Monitor-loggar för din IoT-hubb.

Sidan Loggar för en IoT-hubb.

En lista över de tabeller som används av Azure Monitor-loggar och som kan köras av Log Analytics finns i Azure Monitor Logs-tabeller i datareferensen Övervakning av Azure IoT Hub.

Alla resursloggar i Azure Monitor har samma fält följt av tjänstspecifika fält. Det vanliga schemat beskrivs i Azure Monitor-resursloggschemat. Du hittar schemat och kategorierna för resursloggar som samlats in för Azure IoT Hub i Resursloggar i datareferensen Övervakning av Azure IoT Hub. Händelser genereras endast för fel i vissa kategorier.

Aktivitetsloggen är en azure-plattformsinloggning som ger insikter om händelser på prenumerationsnivå. Du kan visa den oberoende eller dirigera den till Azure Monitor-loggar, där du kan göra mer komplexa frågor med Log Analytics.

När du dirigerar IoT Hub-plattformsmått till Azure Monitor-loggar:

  • Följande plattformsmått kan inte exporteras via diagnostikinställningar: Anslut enheter och Totalt antal enheter.

  • Flerdimensionella mått, till exempel vissa routningsmått, exporteras för närvarande som utplattade endimensionella mått aggregerade över dimensionsvärden. Mer information finns i Exportera plattformsmått till andra platser.

Vanliga frågor med IoT Hub finns i Exempel på Kusto-frågor. Mer information om hur du använder Log Analytics-frågor finns i Översikt över loggfrågor i Azure Monitor.

SDK-version i IoT Hub-loggar

Vissa åtgärder i IoT Hub-resursloggar returnerar en sdkVersion egenskap i objektet properties . När en enhet eller en serverdelsapp använder någon av Azure IoT SDK:er för dessa åtgärder innehåller den här egenskapen information om SDK:n som används, SDK-versionen och den plattform där SDK:n körs.

I följande exempel visas egenskapen sdkVersion som genereras för en deviceConnect åtgärd med hjälp av:

  • SDK:n för Node.js enhet: "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)".

I följande tabell visas det SDK-namn som används för olika Azure IoT SDK:er:

SDK-namn i egenskapen sdkVersion Språk
.NET .NET (C#)
microsoft.azure.devices .NET-tjänst-SDK (C#)
microsoft.azure.devices.client .NET-enhets-SDK (C#)
iothubclient SDK för C- eller Python v1-enheter (inaktuella)
iothubserviceclient Tjänst-SDK för C eller Python v1 (inaktuell)
azure-iot-device-iothub-py Python-enhets-SDK
azure-iot-device Node.js enhets-SDK
azure-iothub Node.js tjänst-SDK
com.microsoft.azure.iothub-java-client Java-enhets-SDK
com.microsoft.azure.iothub.service.sdk Java-tjänst-SDK
com.microsoft.azure.sdk.iot.iot-device-client Java-enhets-SDK
com.microsoft.azure.sdk.iot.iot-service-client Java-tjänst-SDK
C Inbäddad C
C + (OSSimplified = Eclipse ThreadX) Eclipse ThreadX

Du kan extrahera SDK-versionsegenskapen när du utför frågor mot IoT Hub-resursloggar. Följande fråga extraherar till exempel SDK-versionsegenskapen (och enhets-ID) från egenskaperna som returneras av Anslut ionsåtgärder. De här två egenskaperna skrivs till resultatet tillsammans med tiden för åtgärden och resurs-ID:t för den IoT-hubb som enheten ansluter till.

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

Exempel på Kusto-frågor

Använd följande Kusto-frågor för att övervaka din IoT-hubb.

Viktigt!

Om du väljer LoggarIoT Hub-menyn öppnas Log Analytics och innehåller endast data från din IoT Hub-resurs. För frågor som innehåller data från andra IoT-hubbar eller Azure-tjänster väljer du LoggarAzure Monitor-menyn. Mer information finns i Log query scope and time range in Azure Monitor Log Analytics (Loggfrågeomfång och tidsintervall i Azure Monitor Log Analytics).

  • Anslut ivitetsfel: Identifiera enhetsanslutningsfel.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" and Level == "Error"
    
  • Begränsningsfel: Identifiera enheter som gjorde flest begäranden som resulterade i begränsningsfel.

    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
    
  • Döda slutpunkter: Identifiera döda eller felfria slutpunkter efter hur många gånger problemet rapporterades och ta reda på orsaken.

    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
    
  • Felsammanfattning: Antal fel för alla åtgärder efter typ.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Level == "Error"
    | summarize count() by ResultType, ResultDescription, Category, _ResourceId
    
  • Nyligen anslutna enheter: Lista över enheter som IoT Hub såg ansluta under den angivna tidsperioden.

    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
    
  • Anslut ionshändelser för en specifik enhet: Alla anslutningshändelser som loggas för en specifik enhet (testenhet).

    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 av enheter: Lista över enheter och deras SDK-versioner för enhetsanslutningar eller enhet till molntvillingåtgärder.

    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
    

Läsa loggar från Azure Event Hubs

När du har konfigurerat händelseloggning via diagnostikinställningar kan du skapa program som läser upp loggarna så att du kan vidta åtgärder baserat på informationen i dem. Följande exempelkod hämtar loggar från en händelsehubb.

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

Aviseringar

Med Azure Monitor-aviseringar meddelas du proaktivt när viktiga tillstånd hittas i dina övervakningsdata. Det gör att du kan identifiera och åtgärda problem i systemet innan kunderna märker dem. Du kan ange aviseringar för mått, loggar och aktivitetsloggen. Olika typer av aviseringar har fördelar och nackdelar.

När du skapar en aviseringsregel baserat på plattformsmått (insamlade i antal enheter) kanske vissa aggregeringar inte är tillgängliga eller användbara. Mer information finns i Aggregeringar som stöds i Övervakning av Azure IoT Hub-datareferens.

Övervaka frånkopplingar per enhet med Event Grid

Azure Monitor tillhandahåller ett mått Anslut enheter som du kan använda för att övervaka antalet enheter som är anslutna till din IoT Hub. Det här måttet utlöser en avisering när antalet anslutna enheter sjunker under ett tröskelvärde. Azure Monitor genererar även händelser i kategorin anslutningar som du kan använda för att övervaka enhetsanslutningar, frånkopplingar och anslutningsfel. Även om dessa händelser kan vara tillräckliga för vissa scenarier tillhandahåller Azure Event Grid en lösning för övervakning per enhet med låg svarstid som du kan använda för att spåra enhetsanslutningar för kritiska enheter och infrastruktur.

Med Event Grid kan du prenumerera på händelserna IoT Hub Device Anslut ed och DeviceDisconnected för att utlösa aviseringar och övervaka enhetens anslutningstillstånd. Event Grid ger en mycket lägre händelsefördröjning än Azure Monitor, så du kan övervaka per enhet i stället för för alla anslutna enheter. Dessa faktorer gör Event Grid till den bästa metoden för att övervaka anslutningar för kritiska enheter och infrastruktur. Vi rekommenderar starkt att du använder Event Grid för att övervaka enhetsanslutningar i produktionsmiljöer.

Mer information om övervakning av enhetsanslutningar med Event Grid och Azure Monitor finns i Övervaka, diagnostisera och felsöka enhetsanslutningar till Azure IoT Hub.

Nästa steg