المشكلات والحلول الشائعة ل Azure IoT Edge
ينطبق على:
IoT الحافة 1.1 إصدارات أخرى:IoT الحافة 1.2
ينطبق على:
IoT الحافة 1.2 إصدارات أخرى:IoT الحافة 1.1
استخدم هذه المقالة للبحث عن خطوات لحل المشكلات الشائعة التي قد تواجهها عند نشر حلول IoT Edge. إذا كنت بحاجة إلى معرفة كيفية العثور على سجلات وأخطاء من جهاز IoT Edge، فراجع استكشاف أخطاء جهاز IoT Edge وإصلاحها.
وكيل IoT الحافة يتوقف بعد حوالي دقيقة
السلوك الملاحظ:
تبدأ الوحدة النمطية edgeAgent تشغيل بنجاح لمدة دقيقة تقريبا، ثم يتوقف. تشير السجلات إلى أن يحاول عامل IoT Edge الاتصال بموزع إنترنت إنترنت عبر AMQP، ثم يحاول الاتصال باستخدام AMQP عبر WebSocket. عند فشل ذلك، يتم إنهاء عامل IoT Edge.
مثال على سجلات إيدججنت:
2017-11-28 18:46:19 [INF] - Starting module management agent.
2017-11-28 18:46:19 [INF] - Version - 1.0.7516610 (03c94f85d0833a861a43c669842f0817924911d5)
2017-11-28 18:46:19 [INF] - Edge agent attempting to connect to IoT Hub via AMQP...
2017-11-28 18:46:49 [INF] - Edge agent attempting to connect to IoT Hub via AMQP over WebSocket...
السبب الجذري:
يمنع تكوين شبكة اتصال على شبكة الاتصال المضيفة وكيل IoT Edge من الوصول إلى الشبكة. يحاول العامل الاتصال عبر AMQP (المنفذ 5671) أولا. إذا فشل الاتصال، فإنه يحاول WebSockets (المنفذ 443).
يقوم وقت تشغيل IoT Edge بإعداد شبكة لكل وحدة نمطية للاتصال بها. على لينكس، هذه الشبكة هي شبكة جسر. في Windows، فإنه يستخدم NAT. هذه المشكلة أكثر شيوعا على Windows الأجهزة باستخدام حاويات Windows التي تستخدم شبكة الاتصال NAT.
الدقة:
تأكد من وجود طريق إلى الإنترنت لعناوين IP المعينة إلى شبكة الجسر/NAT هذه. أحيانا يتجاوز تكوين VPN على المضيف شبكة IoT Edge.
لا يمكن لوكيل IoT Edge الوصول إلى صورة الوحدة النمطية (403)
السلوك الملاحظ:
فشل تشغيل حاوية وتظهر سجلات edgeAgent خطأ 403.
السبب الجذري:
لا يملك عامل IoT Edge أذونات للوصول إلى صورة الوحدة النمطية.
الدقة:
تأكد من أن بيانات اعتماد التسجيل الخاصة بك محددة بشكل صحيح في بيان التوزيع الخاص بك.
تقارير وحدة عامل الحافة 'ملف التكوين فارغة' وليس وحدات تبدأ على الجهاز
السلوك الملاحظ:
يواجه الجهاز مشكلة في بدء تشغيل الوحدات النمطية المحددة في النشر. فقط edgeAgent قيد التشغيل ولكن باستمرار الإبلاغ عن 'ملف التكوين فارغة...'.
السبب الجذري:
بشكل افتراضي، IoT Edge يبدأ الوحدات النمطية في شبكة الحاويات المعزولة الخاصة بهم. قد يواجه الجهاز مشكلة مع دقة اسم DNS ضمن هذه الشبكة الخاصة.
الدقة:
الخيار الأول: تعيين ملقم DNS في إعدادات مشغل الحاوية
حدد ملقم DNS للبيئة الخاصة بك في إعدادات مشغل الحاوية، والتي سيتم تطبيقها على كافة الوحدات النمطية الحاوية التي بدأها المشغل. إنشاء ملف مسمى daemon.json يحدد ملقم DNS لاستخدامه. على سبيل المثال:
{
"dns": ["1.1.1.1"]
}
المثال أعلاه تعيين ملقم DNS إلى خدمة DNS يمكن الوصول إليها بشكل عام. إذا تعذر على جهاز الحافة الوصول إلى هذا IP من بيئته، استبدله بعنوان خادم DNS الذي يمكن الوصول إليه.
ضع daemon.json في الموقع المناسب للمنصة الخاصة بك:
| النظام الأساسي | الموقع |
|---|---|
| Linux | /etc/docker |
| مضيف Windows مع حاويات Windows | C:\ProgramData\iotedge-moby\config |
إذا كان الموقع يحتوي بالفعل على daemon.json ملف، قم بإضافة مفتاح daemon.json إليه وحفظ الملف.
أعد تشغيل مشغل الحاوية حتى تسري التحديثات.
| النظام الأساسي | أمر |
|---|---|
| Linux | sudo systemctl restart docker |
| Windows (المسؤول باورشيل) | Restart-Service iotedge-moby -Force |
ضعه daemon.json في الدليل /etc/docker على جهازك.
إذا كان الموقع يحتوي بالفعل على daemon.json ملف، قم بإضافة مفتاح daemon.json إليه وحفظ الملف.
أعد تشغيل مشغل الحاوية حتى تسري التحديثات.
sudo systemctl restart docker
الخيار 2: تعيين ملقم DNS في نشر IoT Edge لكل وحدة نمطية
يمكنك تعيين ملقم DNS لإنشاء كل وحدة نمطيةالخيارات في نشر IoT Edge. على سبيل المثال:
"createOptions": {
"HostConfig": {
"Dns": [
"x.x.x.x"
]
}
}
تأكد من تعيين هذا التكوين لوحدات edgeAgent و edgeHub كذلك.
فشل مركز IoT Edge في بدء التشغيل
السلوك الملاحظ:
فشل الوحدة النمطية edgeHub لبدء. قد تشاهد رسالة مثل أحد الأخطاء التالية في السجلات:
One or more errors occurred.
(Docker API responded with status code=InternalServerError, response=
{\"message\":\"driver failed programming external connectivity on endpoint edgeHub (6a82e5e994bab5187939049684fb64efe07606d2bb8a4cc5655b2a9bad5f8c80):
Error starting userland proxy: Bind for 0.0.0.0:443 failed: port is already allocated\"}\n)
أو
info: edgelet_docker::runtime -- Starting module edgeHub...
warn: edgelet_utils::logging -- Could not start module edgeHub
warn: edgelet_utils::logging -- caused by: failed to create endpoint edgeHub on network nat: hnsCall failed in Win32:
The process cannot access the file because it is being used by another process. (0x20)
السبب الجذري:
بعض العمليات الأخرى على الجهاز المضيف قد ربط منفذ أن الوحدة النمطية edgeHub تحاول ربط. لوحة الوصل IoT Edge تعيين المنافذ 443 و 5671 و 8883 للاستخدام في سيناريوهات العبارة. فشل الوحدة النمطية في بدء تشغيل إذا كانت عملية أخرى قد ربط بالفعل أحد هذه المنافذ.
الدقة:
يمكنك حل هذه المشكلة بطريقتين:
إذا كان جهاز IoT Edge يعمل كجهاز عبارة، فأنت بحاجة إلى البحث عن العملية التي تستخدم المنفذ 443 أو 5671 أو 8883 وإيقافها. خطأ في المنفذ 443 يعني عادة أن العملية الأخرى هي ملقم ويب.
إذا لم تكن بحاجة إلى استخدام جهاز IoT Edge كبوابة، فيمكنك إزالة روابط المنافذ من خيارات إنشاء الوحدة النمطية edgeHub. يمكنك تغيير خيارات الإنشاء في مدخل Azure أو مباشرة في ملف deployment.json.
في مدخل Azure:
انتقل إلى مركز IoT وحدد IoT Edge.
حدد جهاز IoT Edge الذي تريد تحديثه.
حدد Set modules.
حدد وقت التشغيل الإعدادات.
في إعدادات الوحدة النمطية Edge Hub، احذف كل شيء من مربع النص إنشاء خيارات.
حفظ التغييرات وإنشاء النشر.
في ملف deployment.json:
افتح ملف deployment.json الذي قمت بتطبيقه على جهاز IoT Edge.
البحث عن
edgeHubالإعدادات في edgeAgent قسم الخصائص المطلوبة:"edgeHub": { "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.1", "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}" }, "type": "docker", "status": "running", "restartPolicy": "always" }إزالة
createOptionsالسطر، والفاصلة الزائدة في نهايةimageالسطر قبل ذلك:"edgeHub": { "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.1" }, "type": "docker", "status": "running", "restartPolicy": "always" }احفظ الملف وطبقه على جهاز IoT Edge مرة أخرى.
فشل برنامج الخفي أمان IoT Edge مع اسم مضيف غير صالح
السلوك الملاحظ:
فشل محاولة التحقق من سجلات إدارة الأمان IoT Edge ثم طباعة الرسالة التالية:
Error parsing user input data: invalid hostname. Hostname cannot be empty or greater than 64 characters
السبب الجذري:
يمكن أن يعتمد وقت تشغيل IoT Edge أسماء المضيفين التي تكون أقصر من 64 حرفا فقط. الأجهزة الفعلية عادة لا يكون أسماء المضيفين طويلة ولكن المشكلة أكثر شيوعا على جهاز ظاهري. أسماء المضيفين التي تم إنشاؤها تلقائيا Windows الأجهزة الظاهرية المستضافة في Azure، على وجه الخصوص، تميل إلى أن تكون طويلة.
الدقة:
عند ظهور هذا الخطأ، يمكنك حله عن طريق تكوين اسم DNS للجهاز الظاهري الخاص بك، ثم تعيين اسم DNS كاسم مضيف في الأمر الإعداد.
في مدخل Azure، انتقل إلى صفحة النظرة العامة للجهاز الظاهري.
حدد تكوين تحت اسم DNS. إذا كان الجهاز الظاهري يحتوي بالفعل على اسم DNS مكون، فلن تحتاج إلى تكوين اسم جديد.

