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

ينطبق على:yes icon IoT Edge 1.1 إصدارات أخرى:IoT Edge 1.2

ينطبق على:yes icon IoT Edge 1.2 إصدارات أخرى:IoT Edge 1.1

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

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

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

ملاحظة

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

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

على نظام Linux:

sudo iotedge check

على Windows:

iotedge check
sudo iotedge check

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

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

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

على نظام Linux:

sudo iotedge support-bundle --since 6h

على Windows:

iotedge support-bundle --since 6h
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، فقد توفر سجلات مدير الأمان معلومات مفيدة.

على نظام Linux:

  • عرض حالة مدير أمان IoT Edge:

    sudo systemctl status iotedge
    
  • عرض سجلات مدير أمان IoT Edge:

    sudo journalctl -u iotedge -f
    
  • عرض سجلات أكثر تفصيلا لمدير أمان IoT Edge:

    1. تحرير إعدادات IoT Edge الخفي:

      sudo systemctl edit iotedge.service
      
    2. تحديث السطور التالية:

      [Service]
      Environment=IOTEDGE_LOG=debug
      
    3. أعد تشغيل البرنامج الخفي لأمان IoT Edge:

      sudo systemctl cat iotedge.service
      sudo systemctl daemon-reload
      sudo systemctl restart iotedge
      

على Windows:

  • عرض حالة مدير أمان IoT Edge:

    Get-Service iotedge
    
  • عرض سجلات مدير أمان IoT Edge:

    . {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog
    
  • عرض آخر 5 دقائق فقط من سجلات مدير أمان IoT Edge:

    . {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog -StartTime ([datetime]::Now.AddMinutes(-5))
    
  • عرض سجلات أكثر تفصيلا لمدير أمان IoT Edge:

    1. إضافة متغير بيئة على مستوى النظام:

      [Environment]::SetEnvironmentVariable("IOTEDGE_LOG", "debug", [EnvironmentVariableTarget]::Machine)
      
    2. أعد تشغيل برنامج IoT Edge Security Daemon:

      Restart-Service iotedge
      
  • عرض حالة خدمات نظام 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 في ملف تكوين yaml. لفتح الملف:

على نظام Linux:

sudo nano /etc/iotedge/config.yaml

على Windows:

notepad C:\ProgramData\iotedge\config.yaml

بشكل افتراضي ، agent سيبدو العنصر مثل المثال التالي:

agent:
  name: edgeAgent
  type: docker
  env: {}
  config:
    image: mcr.microsoft.com/azureiotedge-agent:1.1
    auth: {}

يستعاض عنها env: {} بما يلي:

env:
  RuntimeLogLevel: debug

تحذير

لا يمكن أن تحتوي ملفات YAML على علامات تبويب كمسافة بادئة. استخدم 2 مسافات بدلا من ذلك. لا يمكن أن تحتوي عناصر المستوى الأعلى على مسافة بيضاء بادئة.

احفظ الملف وأعد تشغيل مدير أمان IoT Edge.

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

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

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

  • قاتل
  • خطأ
  • تحذير
  • معلومات
  • تصحيح الأخطاء
  • verbose

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

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

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

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

iotedge restart <container name>

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

iotedge restart edgeAgent && iotedge restart edgeHub

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

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

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

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