Monitorowanie usługi Azure IoT Hub

Gdy masz aplikacje o krytycznym znaczeniu i procesy biznesowe, które opierają się na zasobach platformy Azure, chcesz monitorować te zasoby pod kątem ich dostępności, wydajności i działania. W tym artykule opisano dane monitorowania generowane przez usługę Azure IoT Hub oraz sposób używania funkcji usługi Azure Monitor do analizowania i zgłaszania alertów dotyczących tych danych.

Omówienie narzędzia Monitor

Strona Przegląd w witrynie Azure Portal dla każdego centrum IoT zawiera wykresy zawierające niektóre metryki użycia, takie jak liczba używanych komunikatów i liczba urządzeń połączonych z centrum IoT.

Domyślne wykresy metryk na stronie Przegląd centrum IoT Hub.

Prawidłowa wartość liczby komunikatów może być opóźniona o 1 minutę. Ze względu na infrastrukturę usługi IoT Hub wartość może czasami odbijać się między wyższymi i niższymi wartościami podczas odświeżania. Ten licznik powinien być niepoprawny tylko dla wartości naliczonych w ciągu ostatniej minuty.

Informacje przedstawione w okienku Przegląd są przydatne, ale reprezentują tylko niewielką ilość danych monitorowania dostępnych dla centrum IoT. Niektóre dane monitorowania są zbierane automatycznie i dostępne do analizy zaraz po utworzeniu centrum IoT. W przypadku niektórych konfiguracji można włączyć inne typy zbierania danych.

Co to jest usługa Azure Monitor?

Usługa Azure IoT Hub monitoruje dane przy użyciu usługi Azure Monitor, pełnej usługi monitorowania stosu. Usługa Azure Monitor może monitorować zasoby platformy Azure i inne zasoby w chmurze lub zasoby lokalne.

Zacznij od artykułu Monitorowanie zasobów platformy Azure za pomocą usługi Azure Monitor, w którym opisano następujące pojęcia:

  • Co to jest usługa Azure Monitor?
  • Monitorowanie danych zebranych na platformie Azure
  • Konfigurowanie zbierania danych
  • Metryki i dzienniki
  • Standardowe narzędzia na platformie Azure na potrzeby analizy i szczegółowych informacji
  • Alerty wyzwalane podczas monitorowania danych

Aby uzyskać więcej informacji na temat metryk i dzienników utworzonych przez usługę Azure IoT Hub, zobacz Monitorowanie dokumentacji danych usługi Azure IoT Hub.

Ważne

Zdarzenia emitowane przez usługę IoT Hub przy użyciu dzienników zasobów usługi Azure Monitor nie są gwarantowane jako niezawodne ani uporządkowane. Niektóre zdarzenia mogą zostać utracone lub dostarczone z zamówienia. Dzienniki zasobów nie są przeznaczone do czasu rzeczywistego, więc może upłynąć kilka minut, aby zdarzenia zostały zarejestrowane w wybranym miejscu docelowym.

Pozostała część tego artykułu opiera się na artykule Monitorowanie zasobów platformy Azure za pomocą usługi Azure Monitor , opisując konkretne dane zebrane dla usługi Azure IoT Hub. Zobaczysz przykłady konfigurowania zbierania danych i sposobu analizowania tych danych za pomocą narzędzi platformy Azure.

Zbieranie i routing

Metryki platformy, dziennik aktywności i dzienniki zasobów mają unikatowe specyfikacje dotyczące kolekcji, magazynu i routingu.

  • Metryki platformy i dziennik aktywności są zbierane i przechowywane automatycznie, ale mogą być kierowane do innych lokalizacji przy użyciu ustawienia diagnostycznego.

  • Dzienniki zasobów nie są zbierane ani przechowywane, dopóki nie utworzysz ustawienia diagnostycznego i nie przekierujesz ich do co najmniej jednej lokalizacji.

  • Metryki i dzienniki można kierować do kilku lokalizacji, a w tym:

    • Do magazynu dzienników usługi Azure Monitor za pośrednictwem skojarzonego obszaru roboczego usługi Log Analytics. Można je analizować przy użyciu usługi Log Analytics.
    • Usługa Azure Storage na potrzeby archiwizowania i analizy offline
    • Punkt końcowy usługi Event Hubs, w którym mogą być odczytywane przez aplikacje zewnętrzne, na przykład narzędzia do zarządzania informacjami o zabezpieczeniach i zdarzeniami innych firm (SIEM).