توفير قيمة لتسمية اسم DNS وتحديد حفظ.
نسخ اسم DNS الجديد الذي يجب أن يكون بالتنسيق DNSnamelabel > . <>vmlocation.cloudapp.azure.com.
داخل الجهاز الظاهري، استخدم الأمر التالي لإعداد وقت تشغيل IoT Edge باسم DNS الخاص بك:
على نظام Linux:
sudo nano /etc/iotedge/config.yamlعلى Windows:
notepad C:\ProgramData\iotedge\config.yaml
في مدخل Azure، انتقل إلى صفحة النظرة العامة للجهاز الظاهري.
حدد تكوين تحت اسم DNS. إذا كان الجهاز الظاهري يحتوي بالفعل على اسم DNS مكون، فلن تحتاج إلى تكوين اسم جديد.

توفير قيمة لتسمية اسم DNS وتحديد حفظ.
نسخ اسم DNS الجديد الذي يجب أن يكون بالتنسيق DNSnamelabel > . <>vmlocation.cloudapp.azure.com.
على جهاز IoT Edge، افتح ملف التكوين.
sudo nano /etc/aziot/config.tomlاستبدال قيمة
hostnameمع اسم DNS الخاص بك.حفظ الملف وإغلاقه، ثم تطبيق التغييرات على IoT Edge.
sudo iotedge config apply
لا يمكن الحصول على سجلات الشيطان IoT الحافة على Windows
السلوك الملاحظ:
يمكنك الحصول على EventLogException عند استخدام Get-WinEvent على Windows.
السبب الجذري:
Get-WinEventيعتمد الأمر PowerShell على إدخال تسجيل لتكون موجودة للبحث عن سجلات بواسطة ProviderName .
الدقة:
تعيين إدخال تسجيل للدايمون حافة IoT. إنشاء ملف iotedge.reg مع المحتوى التالي ثم استيراد إلى التسجيل Windows بالنقر المزدوج فوقه أو باستخدام الأمر:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\iotedged]
"CustomSource"=dword:00000001
"EventMessageFile"="C:\\ProgramData\\iotedge\\iotedged.exe"
"TypesSupported"=dword:00000007
مشكلات الاستقرار على الأجهزة الصغيرة
السلوك الملاحظ:
قد تواجه مشاكل الاستقرار على الأجهزة المقيدة بالموارد مثل Raspberry Pi، خاصة عند استخدامها كبوابة. تتضمن الأعراض استثناءات نفاد الذاكرة في وحدة لوحة وصل IoT Edge، أو فشل أجهزة المتلقين للمعلومات في الاتصال، أو فشل الجهاز في إرسال رسائل القياس عن بعد بعد بضع ساعات.
السبب الجذري:
مركز IoT Edge، الذي هو جزء من وقت تشغيل IoT Edge، محسن للأداء بشكل افتراضي ويحاول تخصيص أجزاء كبيرة من الذاكرة. هذا التحسين ليست مثالية للأجهزة حافة مقيدة ويمكن أن يسبب مشاكل الاستقرار.
الدقة:
بالنسبة إلى لوحة الوصل IoT Edge، قم بتعيين متغير بيئة OptimizeForPerformance إلى false. هناك طريقتان لتعيين متغيرات البيئة:
في مدخل Azure:
في مركز IoT، حدد جهاز IoT Edge ومن صفحة تفاصيل الجهاز وحدد تعيين وقت تشغيل الوحداتالنمطية الإعدادات. إنشاء متغير بيئة الوحدة النمطية لوحة الوصل IoT Edge تسمى الأداء الأمثل الذي تم تعيينه إلى false.

