Memantau Azure IoT Hub

Bila Anda memiliki aplikasi dan proses bisnis yang penting dan mengandalkan sumber Azure, sebaiknya Anda memantau sumber tersebut untuk mengetahui ketersediaan, performa, dan operasinya. Artikel ini menjelaskan data pemantauan yang dihasilkan oleh Azure IoT Hub dan cara menggunakan fitur Azure Monitor untuk menganalisis dan memberi pemberitahuan tentang data ini.

Ikhtisar monitor

Halaman Ringkasan di Portal Azure untuk setiap hub IoT menyertakan bagan yang berisi beberapa metrik penggunaan, seperti jumlah pesan yang digunakan dan jumlah perangkat yang terhubung ke hub IoT.

Bagan metrik default di halaman Ringkasan hub IoT.

Nilai jumlah pesan yang benar mungkin tertunda 1 menit. Karena infrastruktur layanan IoT Hub, nilai terkadang dapat memantul antara nilai yang lebih tinggi dan lebih rendah saat refresh. Penghitung ini harus salah hanya untuk nilai yang dikumpulkan selama menit terakhir.

Informasi yang disajikan di panel Gambaran Umum berguna, tetapi hanya mewakili sejumlah kecil data pemantauan yang tersedia untuk hub IoT. Beberapa data pemantauan dikumpulkan secara otomatis dan tersedia untuk analisis segera setelah Anda membuat hub IoT Anda. Anda dapat mengaktifkan jenis pengumpulan data lainnya dengan beberapa konfigurasi.

Apa itu Azure Monitor?

Azure IoT Hub memantau data menggunakan Azure Monitor, layanan pemantauan tumpukan penuh. Azure Monitor dapat memantau sumber daya Azure Anda dan sumber daya cloud atau lokal lainnya.

Mulai dengan artikel Memantau sumber daya Azure dengan Azure Monitor, yang menjelaskan konsep berikut:

  • Apa itu Azure Monitor?
  • Memantau data yang dikumpulkan di Azure
  • Mengonfigurasi pengumpulan data
  • Metrik dan log
  • Alat standar di Azure untuk analisis dan wawasan
  • Pemberitahuan diaktifkan saat memantau data

Untuk informasi selengkapnya tentang metrik dan log yang dibuat oleh Azure IoT Hub, lihat Memantau referensi data Azure IoT Hub.

Penting

Peristiwa yang dipancarkan oleh layanan IoT Hub menggunakan log sumber daya Azure Monitor tidak dijamin dapat diandalkan atau dipesan. Beberapa peristiwa mungkin hilang atau dikirim tak berurutan. Log sumber daya tidak dimaksudkan untuk real time, sehingga mungkin perlu waktu beberapa menit agar peristiwa dicatat ke tujuan pilihan Anda.

Sisa artikel ini dibangun pada artikel Memantau sumber daya Azure dengan Azure Monitor dengan menjelaskan data tertentu yang dikumpulkan untuk Azure IoT Hub. Anda akan melihat contoh untuk mengonfigurasi pengumpulan data Anda dan cara menganalisis data ini dengan alat Azure.

Pengumpulan dan perutean

Metrik platform, log Aktivitas, dan log sumber daya memiliki spesifikasi pengumpulan, penyimpanan, dan perutean yang unik.

  • Metrik platform dan Log aktivitas dikumpulkan secara otomatis, tetapi dapat dirutekan ke lokasi lain dengan menggunakan pengaturan diagnostik.

  • Log sumber daya tidak dikumpulkan dan disimpan hingga Anda membuat pengaturan diagnostik dan merutekannya ke satu atau beberapa lokasi.

  • Metrik dan log dapat dirutekan ke beberapa lokasi termasuk:

    • Penyimpanan Azure Monitor Logs melalui ruang kerja Log Analytics terkait. Di sana, log dapat dianalisis menggunakan Log Analytics.
    • Azure Storage untuk pengarsipan dan analisis offline
    • Titik akhir Azure Event Hubs tempat mereka dapat dibaca oleh aplikasi eksternal, misalnya, alat informasi keamanan dan manajemen peristiwa (SIEM) pihak ketiga.