W witrynie Azure Portal z centrum IoT w obszarze Monitorowanie możesz wybrać pozycję Ustawienia diagnostyczne, a następnie pozycję Dodaj ustawienie diagnostyczne, aby utworzyć ustawienia diagnostyczne w zakresie dzienników i metryk platformy emitowanych przez centrum IoT.

Zrzut ekranu przedstawiający sposób dodawania ustawienia diagnostycznego w centrum IoT w witrynie Azure Portal.

Poniższy zrzut ekranu przedstawia ustawienie diagnostyczne dotyczące routingu typu dziennika zasobów Połączenie ion Operations i wszystkich metryk platformy do obszaru roboczego usługi Log Analytics.

Zrzut ekranu przedstawiający formularz Ustawienia diagnostyczny do monitorowania centrum IoT.

Aby uzyskać więcej informacji na temat tworzenia ustawienia diagnostycznego przy użyciu witryny Azure Portal, interfejsu wiersza polecenia lub programu PowerShell, zobacz Tworzenie ustawienia diagnostycznego w celu zbierania dzienników platformy i metryk na platformie Azure. Podczas tworzenia ustawienia diagnostycznego należy określić kategorie dzienników, które mają być zbierane. Kategorie usługi Azure IoT Hub są wymienione w obszarze Dzienniki zasobów w dokumentacji danych usługi Azure IoT Hub monitorowania. Zdarzenia są emitowane tylko w przypadku błędów w niektórych kategoriach.

Podczas routingu metryk platformy usługi IoT Hub do innych lokalizacji:

  • Te metryki platformy nie można eksportować za pośrednictwem ustawień diagnostycznych: Połączenie urządzenia i łączna liczba urządzeń.

  • Metryki wielowymiarowe, na przykład niektóre metryki routingu, są obecnie eksportowane jako spłaszczone metryki jednowymiarowe agregowane między wartościami wymiarów. Aby uzyskać więcej informacji, zobacz Eksportowanie metryk platformy do innych lokalizacji.

Analizowanie metryk

Metryki usługi Azure IoT Hub można analizować za pomocą metryk z innych usług platformy Azure przy użyciu Eksploratora metryk. Aby uzyskać więcej informacji na temat tego narzędzia, zobacz Analizowanie metryk za pomocą Eksploratora metryk usługi Azure Monitor.

Aby otworzyć eksploratora metryk, przejdź do witryny Azure Portal i otwórz centrum IoT Hub, a następnie wybierz pozycję Metryki w obszarze Monitorowanie. Ten eksplorator jest domyślnie w zakresie do metryk platformy emitowanych przez centrum IoT.

Zrzut ekranu przedstawiający stronę Eksploratora metryk dla centrum IoT Hub.

Aby uzyskać listę metryk platformy zebranych dla usługi Azure IoT Hub, zobacz Metryki w dokumentacji dotyczącej monitorowania danych usługi Azure IoT Hub. Aby uzyskać listę metryk platformy zebranych dla wszystkich usług platformy Azure, zobacz Obsługiwane metryki w usłudze Azure Monitor.

W przypadku metryk platformy usługi IoT Hub, które są zbierane w jednostkach liczby, niektóre agregacje mogą być niedostępne lub użyteczne. Aby dowiedzieć się więcej, zobacz Obsługiwane agregacje w temacie Monitorowanie danych usługi Azure IoT Hub.

Niektóre metryki usługi IoT Hub, takie jak metryki routingu, są wielowymiarowe. W przypadku tych metryk można zastosować filtry i podzielić je na wykresy na podstawie wymiaru.

Analizowanie dzienników

Dane w dziennikach usługi Azure Monitor są przechowywane w tabelach, w których każda tabela ma własny zestaw unikatowych właściwości. Dane w tych tabelach są skojarzone z obszarem roboczym usługi Log Analytics i mogą być odpytywane w usłudze Log Analytics. Aby dowiedzieć się więcej na temat dzienników usługi Azure Monitor, zobacz Omówienie dzienników usługi Azure Monitor w dokumentacji usługi Azure Monitor.

Aby kierować dane do dzienników usługi Azure Monitor, musisz utworzyć ustawienie diagnostyczne w celu wysyłania dzienników zasobów lub metryk platformy do obszaru roboczego usługi Log Analytics. Aby dowiedzieć się więcej, zobacz Zbieranie i routing.

Aby wykonać usługę Log Analytics, przejdź do witryny Azure Portal i otwórz centrum IoT Hub, a następnie wybierz pozycję Dzienniki w obszarze Monitorowanie. Te zapytania usługi Log Analytics są domyślnie ograniczone do dzienników i metryk zebranych w dziennikach usługi Azure Monitor dla centrum IoT.

