مراقبة Azure IoT Hub

عندما يكون لديك تطبيقات وعمليات أعمال مهمة تعتمد على موارد Azure، فأنت تريد مراقبة هذه الموارد لمعرفة مدى توفرها وأدائها وتشغيلها. توضح هذه المقالة بيانات المراقبة التي تم إنشاؤها بواسطة Azure IoT Hub وكيف يمكنك استخدام ميزات Azure Monitor لتحليل هذه البيانات والتنبيه إليها.

نظرة عامة على الشاشة

تتضمن صفحة نظرة عامة في مدخل Azure لكل مركز مركز إنترنت الأشياء مخططات توفر بعض مقاييس الاستخدام، مثل عدد الرسائل المستخدمة وعدد الأجهزة المتصلة بمركز إنترنت الأشياء.

Default metric charts on IoT hub Overview page.

كن على علم بأن قيمة عدد الرسائل يمكن أن تتأخر بمقدار 1 دقيقة ، وأنه لأسباب تتعلق بالبنية التحتية لخدمة IoT Hub ، يمكن أن ترتد القيمة في بعض الأحيان بين القيم الأعلى والمنخفضة عند التحديث. يجب أن يكون هذا العداد غير صحيح فقط للقيم المتراكمة خلال اللحظة الأخيرة.

المعلومات المقدمة في جزء "نظرة عامة" مفيدة، ولكنها لا تمثل سوى كمية صغيرة من بيانات المراقبة المتوفرة لمركز إنترنت الأشياء. يتم جمع بعض بيانات المراقبة تلقائيا وهي متاحة للتحليل بمجرد إنشاء مركز إنترنت الأشياء الخاص بك. يمكنك تمكين أنواع إضافية من جمع البيانات مع بعض التكوين.

ما هو Azure Monitor؟

يقوم Azure IoT Hub بإنشاء بيانات مراقبة باستخدام Azure Monitor، وهي خدمة مراقبة مكدسة كاملة في Azure توفر مجموعة كاملة من الميزات لمراقبة موارد Azure بالإضافة إلى الموارد الموجودة في السحب الأخرى والمحلية.

ابدأ بمقالة مراقبة موارد Azure باستخدام Azure Monitor، التي تصف المفاهيم التالية:

  • ما هو Azure Monitor؟
  • التكاليف المرتبطة بالمراقبة
  • بيانات المراقبة التي يتم جمعها في Azure
  • تكوين جمع البيانات
  • الأدوات القياسية في Azure للتحليل والتنبيه على بيانات المراقبة

تستند الأقسام التالية إلى هذه المقالة من خلال وصف البيانات المحددة التي تم تجميعها ل Azure IoT Hub وتقديم أمثلة لتكوين جمع البيانات وتحليل هذه البيانات باستخدام أدوات Azure.

بيانات المراقبة

يقوم Azure IoT Hub بتجميع نفس أنواع بيانات المراقبة مثل موارد Azure الأخرى الموضحة في مراقبة البيانات من موارد Azure.

راجع مراقبة مرجع بيانات Azure IoT Hub للحصول على معلومات مفصلة حول المقاييس والسجلات التي تم إنشاؤها بواسطة Azure IoT Hub .

هام

ليس من المضمون أن تكون الأحداث الصادرة من خدمة مركز IoT، باستخدام سجلات موارد Azure Monitor، موثوقة أو مرتبة. قد يتم فقدان بعض الأحداث أو تسليمها بدون ترتيب. ليس من المفترض أيضًا أن يتم تسجيل الموارد في الوقت الحقيقي، وقد تستغرق الأحداث عدة دقائق لتسجيلها في وجهتك المُختارة.

الجمع والتوجيه

تُجمع مقاييس النظام الأساسي وسجل النشاط وتُخزن تلقائيًّا، لكن يمكن توجيههما إلى مواقع أخرى باستخدام إعداد تشخيصي.

لا يتم تجميع سجلات الموارد وتخزينها حتى تقوم بإنشاء إعداد تشخيص وتوجيهها إلى موقع واحد أو أكثر.

يمكن توجيه المقاييس والسجلات إلى عدة مواقع جغرافية بما في ذلك:

  • يتم تخزين سجلات مراقب Azure عبر مساحة عمل Log Analytics مقترنة. هناك يمكن تحليلها باستخدام Log Analytics.
  • Azure Storage للأرشفة والتحليل دون اتصال
  • نقطة نهاية مراكز الأحداث حيث يمكن قراءتها بواسطة تطبيقات خارجية، على سبيل المثال، أدوات SIEM التابعة لجهات خارجية.

في مدخل Azure، يمكنك تحديد إعدادات التشخيص ضمن المراقبة في الجزء الأيمن من مركز إنترنت الأشياء متبوعا بإضافة إعداد تشخيصي لإنشاء إعدادات تشخيصية محددة النطاق إلى السجلات ومقاييس النظام الأساسي المنبعثة من مركز إنترنت الأشياء.

