استكشاف أخطاء جهاز IoT Edge وإصلاحها

ينطبق على:IoT Edge 1.4 checkmark IoT Edge 1.4

هام

IoT Edge 1.4 هو الإصدار المدعوم. إذا كنت تستخدم إصدارا سابقا، فشاهد تحديث IoT Edge.

إذا واجهت مشكلات في تشغيل Azure IoT Edge في بيئتك، فاستخدم هذه المقالة كدليل لاستكشاف الأخطاء وإصلاحها والتشخيصات.

تشغيل الأمر "التحقق"

يجب أن تكون خطوتك الأولى عند استكشاف أخطاء IoT Edge وإصلاحها هي استخدام check الأمر الذي يقوم بتشغيل مجموعة من اختبارات التكوين والاتصال للمشكلات الشائعة. check يتوفر الأمر في الإصدار 1.0.7 والإصدارات الأحدث.

إشعار

لا يمكن لأداة استكشاف الأخطاء وإصلاحها تشغيل عمليات التحقق من الاتصال إذا كان جهاز IoT Edge خلف خادم وكيل.

يمكنك تشغيل الأمر كما check يلي، أو تضمين العلامة --help لمشاهدة قائمة كاملة بالخيارات:

sudo iotedge check

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

  • تفحص فحوصات التكوين التفاصيل التي قد تمنع أجهزة IoT Edge من الاتصال بالسحابة، بما في ذلك المشكلات المتعلقة بملف التكوين ومحرك الحاوية.
  • تتحقق الاتصال التحقق من أن وقت تشغيل IoT Edge يمكنه الوصول إلى المنافذ على الجهاز المضيف وأن جميع مكونات IoT Edge يمكنها الاتصال بمركز IoT. ترجع هذه المجموعة من عمليات التحقق أخطاء إذا كان جهاز IoT Edge خلف وكيل.
  • تبحث عمليات التحقق من جاهزية الإنتاج عن أفضل ممارسات الإنتاج الموصى بها، مثل حالة شهادات المرجع المصدق للجهاز (CA) وتكوين ملف سجل الوحدة النمطية.

تستخدم أداة فحص IoT Edge حاوية لتشغيل التشخيصات الخاصة بها. صورة الحاوية، mcr.microsoft.com/azureiotedge-diagnostics:latest، متاحة من خلال سجل حاويات Microsoft. إذا كنت بحاجة إلى إجراء فحص على جهاز دون الوصول المباشر إلى الإنترنت، فستحتاج أجهزتك إلى الوصول إلى صورة الحاوية.

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

sudo iotedge check --diagnostics-image-name <parent_device_fqdn_or_ip>:<port_for_api_proxy_module>/azureiotedge-diagnostics:1.2

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

جمع معلومات تتبع الأخطاء باستخدام الأمر "حزمة الدعم"

عندما تحتاج إلى جمع السجلات من جهاز IoT Edge، فإن الطريقة الأكثر ملاءمة هي استخدام support-bundle الأمر. بشكل افتراضي، يجمع هذا الأمر الوحدة النمطية ومدير أمان IoT Edge وسجلات محرك الحاوية وإخراج iotedge check JSON ومعلومات تصحيح الأخطاء المفيدة الأخرى. يقوم بضغطها في ملف واحد لسهولة المشاركة. support-bundle يتوفر الأمر في الإصدار 1.0.9 والإصدارات الأحدث.

support-bundle قم بتشغيل الأمر مع العلامة --since لتحديد المدة من الماضي الذي تريد الحصول على السجلات. على سبيل المثال 6h ، ستحصل على سجلات منذ الساعات الست الماضية، 6d منذ آخر ستة أيام، 6m منذ آخر ست دقائق وما إلى ذلك. قم بتضمين العلامة --help لمشاهدة قائمة كاملة بالخيارات.

sudo iotedge support-bundle --since 6h

بشكل افتراضي، support-bundle يقوم الأمر بإنشاء ملف مضغوط يسمى support_bundle.zip في الدليل حيث يتم استدعاء الأمر. استخدم العلامة --output لتحديد مسار أو اسم ملف مختلف للإخراج.