Di portal Azure dari hub IoT Anda di bawah Pemantauan, Anda dapat memilih Pengaturan diagnostik diikuti dengan Menambahkan pengaturan diagnostik untuk membuat pengaturan diagnostik yang dicakup ke log dan metrik platform yang dipancarkan oleh hub IoT Anda.

Cuplikan layar memperlihatkan cara menambahkan pengaturan diagnostik di hub IoT Anda di portal Azure.

Cuplikan layar berikut menunjukkan pengaturan diagnostik untuk merutekan jenis log sumber daya Operasi Koneksi dan semua metrik platform ke ruang kerja Log Analytics.

Cuplikan layar formulir diagnostik Pengaturan untuk memantau hub IoT.

Untuk informasi selengkapnya tentang membuat pengaturan diagnostik menggunakan portal Azure, CLI, atau PowerShell, lihat Membuat pengaturan diagnostik untuk mengumpulkan log dan metrik platform di Azure. Saat membuat pengaturan diagnostik, Anda menentukan kategori log yang akan dikumpulkan. Kategori untuk Azure IoT Hub tercantum di bagian Log sumber daya di referensi data Pemantauan Azure IoT Hub. Peristiwa hanya dipancarkan untuk kesalahan dalam beberapa kategori.

Saat merutekan metrik platform IoT Hub ke lokasi lain:

  • Metrik platform ini tidak dapat diekspor melalui pengaturan diagnostik: perangkat Koneksi dan Total perangkat.

  • Metrik multi-dimensi, misalnya beberapa metrik perutean, saat ini diekspor sebagai metrik satu dimensi datar yang digabungkan di seluruh nilai dimensi. Untuk informasi selengkapnya, lihat Mengekspor metrik platform ke lokasi lain.

Menganalisis metrik

Anda dapat menganalisis metrik untuk Azure IoT Hub dengan metrik dari layanan Azure lainnya menggunakan penjelajah metrik. Untuk informasi selengkapnya tentang alat ini, lihat Menganalisis metrik dengan penjelajah metrik Azure Monitor.

Untuk membuka penjelajah metrik, buka portal Azure dan buka hub IoT Anda, lalu pilih Metrik di bawah Pemantauan. Penjelajah ini dilingkup, secara default, ke metrik platform yang dipancarkan oleh hub IoT Anda.

Cuplikan layar memperlihatkan halaman penjelajah metrik untuk hub IoT.

Untuk daftar metrik platform yang dikumpulkan untuk Azure IoT Hub, lihat Metrik di referensi data Memantau Azure IoT Hub. Untuk daftar metrik platform yang dikumpulkan untuk semua layanan Azure, lihat Metrik yang didukung dengan Azure Monitor.

Untuk metrik platform IoT Hub yang dikumpulkan dalam satuan hitungan, beberapa agregasi mungkin tidak tersedia atau dapat digunakan. Untuk mempelajari lebih lanjut, lihat Agregasi yang didukung dalam referensi data Memantau Azure IoT Hub.

Beberapa metrik IoT Hub, seperti metrik perutean, bersifat multi-dimensi. Untuk metrik ini, Anda dapat menerapkan filter dan pemisahan ke bagan berdasarkan dimensi.

Menganalisis log

Data di Azure Monitor Logs disimpan dalam tabel tempat setiap tabel memiliki rangkaian properti uniknya sendiri. Data dalam tabel ini dikaitkan dengan ruang kerja Log Analytics dan dapat dikueri di Log Analytics. Untuk mempelajari Azure Monitor Logs lebih lanjut, lihat Ringkasan Azure Monitor Logs dalam dokumentasi Azure Monitor.

Untuk merutekan data ke Azure Monitor Logs, Anda harus membuat pengaturan diagnostik untuk mengirim log sumber daya atau metrik platform ke ruang kerja Log Analytics. Untuk mempelajari selengkapnya, lihat Pengumpulan dan perutean.

Untuk melakukan Analitik Log, buka portal Azure dan buka hub IoT Anda, lalu pilih Log di bawah Pemantauan. Kueri Analitik Log ini dilingkup, secara default, ke log dan metrik yang dikumpulkan di Log Azure Monitor untuk hub IoT Anda.