تعرض لقطة الشاشة التالية إعدادا تشخيصيا لتوجيه نوع سجل المورد عمليات الاتصال وجميع مقاييس النظام الأساسي إلى مساحة عمل Log Analytics.

Diagnostic Settings pane for an IoT hub.

راجع إنشاء إعداد تشخيص لتجميع سجلات النظام الأساسي والقياسات في Azure للعملية التفصيلية لإنشاء إعداد تشخيص باستخدام مدخل Microsoft Azure أو CLI أو PowerShell. عند إنشاء إعداد تشخيص، فإنك تحدد فئات السجلات المراد تجميعها. يتم سرد فئات Azure IoT Hub ضمن سجلات الموارد في مرجع بيانات مراقبة Azure IoT Hub. كن على علم بأن الأحداث تنبعث فقط للأخطاء في بعض الفئات.

عند توجيه مقاييس النظام الأساسي IoT Hub إلى مواقع أخرى، يجب الانتباه إلى ما يلي:

  • مقاييس النظام الأساسي التالية غير قابلة للتصدير عبر إعدادات التشخيص: الأجهزة المتصلة (المعاينة) وإجمالي الأجهزة (المعاينة).

  • يتم حاليا تصدير المقاييس متعددة الأبعاد، على سبيل المثال بعض مقاييس التوجيه، كمقاييس أحادية البعد مسطحة مجمعة عبر قيم الأبعاد. لمزيد من التفاصيل، راجع تصدير مقاييس النظام الأساسي إلى مواقع أخرى.

تحليل المقاييس

يمكنك تحليل مقاييس Azure IoT Hub باستخدام مقاييس من خدمات Azure الأخرى باستخدام مستكشف المقاييس عن طريق فتح المقاييس من قائمة Azure Monitor . راجع الشروع في استخدام Azure Metrics Explorer للحصول على تفاصيل حول استخدام هذه الأداة.

في مدخل Azure، يمكنك تحديد المقاييس ضمن المراقبة في الجزء الأيمن من مركز إنترنت الأشياء لفتح مستكشف المقاييس الذي يتم تحديده افتراضيا إلى مقاييس النظام الأساسي المنبعثة من مركز إنترنت الأشياء:

Screenshot showing the metrics explorer page for an IoT hub.

للحصول على قائمة بمقاييس النظام الأساسي التي تم تجميعها ل Azure IoT Hub، راجع المقاييس في مرجع بيانات مراقبة Azure IoT Hub. للحصول على قائمة بمقاييس النظام الأساسي التي تم جمعها لجميع خدمات Azure، راجع المقاييس المدعومة مع Azure Monitor.

بالنسبة لمقاييس النظام الأساسي IoT Hub التي يتم جمعها في وحدات العد، قد لا تكون بعض التجميعات متاحة أو قابلة للاستخدام. لمعرفة المزيد، راجع التجميعات المدعومة في مرجع بيانات مراقبة Azure IoT Hub.

بعض مقاييس IoT Hub، مثل مقاييس التوجيه، متعددة الأبعاد. بالنسبة إلى هذه المقاييس، يمكنك تطبيق الفلاتروالتقسيم على مخططاتك استنادا إلى أحد الأبعاد.

تحليل السجلات

تُخزن البيانات في سجلات Azure Monitor في جداول حيث يحتوي كل جدول على مجموعة خاصة به من الخصائص الفريدة. ترتبط البيانات الموجودة في هذه الجداول بمساحة عمل Log Analytics ويمكن الاستعلام عنها في Log Analytics. لمعرفة المزيد حول سجلات مراقب Azure، راجع نظرة عامة على سجلات مراقب Azure في وثائق شاشة Azure.

لتوجيه البيانات إلى سجلات مراقب Azure، يجب إنشاء إعداد تشخيص لإرسال سجلات الموارد أو مقاييس النظام الأساسي إلى مساحة عمل Log Analytics. لمعرفة المزيد، راجع التجميع والتوجيه.

في مدخل Azure، يمكنك تحديد السجلات ضمن المراقبة في الجزء الأيمن من مركز إنترنت الأشياء لإجراء استعلامات Log Analytics التي يتم تحديد نطاقها، افتراضيا، إلى السجلات والمقاييس التي تم جمعها في سجلات مراقب Azure لمركز إنترنت الأشياء الخاص بك.

Logs page for an IoT hub.

للحصول على قائمة بالجداول التي تستخدمها سجلات أجهزة مراقبة Azure والقابلة للاستعلام عنها بواسطة Log Analytics، راجع جداول سجلات مراقب Azure في مرجع بيانات مراقبة Azure IoT Hub.