في بيان التوزيع:
"edgeHub": {
"type": "docker",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-hub:1.1",
"createOptions": <snipped>
},
"env": {
"OptimizeForPerformance": {
"value": "false"
}
},
فشل وحدة IoT Edge في إرسال رسالة إلى edgeHub مع خطأ 404
السلوك الملاحظ:
فشل وحدة نمطية مخصصة IoT Edge لإرسال رسالة إلى لوحة الوصل IoT Edge مع خطأ 404. Module not found يقوم الشيطان IoT Edge بطباعة الرسالة التالية إلى السجلات:
Error: Time:Thu Jun 4 19:44:58 2018 File:/usr/sdk/src/c/provisioning_client/adapters/hsm_client_http_edge.c Func:on_edge_hsm_http_recv Line:364 executing HTTP request fails, status=404, response_buffer={"message":"Module not found"}u, 04 )
السبب الجذري:
يفرض الشيطان IoT Edge تعريف العملية لجميع الوحدات التي تتصل edgeHub لأسباب أمنية. يتحقق من أن كافة الرسائل التي يتم إرسالها بواسطة وحدة نمطية تأتي من معرف العملية الرئيسي الوحدة النمطية. إذا تم إرسال رسالة بواسطة وحدة نمطية من معرف عملية مختلفة عن التي تم تأسيسها في البداية، سيتم رفض الرسالة مع رسالة خطأ 404.
الدقة:
اعتبارا من الإصدار 1.0.7، يتم تفويض كافة عمليات الوحدة النمطية للاتصال. لمزيد من المعلومات، راجع changelog الإصدار 1.0.7.
إذا لم يكن الترقية إلى 1.0.7 ممكنا، أكمل الخطوات التالية. تأكد من أن معرف العملية نفسه يستخدم دائما بواسطة الوحدة النمطية IoT Edge المخصصة لإرسال رسائل إلى edgeHub. على سبيل المثال، تأكد ENTRYPOINT من بدلا من الأمر في ملف CMD Docker. CMDيؤدي الأمر إلى معرف عملية الوحدة النمطية و معرف عملية آخر للأمر bash تشغيل البرنامج الرئيسي ولكن يؤدي إلى معرف عملية ENTRYPOINT واحدة.
وحدة IoT Edge تنتشر بنجاح ثم تختفي من الجهاز
السلوك الملاحظ:
بعد إعداد وحدات لجهاز IoT Edge، يتم نشر الوحدات بنجاح ولكن بعد بضع دقائق تختفي من الجهاز ومن تفاصيل الجهاز في مدخل Azure. قد تظهر وحدات أخرى غير تلك المحددة على الجهاز.
السبب الجذري:
إذا كان النشر التلقائي يستهدف جهازا، فإنه يأخذ الأولوية على إعداد الوحدات النمطية لجهاز واحد يدويا. وظيفة تعيين الوحدات النمطية في مدخل Azure أو إنشاء نشر لوظائف جهاز واحد في التعليمات البرمجية Visual Studio نافذ المفعول للحظة. تشاهد الوحدات النمطية التي قمت بتعريفها بدء تشغيل على الجهاز. ثم تبدأ أولوية النشر التلقائي في الخصائص المطلوبة للجهاز وتكتب فوقها.
الدقة:
استخدم نوع واحد فقط من آلية النشر لكل جهاز، إما النشر التلقائي أو عمليات نشر الأجهزة الفردية. إذا كان لديك عمليات نشر تلقائية متعددة تستهدف جهازا، فيمكنك تغيير أوصاف الأولوية أو الهدف للتأكد من تطبيق الوصف الصحيح على جهاز معين. يمكنك أيضا تحديث الجهاز التوأم لم تعد مطابقة الوصف الهدف للنشر التلقائي.
لمزيد من المعلومات، راجع فهم عمليات النشر التلقائية ل IoT Edge للأجهزة المفردة أو على النطاق .
وحدة IoT Edge تبلغ عن أخطاء الاتصال
السلوك الملاحظ:
تتوقف وحدات IoT Edge التي تتصل مباشرة بخدمات السحابة، بما في ذلك وحدات وقت التشغيل، عن العمل كما هو متوقع، وإرجاع الأخطاء حول فشل الاتصال أو الشبكة.
السبب الجذري:
تعتمد الحاويات على إعادة توجيه حزم IP من أجل الاتصال بالإنترنت حتى تتمكن من التواصل مع الخدمات السحابية. يتم تمكين إعادة توجيه حزم IP بشكل افتراضي في Docker، ولكن إذا تم تعطيله، فلن تعمل أي وحدات نمطية تتصل بخدمات السحابة كما هو متوقع. لمزيد من المعلومات، راجع فهم اتصالات الحاوية في وثائق Docker.
الدقة:
استخدم الخطوات التالية لتمكين إعادة توجيه حزم IP.
على Windows:
افتح تطبيق التشغيل.
أدخل
regeditفي مربع النص وحددregedit.في إطار محرر التسجيل استعرض للوصول إلى HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters.
ابحث عن المعلمة IPEnableRouter.
إذا كانت المعلمة موجودة، قم بتعيين قيمة المعلمة إلى 1.
إذا لم يكن المظلي موجودا، قم بإضافته كمعلمة جديدة مع الإعدادات التالية:
الإعداد القيمة الاسم IPEnableروتر النوع REG_DWORD القيمة 1
إغلاق إطار محرر التسجيل.
أعد تشغيل النظام لتطبيق التغييرات.
على نظام Linux:
افتح الملف sysctl.conf.
sudo nano /etc/sysctl.confأضف السطر التالي إلى الملف.
net.ipv4.ip_forward=1حفظ وإغلاق الملف.
أعد تشغيل خدمة الشبكة وخدمة docker لتطبيق التغييرات.
لا يمكن تنفيذ IoT الحافة خلف عبارة طلبات HTTP وبدء edgeAgent الوحدة النمطية
السلوك الملاحظ:
نشطة مع ملف تكوين صالحة، ولكن لا يمكن بدء تشغيل الوحدة النمطية edgeAgent. إرجاع الأمر iotedge list قائمة فارغة. يسجل تقرير IoT Edge الخفي Could not perform HTTP request .
السبب الجذري:
أجهزة IoT Edge خلف عبارة الحصول على الصور الخاصة بهم وحدة نمطية من جهاز IoT Edge الأصل المحدد في parent_hostname حقل ملف التكوين. Could not perform HTTP requestيعني الخطأ أن الجهاز التابع غير قادر على الوصول إلى الجهاز الأصل عبر HTTP.
الدقة:
تأكد من أن الجهاز IoT Edge الأصل يمكنه تلقي الطلبات الواردة من جهاز IoT Edge التابع. افتح حركة مرور الشبكة على المنفذين 443 و6617 للطلبات الواردة من الجهاز التابع.
الخطوات التالية
هل تعتقد أنك وجدت خللا في منصة IoT Edge؟ تقديم مشكلة حتى نتمكن من الاستمرار في التحسن.
إذا كان لديك المزيد من الأسئلة، قم بإنشاء طلب دعم للمساعدة.