Strona dzienników dla centrum IoT.

Aby uzyskać listę tabel używanych przez dzienniki usługi Azure Monitor i do wykonywania zapytań w usłudze Log Analytics, zobacz Tabele dzienników usługi Azure Monitor w dokumentacji dotyczącej monitorowania danych usługi Azure IoT Hub.

Wszystkie dzienniki zasobów w usłudze Azure Monitor mają te same pola, a następnie pola specyficzne dla usługi. Typowy schemat jest opisany w schemacie dziennika zasobów usługi Azure Monitor. Schemat i kategorie dzienników zasobów zebranych dla usługi Azure IoT Hub można znaleźć w artykule Monitorowanie danych usługi Azure IoT Hub. Zdarzenia są emitowane tylko w przypadku błędów w niektórych kategoriach.

Dziennik aktywności to identyfikator logowania platformy Azure, który zapewnia wgląd w zdarzenia na poziomie subskrypcji. Można wyświetlać je niezależnie lub kierować do dzienników usługi Azure Monitor, gdzie można wykonywać bardziej złożone zapytania przy użyciu usługi Log Analytics.

Podczas routingu metryk platformy usługi IoT Hub do dzienników usługi Azure Monitor:

  • Następujące metryki platformy nie można eksportować za pośrednictwem ustawień diagnostycznych: Połączenie urządzenia i łączna liczba urządzeń.

  • Metryki wielowymiarowe, na przykład niektóre metryki routingu, są obecnie eksportowane jako spłaszczone metryki jednowymiarowe agregowane między wartościami wymiarów. Aby uzyskać więcej informacji, zobacz Eksportowanie metryk platformy do innych lokalizacji.

Aby zapoznać się z typowymi zapytaniami w usłudze IoT Hub, zobacz Przykładowe zapytania Kusto. Aby uzyskać więcej informacji na temat korzystania z zapytań usługi Log Analytics, zobacz Omówienie zapytań dzienników w usłudze Azure Monitor.

Wersja zestawu SDK w dziennikach usługi IoT Hub

Niektóre operacje w dziennikach zasobów usługi IoT Hub zwracają sdkVersion właściwość w swoim properties obiekcie. W przypadku tych operacji, gdy urządzenie lub aplikacja zaplecza korzysta z jednego z zestawów SDK usługi Azure IoT, ta właściwość zawiera informacje o używanym zestawie SDK, wersji zestawu SDK i platformie, na której jest uruchomiony zestaw SDK.

W poniższych przykładach pokazano sdkVersion właściwość emitowaną dla deviceConnect operacji przy użyciu:

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

W poniższej tabeli przedstawiono nazwę zestawu SDK używaną dla różnych zestawów SDK usługi Azure IoT:

Nazwa zestawu SDK we właściwości sdkVersion Język
.NET .NET (C#)
microsoft.azure.devices Zestaw SDK usługi .NET (C#)
microsoft.azure.devices.client Zestaw SDK urządzenia .NET (C#)
iothubclient Zestaw SDK urządzenia C lub Python w wersji 1 (przestarzałe)
iothubserviceclient Zestaw SDK usługi języka C lub Python w wersji 1 (przestarzałe)
azure-iot-device-iothub-py Zestaw SDK urządzenia w języku Python
azure-iot-device zestaw SDK urządzenia Node.js
azure-iothub zestaw SDK usługi Node.js
com.microsoft.azure.iothub-java-client Zestaw SDK urządzenia Java
com.microsoft.azure.iothub.service.sdk Zestaw SDK usługi Java
com.microsoft.azure.sdk.iot.iot-device-client Zestaw SDK urządzenia Java
com.microsoft.azure.sdk.iot.iot-service-client Zestaw SDK usługi Java
C Osadzony język C
C + (OSSimplified = Eclipse ThreadX) Eclipse ThreadX

Właściwość wersji zestawu SDK można wyodrębnić podczas wykonywania zapytań względem dzienników zasobów usługi IoT Hub. Na przykład następujące zapytanie wyodrębnia właściwość wersji zestawu SDK (i identyfikator urządzenia) z właściwości zwracanych przez operacje Połączenie ions. Te dwie właściwości są zapisywane w wynikach wraz z czasem operacji i identyfikatorem zasobu centrum IoT, z którą urządzenie nawiązuje połączenie.

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

Przykładowe zapytania Kusto

Skorzystaj z poniższych zapytań Kusto , aby ułatwić monitorowanie centrum IoT Hub.

Ważne

Wybranie pozycji Dzienniki z menu usługi IoT Hub powoduje otwarcie usługi Log Analytics i obejmuje dane wyłącznie z zasobu usługi IoT Hub. W przypadku zapytań zawierających dane z innych centrów IoT lub usług platformy Azure wybierz pozycję Dzienniki z menu usługi Azure Monitor. Aby uzyskać więcej informacji, zobacz Zakres zapytań dzienników i zakres czasu w usłudze Azure Monitor Log Analytics.

  • błędy Połączenie ivity: Zidentyfikuj błędy połączenia urządzenia.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" and Level == "Error"
    
  • Błędy ograniczania przepustowości: zidentyfikuj urządzenia, które najwięcej żądań powodowały błędy ograniczania przepustowości.

    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
    
  • Martwe punkty końcowe: zidentyfikuj punkty końcowe w złej kondycji według liczby zgłoszonych problemów i poznaj przyczynę problemu.

    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
    
  • Podsumowanie błędu: liczba błędów we wszystkich operacjach według typu.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Level == "Error"
    | summarize count() by ResultType, ResultDescription, Category, _ResourceId
    
  • Ostatnio połączone urządzenia: lista urządzeń, które usługa IoT Hub widziała nawiązywać połączenia w określonym przedziale czasu.

    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
    
  • Połączenie zdarzenia dotyczące określonego urządzenia: wszystkie zdarzenia połączenia zarejestrowane dla określonego urządzenia (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"
    
  • Wersja zestawu SDK urządzeń: lista urządzeń i ich wersji zestawu SDK dla połączeń urządzeń lub urządzeń z operacjami bliźniaczej reprezentacji chmury.

    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
    

Odczytywanie dzienników z usługi Azure Event Hubs

Po skonfigurowaniu rejestrowania zdarzeń za pomocą ustawień diagnostycznych można tworzyć aplikacje, które odczytują dzienniki, dzięki czemu można podjąć działania na podstawie informacji w nich. Poniższy przykładowy kod pobiera dzienniki z centrum zdarzeń.

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

Alerty

Alerty usługi Azure Monitor proaktywnie powiadamiają o znalezieniu ważnych warunków w danych monitorowania. Umożliwiają one identyfikowanie i rozwiązywanie problemów w systemie zanim zauważą je klienci. Alerty dotyczące metryk, dzienników i dziennika aktywności można ustawić. Różne typy alertów mają zalety i wady.

Podczas tworzenia reguły alertu opartej na metrykach platformy (zebranych w jednostkach liczby) niektóre agregacje mogą być niedostępne lub użyteczne. Aby uzyskać więcej informacji, zobacz Obsługiwane agregacje w temacieMonitorowanie dokumentacji danych usługi Azure IoT Hub.

Monitorowanie rozłączania poszczególnych urządzeń za pomocą usługi Event Grid

Usługa Azure Monitor udostępnia metrykę Połączenie urządzeń, których można użyć do monitorowania liczby urządzeń połączonych z usługą IoT Hub. Ta metryka wyzwala alert, gdy liczba połączonych urządzeń spadnie poniżej wartości progowej. Usługa Azure Monitor emituje również zdarzenia w kategorii połączeń, których można użyć do monitorowania połączeń, rozłączeń i błędów połączenia. Chociaż te zdarzenia mogą być wystarczające w niektórych scenariuszach, usługa Azure Event Grid zapewnia rozwiązanie do monitorowania urządzeń o małych opóźnieniach, których można użyć do śledzenia połączeń urządzeń pod kątem krytycznych urządzeń i infrastruktury.

Usługa Event Grid umożliwia subskrybowanie zdarzeń urządzenia usługi IoT Hub Połączenie ed i DeviceDisconnected w celu wyzwolenia alertów i monitorowania stanu połączenia urządzenia. Usługa Event Grid zapewnia znacznie mniejsze opóźnienie zdarzeń niż usługa Azure Monitor, dzięki czemu można monitorować je na poszczególnych urządzeniach, a nie dla wszystkich połączonych urządzeń. Te czynniki sprawiają, że usługa Event Grid jest preferowaną metodą monitorowania połączeń dla urządzeń krytycznych i infrastruktury. Zdecydowanie zalecamy używanie usługi Event Grid do monitorowania połączeń urządzeń w środowiskach produkcyjnych.

Aby uzyskać więcej informacji na temat monitorowania łączności urządzeń za pomocą usługi Event Grid i usługi Azure Monitor, zobacz Monitorowanie, diagnozowanie i rozwiązywanie problemów z łącznością urządzeń z usługą Azure IoT Hub.

Następne kroki