لمزيد من المعلومات حول الأمر، اعرض معلومات التعليمات الخاصة به.

iotedge support-bundle --help

يمكنك أيضا استخدام استدعاء الأسلوب المباشر المضمن UploadSupportBundle لتحميل إخراج الأمر حزمة الدعم إلى Azure Blob Storage.

التحذير

يمكن أن يحتوي الإخراج من support-bundle الأمر على أسماء المضيف والجهاز والوحدة النمطية والمعلومات المسجلة بواسطة الوحدات وما إلى ذلك. يرجى أن تكون على علم بذلك في حالة مشاركة الإخراج في منتدى عام.

مراجعة المقاييس التي تم جمعها من وقت التشغيل

تنتج وحدات وقت تشغيل IoT Edge مقاييس لمساعدتك في مراقبة وفهم صحة أجهزة IoT Edge. أضف وحدة جامع المقاييس إلى عمليات النشر الخاصة بك للتعامل مع جمع هذه المقاييس وإرسالها إلى السحابة لتسهيل المراقبة.

لمزيد من المعلومات، راجع تجميع مقاييس النقل.

تحقق من إصدار IoT Edge

إذا كنت تقوم بتشغيل إصدار أقدم من IoT Edge، فقد تعمل الترقية على حل المشكلة. iotedge check تتحقق الأداة من أن البرنامج الخفي لأمان IoT Edge هو أحدث إصدار، ولكنها لا تتحقق من إصدارات مركز IoT Edge والوحدات النمطية للعامل. للتحقق من إصدار وحدات وقت التشغيل على جهازك، استخدم الأوامر iotedge logs edgeAgent و iotedge logs edgeHub. يتم تعريف رقم الإصدار في السجلات عند بدء تشغيل الوحدة النمطية.

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

تحقق من تثبيت IoT Edge على أجهزتك

يمكنك التحقق من تثبيت IoT Edge على أجهزتك من خلال مراقبة وحدة edgeAgent المزدوجة.

للحصول على أحدث وحدة نمطية edgeAgent المزدوجة، قم بتشغيل الأمر التالي من Azure Cloud Shell:

az iot hub module-twin show --device-id <edge_device_id> --module-id '$edgeAgent' --hub-name <iot_hub_name>

سيؤدي هذا الأمر إلى إخراج كافة خصائص edgeAgent التي تم الإبلاغ عنها. فيما يلي بعض النصائح المفيدة التي تراقب حالة الجهاز:

  • حالة وقت التشغيل
  • وقت بدء وقت التشغيل
  • وقت التشغيل الأخير للخروج
  • عدد إعادة تشغيل وقت التشغيل

تحقق من حالة مدير أمان IoT Edge وسجلاته

مدير أمان IoT Edge مسؤول عن عمليات مثل تهيئة نظام IoT Edge عند بدء التشغيل وتوفير الأجهزة. إذا لم يبدأ تشغيل IoT Edge، فقد توفر سجلات إدارة الأمان معلومات مفيدة.

  • عرض حالة خدمات نظام IoT Edge:

    sudo iotedge system status
    
  • عرض سجلات خدمات نظام IoT Edge:

    sudo iotedge system logs -- -f
    
  • تمكين السجلات على مستوى التصحيح لعرض سجلات أكثر تفصيلا لخدمات نظام IoT Edge:

    1. تمكين سجلات على مستوى التصحيح.

      sudo iotedge system set-log-level debug
      sudo iotedge system restart
      
    2. قم بالتبديل مرة أخرى إلى سجلات مستوى المعلومات الافتراضية بعد تصحيح الأخطاء.

      sudo iotedge system set-log-level info
      sudo iotedge system restart
      

التحقق من سجلات الحاوية بحثا عن المشكلات