تحتوي جميع سجلات الموارد في Azure Monitor على نفس الحقول متبوعة بحقول خاصة بالخدمة. تم توضيح المخطط الشائع في مخطط سجل مورد Azure Monitor. يمكنك العثور على المخطط وفئات سجلات الموارد التي تم جمعها ل Azure IoT Hub في سجلات الموارد في مرجع بيانات مراقبة Azure IoT Hub. كن على علم بأن الأحداث تنبعث فقط للأخطاء في بعض الفئات.

يمثل سجل النشاط سجل النظام الأساسي في Azure الذي يُوفر نظرة حول الأحداث على مستوى الاشتراك. يمكنك عرضها بشكل مستقل أو توجيهها إلى سجلات Azure Monitor، حيث يمكنك إجراء استعلامات أكثر تعقيداً باستخدام تحليلات السجل.

عند توجيه مقاييس النظام الأساسي ل IoT Hub إلى سجلات أجهزة مراقبة Azure، كن على علم بما يلي:

  • مقاييس النظام الأساسي التالية غير قابلة للتصدير عبر إعدادات التشخيص: الأجهزة المتصلة (المعاينة) وإجمالي الأجهزة (المعاينة).

  • يتم حاليا تصدير المقاييس متعددة الأبعاد، على سبيل المثال بعض مقاييس التوجيه، كمقاييس أحادية البعد مسطحة مجمعة عبر قيم الأبعاد. لمزيد من التفاصيل، راجع تصدير مقاييس النظام الأساسي إلى مواقع أخرى.

للحصول على بعض الاستعلامات الشائعة باستخدام IoT Hub، راجع نموذج استعلامات Kusto. للحصول على معلومات مفصلة حول استخدام استعلامات Log Analytics، راجع نظرة عامة على استعلامات السجل في Azure Monitor.

إصدار SDK في سجلات IoT Hub

تقوم بعض العمليات في سجلات موارد IoT Hub بإرجاع خاصية sdkVersion في الكائن الخاص بها properties . بالنسبة لهذه العمليات، عندما يستخدم جهاز أو تطبيق واجهة خلفية أحد مجموعات تطوير البرامج (SDK) الخاصة ب Azure IoT، تحتوي هذه الخاصية على معلومات حول مجموعة SDK المستخدمة وإصدار SDK والنظام الأساسي الذي يتم تشغيل SDK عليه. يوضح sdkVersion المثال التالي الخاصية المنبعثة لعملية عند استخدام SDK لجهاز deviceConnect 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)".

يوضح الجدول التالي اسم SDK المستخدم لمجموعات Azure IoT SDK المختلفة:

اسم SDK في الخاصية sdkVersion اللغة
.NET .NET (C#)
microsoft.azure.devices حزمة تطوير البرامج (SDK) لخدمة .NET (C#)
microsoft.azure.devices.client حزمة تطوير البرامج (SDK) لجهاز .NET (C#)
iothubclient C أو Python v1 (مهمل) SDK للجهاز
iothubserviceclient حزمة SDK لخدمة C أو Python v1 (مهملة)
azure-iot-device-iothub-py حزمة SDK لجهاز بايثون
⁧⁩جهاز Azure IoT⁧⁩. حزمة تطوير البرامج (SDK) الخاصة بالأجهزة Node.js
azure-iothub حزمة تطوير البرامج (SDK) للخدمة Node.js
com.microsoft.azure.iothub-java-client حزمة SDK لجهاز جافا
com.microsoft.azure.iothub.service.sdk حزمة SDK لخدمة جافا
com.microsoft.azure.sdk.iot.iot-device-client حزمة SDK لجهاز جافا
com.microsoft.azure.sdk.iot.iot-service-client حزمة SDK لخدمة جافا
C Embedded C
C + (OSSimplified = Azure RTOS) نظام تشغيل Azure في الوقت الحقيقي

يمكنك استخراج خاصية إصدار SDK عند إجراء استعلامات مقابل سجلات موارد IoT Hub. على سبيل المثال، يقوم الاستعلام التالي باستخراج خاصية إصدار SDK (ومعرف الجهاز) من الخصائص التي تم إرجاعها بواسطة عمليات الاتصالات. تتم كتابة هاتين الخاصيتين إلى النتائج جنبا إلى جنب مع وقت العملية ومعرف المورد الخاص بمركز إنترنت الأشياء الذي يتصل به الجهاز.

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

هام

عند تحديد السجلات من القائمة المحورية لإنترنت الأشياء، يتم فتح Log Analytics مع تعيين نطاق الاستعلام إلى مركز إنترنت الأشياء الحالي. هذا يعني أن استعلامات السجل ستتضمن فقط بيانات من هذا المورد. إذا كنت تريد تشغيل استعلام يتضمن بيانات من مراكز إنترنت الأشياء الأخرى أو بيانات من خدمات Azure الأخرى، فحدد السجلات من قائمة مراقب Azure . راجع نطاق الاستعلام عن السجل والزمن في Azure Monitor Log Analytics للحصول على التفاصيل.

فيما يلي الاستعلامات التي يمكنك استخدامها لمساعدتك في مراقبة مركز إنترنت الأشياء الخاص بك.

  • أخطاء الاتصال: تحديد أخطاء اتصال الجهاز.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" and Level == "Error"
    
  • أخطاء الاختناق: تحديد الأجهزة التي قدمت معظم الطلبات مما أدى إلى حدوث أخطاء في الاختناق.

    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
    
  • نقاط النهاية المسدودة: حدد نقاط النهاية الميتة أو غير الصحية من خلال عدد المرات التي تم الإبلاغ فيها عن المشكلة ، بالإضافة إلى سبب ذلك.

    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
    
  • ملخص الخطأ: عدد الأخطاء عبر جميع العمليات حسب النوع.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Level == "Error"
    | summarize count() by ResultType, ResultDescription, Category, _ResourceId
    
  • الأجهزة المتصلة مؤخرا: قائمة بالأجهزة التي رآها IoT Hub متصلة في الفترة الزمنية المحددة.

    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
    
  • أحداث الاتصال لجهاز معين: جميع أحداث الاتصال المسجلة لجهاز معين (جهاز اختبار).

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | where DeviceId == "test-device"
    
  • إصدار SDK من الأجهزة: قائمة بالأجهزة وإصدارات SDK الخاصة بها لاتصالات الجهاز أو الجهاز بالعمليات السحابية المزدوجة.

    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
    

قراءة السجلات من مراكز أحداث Azure

بعد إعداد تسجيل الأحداث من خلال إعدادات التشخيصات، يمكنك إنشاء التطبيقات التي تقرأ السجلات بحيث يمكنك اتخاذ إجراء استنادًا إلى المعلومات الموجودة فيها. يقوم نموذج التعليمات البرمجية هذا باسترداد السجلات من مركز أحداث:

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

التنبيهات

تُعلمك تنبيهات Azure Monitor مُسبقًا عند العثور على شروط مهمة في بيانات المراقبة الخاصة بك. فهي تسمح لك بتحديد المشكلات ومعالجتها في نظامك قبل أن يلاحظها عملاؤك. يمكنك تعيين التنبيهات على القياسات، السجلات، سجل النشاط. أنواع التنبيهات المختلفة لها مزايا وعيوب.

عند إنشاء قاعدة تنبيه استنادا إلى مقاييس النظام الأساسي، يجب الانتباه إلى أنه بالنسبة لمقاييس النظام الأساسي ل IoT Hub التي يتم جمعها في وحدات العد، قد لا تكون بعض التجميعات متاحة أو قابلة للاستخدام. لمعرفة المزيد، راجع التجميعات المدعومة في مرجع بيانات مراقبة Azure IoT Hub.

مراقبة قطع الاتصال لكل جهاز مع شبكة الأحداث

يوفر Azure Monitor مقياسا، الأجهزة المتصلة، يمكنك استخدامه لمراقبة عدد الأجهزة المتصلة بمركز إنترنت الأشياء وتشغيل تنبيه عندما ينخفض عدد الأجهزة المتصلة إلى أقل من قيمة العتبة. يصدر Azure Monitor أيضا أحداثا في فئة الاتصالات التي يمكنك استخدامها لمراقبة اتصالات الجهاز وقطع الاتصال وأخطاء الاتصال. على الرغم من أن هذه قد تكون كافية لبعض السيناريوهات، إلا أن Azure Event Grid يوفر حل مراقبة منخفض الكمون لكل جهاز يمكنك استخدامه لتتبع اتصالات الجهاز للأجهزة والبنية التحتية الهامة.

باستخدام شبكة الأحداث، يمكنك الاشتراك في أحداث IoT Hub DeviceConnectedوDeviceDisconnected لتشغيل التنبيهات ومراقبة حالة اتصال الجهاز. توفر شبكة الأحداث زمن انتقال أحداث أقل بكثير من Azure Monitor، ويمكنك المراقبة على أساس كل جهاز، بدلا من العدد الإجمالي للأجهزة المتصلة. هذه العوامل تجعل شبكة الأحداث الطريقة المفضلة لمراقبة الاتصالات للأجهزة والبنية التحتية الحيوية. نوصي بشدة باستخدام Event Grid لمراقبة اتصالات الجهاز في بيئات الإنتاج.

لمزيد من المعلومات التفصيلية حول مراقبة اتصال الجهاز باستخدام Event Grid و Azure Monitor، راجع مراقبة اتصال الجهاز ب Azure IoT Hub وتشخيصه واستكشاف الأخطاء وإصلاحه.

الخطوات التالية