Halaman log untuk hub IoT.

Untuk daftar tabel yang digunakan oleh Azure Monitor Logs dan dapat dikueri oleh Log Analytics, lihat Tabel Azure Monitor Logs dalam referensi data Memantau Azure IoT Hub.

Semua log sumber daya di Azure Monitor memiliki bidang yang sama diikuti dengan bidang khusus layanan. Skema umum diuraikan dalam skema log sumber daya Azure Monitor. Anda dapat menemukan skema dan kategori log sumber daya yang dikumpulkan untuk Azure IoT Hub di Log sumber daya dalam referensi data Memantau Azure IoT Hub. Peristiwa hanya dipancarkan untuk kesalahan dalam beberapa kategori.

Log Aktivitas adalah platform login di Azure yang memberikan wawasan tentang aktivitas tingkat langganan. Anda dapat melihatnya secara independen atau merutekannya ke Log Azure Monitor, tempat Anda dapat melakukan kueri yang lebih kompleks menggunakan Analitik Log.

Saat merutekan metrik platform IoT Hub ke Log Azure Monitor:

  • Metrik platform berikut tidak dapat diekspor melalui pengaturan diagnostik: perangkat Koneksi dan Total perangkat.

  • Metrik multi-dimensi, misalnya beberapa metrik perutean, saat ini diekspor sebagai metrik satu dimensi datar yang digabungkan di seluruh nilai dimensi. Untuk detail selengkapnya, lihat Mengekspor metrik platform ke lokasi lain.

Untuk kueri umum dengan IoT Hub, lihat Contoh kueri Kusto. Untuk informasi selengkapnya tentang menggunakan kueri Analitik Log, lihat Gambaran Umum kueri log di Azure Monitor.

Versi SDK dalam log IoT Hub

Beberapa operasi di log sumber daya IoT Hub menampilkan properti sdkVersion di objek properties-nya. Untuk operasi ini, saat aplikasi perangkat atau backend menggunakan salah satu Azure IoT SDK, properti ini berisi informasi tentang SDK yang digunakan, versi SDK, dan platform tempat SDK dijalankan.

Contoh berikut menunjukkan properti yang sdkVersion dikeluarkan untuk deviceConnect operasi menggunakan:

  • SDK perangkat 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)".

Tabel berikut memperlihatkan nama SDK yang digunakan untuk Azure IoT SDK yang berbeda:

Nama SDK dalam properti sdkVersion Bahasa
.NET .NET (C#)
microsoft.azure.devices SDK layanan .NET (C#)
microsoft.azure.devices.client SDK perangkat .NET (C#)
iothubclient SDK perangkat C atau Python v1 (tidak digunakan lagi)
iothubserviceclient SDK layanan C atau Python v1 (tidak digunakan lagi)
azure-iot-device-iothub-py SDK perangkat Python
azure-iot-device SDK perangkat Node.js
azure-iothub SDK layanan Node.js
com.microsoft.azure.iothub-java-client SDK perangkat Java
com.microsoft.azure.iothub.service.sdk SDK layanan Java
com.microsoft.azure.sdk.iot.iot-device-client SDK perangkat Java
com.microsoft.azure.sdk.iot.iot-service-client SDK layanan Java
C C yang disematkan
C + (OSSimplified = Eclipse ThreadX) Eclipse ThreadX

Anda dapat mengekstrak properti versi SDK saat melakukan kueri terhadap log sumber daya IoT Hub. Misalnya, kueri berikut mengekstrak properti versi SDK (dan ID perangkat) dari properti yang ditampilkan oleh operasi Koneksi. Kedua properti ini ditulis ke hasil bersama dengan waktu operasi dan ID sumber daya hub IoT tempat perangkat terhubung.

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

Sampel kueri Kusto

Gunakan kueri Kusto berikut untuk membantu Anda memantau hub IoT Anda.

Penting

Memilih Log dari menu IoT Hub akan membuka Analitik Log dan menyertakan data hanya dari sumber daya hub IoT Anda. Untuk kueri yang menyertakan data dari hub IoT atau layanan Azure lainnya, pilih Log dari menu Azure Monitor. Untuk informasi selengkapnya, lihat Cakupan kueri log dan rentang waktu di Azure Monitor Log Analytics.

  • kesalahan Koneksi ivity: Mengidentifikasi kesalahan koneksi perangkat.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" and Level == "Error"
    
  • Kesalahan Pembatasan: Mengidentifikasi perangkat yang membuat permintaan terbanyak yang mengakibatkan kesalahan pembatasan.

    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
    
  • Titik Akhir Mati: Identifikasi titik akhir mati atau tidak sehat berdasarkan berapa kali masalah dilaporkan dan ketahui alasannya.

    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
    
  • Ringkasan kesalahan: Jumlah kesalahan di semua operasi menurut jenis.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Level == "Error"
    | summarize count() by ResultType, ResultDescription, Category, _ResourceId
    
  • Perangkat yang baru tersambung: Daftar perangkat yang dilihat IoT Hub terhubung dalam periode waktu yang ditentukan.

    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
    
  • peristiwa Koneksi ion untuk perangkat tertentu: Semua peristiwa koneksi yang dicatat untuk perangkat tertentu (perangkat uji).

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | where DeviceId == "test-device"
    
  • Versi perangkat SDK: Daftar perangkat dan versi SDK-nya untuk koneksi perangkat atau perangkat ke operasi kembar 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
    

Membaca log dari Azure Event Hubs

Setelah menyiapkan pengelogan peristiwa melalui pengaturan diagnostik, Anda dapat membuat aplikasi yang membaca log sehingga Anda dapat mengambil tindakan berdasarkan informasi di dalamnya. Kode sampel berikut mengambil log dari pusat aktivitas.

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

Peringatan

Pemberitahuan Azure Monitor secara proaktif memberi tahu Anda ketika kondisi penting ditemukan dalam data pemantauan Anda. Pemberitahuan ini memungkinkan Anda mengidentifikasi dan mengatasi masalah dalam sistem Anda sebelum pelanggan Anda mengetahuinya. Anda dapat mengatur pemberitahuan tentang metrik, log, dan log aktivitas. Berbagai jenis pemberitahuan memiliki kelebihan dan kekurangan.

Saat Anda membuat aturan pemberitahuan berdasarkan metrik platform (dikumpulkan dalam satuan jumlah), beberapa agregasi mungkin tidak tersedia atau dapat digunakan. Untuk informasi selengkapnya, lihat Agregasi yang didukung dalam Memantau referensi data Azure IoT Hub.

Memantau pemutusan koneksi per perangkat dengan Event Grid

Azure Monitor menyediakan metrik, perangkat Koneksi, yang dapat Anda gunakan untuk memantau jumlah perangkat yang terhubung ke IoT Hub Anda. Metrik ini memicu pemberitahuan saat jumlah perangkat yang terhubung turun di bawah nilai ambang batas. Azure Monitor juga mengeluarkan peristiwa dalam kategori koneksi yang dapat Anda gunakan untuk memantau koneksi, pemutusan sambungan, dan kesalahan sambungan perangkat. Meskipun peristiwa ini mungkin cukup untuk beberapa skenario, Azure Event Grid menyediakan solusi pemantauan latensi rendah per perangkat yang dapat Anda gunakan untuk melacak koneksi perangkat untuk perangkat dan infrastruktur penting.

Dengan Event Grid, Anda dapat berlangganan peristiwa DeviceConnected dan DeviceDisconnected IoT Hub untuk memicu pemberitahuan dan memantau status koneksi perangkat. Event Grid menyediakan latensi peristiwa yang jauh lebih rendah daripada Azure Monitor, sehingga Anda dapat memantau berdasarkan per perangkat daripada untuk semua perangkat yang terhubung. Faktor-faktor ini menjadikan Event Grid sebagai metode yang disukai untuk memantau koneksi untuk perangkat dan infrastruktur penting. Sebaiknya gunakan Event Grid untuk memantau koneksi perangkat di lingkungan produksi.

Untuk informasi selengkapnya tentang memantau konektivitas perangkat dengan Event Grid dan Azure Monitor, lihat Memantau, mendiagnosis, dan memecahkan masalah konektivitas perangkat ke Azure IoT Hub.

Langkah berikutnya