بمجرد تشغيل البرنامج الخفي لأمان IoT Edge، انظر إلى سجلات الحاويات للكشف عن المشكلات. ابدأ بالحاويات المنشورة، ثم انظر إلى الحاويات التي تشكل وقت تشغيل IoT Edge: edgeAgent وedgeHub. عادة ما توفر سجلات عامل IoT Edge معلومات حول دورة حياة كل حاوية. توفر سجلات مركز IoT Edge معلومات حول المراسلة والتوجيه.

يمكنك استرداد سجلات الحاوية من عدة أماكن:

تنظيف سجلات الحاوية

بشكل افتراضي، لا يقوم محرك حاوية Moby بتعيين حدود حجم سجل الحاوية. بمرور الوقت يمكن أن تؤدي السجلات الشاملة إلى ملء الجهاز بالسجلات ونفاد مساحة القرص. إذا كانت سجلات الحاوية الكبيرة تؤثر على أداء جهاز IoT Edge، فاستخدم الأمر التالي لفرض إزالة الحاوية مع سجلاتها ذات الصلة.

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

التحذير

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

docker rm --force <container name>

بالنسبة لسيناريوهات صيانة السجلات والإنتاج المستمرة، قم بإعداد برنامج تشغيل التسجيل الافتراضي.

عرض الرسائل التي تمر عبر مركز IoT Edge

يمكنك عرض الرسائل التي تمر عبر مركز IoT Edge وجمع الرؤى من السجلات المطولة من حاويات وقت التشغيل. لتشغيل السجلات المطولة على هذه الحاويات، قم بتعيين RuntimeLogLevel متغير البيئة في بيان النشر.

لعرض الرسائل التي تمر عبر مركز IoT Edge، قم بتعيين RuntimeLogLevel متغير البيئة إلى debug لوحدة edgeHub.

تحتوي كل من الوحدات النمطية edgeHub وedgeAgent على متغير بيئة سجل وقت التشغيل هذا، مع تعيين القيمة الافتراضية إلى info. يمكن أن يأخذ متغير البيئة هذا القيم التالية:

  • fatal
  • error
  • ‏‏تحذير
  • معلومات
  • debug
  • verbose

يمكنك أيضا التحقق من الرسائل التي يتم إرسالها بين IoT Hub وأجهزة IoT. عرض هذه الرسائل باستخدام ملحق Azure IoT Hub ل Visual Studio Code. لمزيد من المعلومات، راجع أداة مفيدة عند التطوير باستخدام Azure IoT.

إعادة تشغيل الحاويات

بعد التحقق من السجلات والرسائل للحصول على معلومات، يمكنك محاولة إعادة تشغيل الحاويات.

على جهاز IoT Edge، استخدم الأوامر التالية لإعادة تشغيل الوحدات النمطية:

iotedge restart <container name>

أعد تشغيل حاويات وقت تشغيل IoT Edge:

iotedge restart edgeAgent && iotedge restart edgeHub

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

التحقق من جدار الحماية وقواعد تكوين المنفذ

يسمح Azure IoT Edge بالاتصال من خادم محلي إلى سحابة Azure باستخدام بروتوكولات IoT Hub المدعومة، راجع اختيار بروتوكول اتصال. لتحسين الأمان، يتم دائما تكوين قنوات الاتصال بين Azure IoT Edge وAzure IoT Hub لتكون صادرة. يستند هذا التكوين إلى نمط الاتصال المساعد للخدمات، والذي يقلل من سطح الهجوم لكي يقوم كيان ضار باستكشافه. الاتصال الوارد مطلوب فقط لسيناريوهات محددة حيث يحتاج Azure IoT Hub إلى دفع الرسائل إلى جهاز Azure IoT Edge. الرسائل من سحابة إلى جهاز محمية باستخدام قنوات TLS آمنة ويمكن تأمينها بشكل أكبر باستخدام شهادات X.509 ووحدات جهاز TPM. يحكم Azure IoT Edge Security Manager كيفية إنشاء هذا الاتصال، راجع IoT Edge Security Manager.

