مراقبة Azure IoT Hub

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

نظرة عامة على المراقب

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

مخططات القياس الافتراضية في صفحة IoT hub Overview.

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

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

ما تعريف Azure Monitor؟

يراقب Azure IoT Hub البيانات باستخدام Azure Monitor، وهي خدمة مراقبة مكدس كاملة. يمكن ل Azure Monitor مراقبة موارد Azure والموارد السحابية أو المحلية الأخرى.

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

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

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

هام

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

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

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

مقاييس النظام الأساسي وسجل النشاط وسجلات الموارد لها مواصفات فريدة للمجموعة والتخزين والتوجيه.

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

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

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

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

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

لقطة شاشة توضح كيفية إضافة إعداد تشخيص في مركز IoT في مدخل Microsoft Azure.

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

لقطة شاشة لنموذج الإعدادات التشخيصي لمراقبة مركز IoT.

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

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

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

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

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

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

لفتح مستكشف المقاييس، انتقل إلى مدخل Microsoft Azure وافتح مركز IoT، ثم حدد Metrics ضمن Monitoring. يتم تحديد نطاق هذا المستكشف، بشكل افتراضي، لمقاييس النظام الأساسي المنبعثة من مركز IoT الخاص بك.

لقطة شاشة تعرض صفحة مستكشف المقاييس لمركز IoT hub.

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

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

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

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

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

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

لتنفيذ Log Analytics، انتقل إلى مدخل Microsoft Azure وافتح مركز IoT، ثم حدد Logs ضمن Monitoring. يتم تحديد نطاق استعلامات Log Analytics هذه، بشكل افتراضي، للسجلات والمقاييس التي تم جمعها في سجلات Azure Monitor لمركز IoT الخاص بك.

Logs page for an IoT hub.

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

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

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

عند توجيه مقاييس النظام الأساسي ل IoT Hub إلى سجلات Azure Monitor:

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

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

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

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

ترجع بعض العمليات في سجلات موارد IoT Hub خاصية sdkVersion في عنصر properties الخاص بها. بالنسبة لهذه العمليات، عندما يستخدم أحد الأجهزة أو التطبيقات الخلفية إحدى حزم Azure IoT SDK، فإن هذه الخاصية تحتوي على معلومات بشأن SDK قيد الاستخدام، وإصدار SDK، والنظام الأساسي الذي يتم تشغيل SDK عليه.

توضح الأمثلة التالية الخاصية sdkVersion المنبعثة deviceConnect لعملية باستخدام:

  • جهاز Node.js SDK: "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 ‎.NET (C#) service SDK
microsoft.azure.devices.client ‎.NET (C#) device SDK
iothubclient C or Python v1 (deprecated) device SDK
iothubserviceclient C or Python v1 (deprecated) service SDK
azure-iot-device-iothub-py Python device SDK
azure-iot-device Node.js device SDK
Azure - iothub Node.js service SDK
com.microsoft.azure.iothub-java-client Java device SDK
com.microsoft.azure.iothub.service.sdk Java service SDK
com.microsoft.azure.sdk.iot.iot-device-client Java device SDK
com.microsoft.azure.sdk.iot.iot-service-client Java service SDK
C Embedded C
C + (OSSimplified = Eclipse ThreadX) Eclipse ThreadX

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

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

استخدم استعلامات Kusto التالية لمساعدتك في مراقبة مركز IoT.

هام

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

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

    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 مُسبقاً عند العثور على شروط مهمة في بيانات المراقبة الخاصة بك. فهي تسمح لك بتحديد المشكلات ومعالجتها في نظامك قبل أن يلاحظها عملاؤك. يمكنك تعيين التنبيهات على القياسات، السجلات، سجل النشاط. أنواع التنبيهات المختلفة لها مزايا وعيوب.

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

قطع اتصال الشاشة لكل جهاز مع Event Grid

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

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

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

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