بينما يوفر IoT Edge تكوينا محسنا لتأمين وقت تشغيل Azure IoT Edge والوحدات النمطية المنشورة، فإنه لا يزال يعتمد على الجهاز الأساسي وتكوين الشبكة. ومن ثم، من الضروري ضمان إعداد قواعد الشبكة وجدار الحماية المناسبة للحافة الآمنة للاتصال السحابي. يمكن استخدام الجدول التالي كإرشادات عند قواعد جدار حماية التكوين للخوادم الأساسية حيث تتم استضافة وقت تشغيل Azure IoT Edge:

بروتوكول المنفذ الوارد الصادر الإرشادات
MQTT 8883 محظور (افتراضي) محظور (افتراضي)
  • تكوين الصادر (الصادر) ليكون مفتوحا عند استخدام MQTT كبروتوكول الاتصال.
  • 1883 ل MQTT غير مدعوم من قبل IoT Edge.
  • يجب حظر الاتصالات الواردة (الواردة).
AMQP 5671 محظور (افتراضي) فتح (افتراضي)
  • بروتوكول الاتصال الافتراضي ل IoT Edge.
  • يجب تكوينه ليكون Open إذا لم يتم تكوين Azure IoT Edge للبروتوكولات المدعومة الأخرى أو AMQP هو بروتوكول الاتصال المطلوب.
  • 5672 ل AMQP غير مدعوم من قبل IoT Edge.
  • حظر هذا المنفذ عندما يستخدم Azure IoT Edge بروتوكولا مختلفا مدعوما من IoT Hub.
  • يجب حظر الاتصالات الواردة (الواردة).
HTTPS 443 محظور (افتراضي) فتح (افتراضي)
  • تكوين الصادر (الصادر) ليكون مفتوحا على 443 لتزويد IoT Edge. هذا التكوين مطلوب عند استخدام البرامج النصية اليدوية أو خدمة توفير جهاز Azure IoT (DPS).
  • يجب أن يكون الاتصال الوارد (الوارد) مفتوحا فقط لسيناريوهات محددة:
    • إذا كان لديك بوابة شفافة مع أجهزة انتقال البيانات من الخادم التي قد ترسل طلبات الأسلوب. في هذه الحالة، لا يحتاج المنفذ 443 إلى أن يكون مفتوحا للشبكات الخارجية للاتصال ب IoTHub أو توفير خدمات IoTHub من خلال Azure IoT Edge. وبالتالي يمكن تقييد القاعدة الواردة لفتح الواردة فقط (الواردة) من الشبكة الداخلية.
    • بالنسبة لسيناريوهات العميل إلى الجهاز (C2D).
  • 80 ل HTTP غير مدعوم من قبل IoT Edge.
  • إذا تعذر تكوين بروتوكولات غير HTTP (على سبيل المثال، AMQP أو MQTT) في المؤسسة؛ يمكن إرسال الرسائل عبر WebSockets. سيتم استخدام المنفذ 443 لاتصال WebSocket في هذه الحالة.

الملاذ الأخير: إيقاف وإعادة إنشاء جميع الحاويات

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

يوقف الأمر التالي نظام IoT Edge (وبالتالي جميع الحاويات)، ويستخدم الخيار "الكل" و"وحدة التخزين" لإزالة docker prune جميع الحاويات ووحدات التخزين. راجع التحذير من أن الأمر يصدر وتأكيد عند y الاستعداد.

sudo iotedge system stop
docker system prune --all --volumes
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all volumes not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N]

ابدأ تشغيل النظام مرة أخرى. لتكون آمنا، قم بتطبيق أي تكوين متبق محتمل وابدأ النظام بأمر واحد.

sudo iotedge config apply

انتظر بضع دقائق وتحقق مرة أخرى.

sudo iotedge list

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

هل تعتقد أنك عثرت على خطأ في النظام الأساسي ل IoT Edge؟ أرسل مشكلة حتى نتمكن من الاستمرار في التحسين.

إذا كانت لديك المزيد من الأسئلة، فبادر بإنشاء طلب دعم للحصول على المساعدة.