أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
المشكلة
يتلقّى تطبيق العميل رمز حالة HTTP 502 Bad Gateway مع الرمز ECONNRESET كاستجابة لطلبات البيانات من واجهة برمجة التطبيقات في Edge Microgateway.
رسالة الخطأ
سيرى العميل رمز الاستجابة التالي:
HTTP/1.1 502 Bad Gateway
سيتضمّن الردّ رسالة الخطأ التالية:
{"message":"socket hang up","code":"ECONNRESET"}الأسباب المحتملة
| السبب | الوصف | تعليمات تحديد المشاكل وحلّها التي تنطبق على |
|---|---|---|
| مهلة عدم النشاط المضبوطة بشكل غير صحيح | تم ضبط مهلات Keep-alive بشكل غير صحيح بين Edge Microgateway والخادم المستهدف. | مستخدمو Edge Public Cloud وEdge Private Cloud |
| يغلق الخادم المستهدف الاتصال قبل الأوان | يغلق الخادم المستهدف الاتصال قبل الأوان أثناء إرسال Edge Microgateway حمولة الطلب. | مستخدمو Edge Public Cloud وEdge Private Cloud |
خطوات التشخيص الشائعة
- تحقَّق من سجلّات Edge Microgateway:
/var/tmp/edgemicro-`hostname`-*.log
- ابحث لمعرفة ما إذا كانت هناك أي أخطاء
502بالرمزECONNRESETخلال مدة زمنية معيّنة (إذا حدثت المشكلة في الماضي) أو ما إذا كانت هناك أي طلبات لا تزال غير ناجحة مع502.2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test] [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684] [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
- إذا كان مستوى التسجيل مضبوطًا على
warnأوinfo، ستظهر أيضًا رسالة[warn]تتضمّن اسم مضيف الخادم المستهدف ومنفذه في العنصر الثاني. في هذا المثال، يكونX.X.X.X:8080، ويمكن استخدام هذا الرمز لاحقًا لالتقاطtcpdump.2021-06-23T03:52:24.109Z [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup] [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware] [targetRequest error][GET][][socket hang up][ECONNRESET][395]
- يشير رمز الخطأ
[socket hang up][ECONNRESET]إلى أنّ الخادم المستهدف قد أغلق الاتصال مع Edge Microgateway. يمكن البحث عن هذا الخطأ في السجلات لتحديد عدد المرات التي يحدث فيها.
السبب: انتهاء مهلة الاتصال النشط تم ضبطه بشكلٍ غير صحيح
التشخيص
- اتّبِع الخطوات الواردة في خطوات التشخيص الشائعة وتحقّق ممّا إذا ظهر لك الخطأ
[socket hang up][ECONNRESET]. إذا كانت الإجابة بنعم، عليك إجراء المزيد من التحقيق بمساعدة
tcpdumpكما هو موضّح أدناه:
استخدام الأداة tcpdump
- يمكنك تسجيل
tcpdumpبين Edge Microgateway وخادم الخلفية على نظام تشغيل مضيف Edge Microgateway باستخدام الأمر التالي:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- تحليل
tcpdumpالتي تم تسجيلها:نموذج لنتائج tcpdump: ( عرض صورة أكبر)
في النموذج
tcpdumpأعلاه، يمكنك الاطّلاع على ما يلي:- في الحزمة 250288، يرسل العميل طلب
POST. - في الحزمة 250371، يستجيب الخادم بالرمز
200 OK. - في الحزمة 250559، يرسل العميل
ACK. - في الحزمة 250560، يرسل الخادم الرسالة
Continuation. - في الحزمة 250561، يرسل العميل
ACK. - في الحزمة 262436، يرسل الخادم
FIN, ACKإلى العميل الذي بدأ عملية إغلاق الاتصال. يُرجى العِلم أنّ هذا الوقت يبلغ خمس ثوانٍ تقريبًا بعد الحزمة السابقة (250561). - في الحزمة 262441، يرسل العميل طلب
POSTآخر. ومع ذلك، يتعذّر ذلك لأنّ الخادم سبق أن بدأ في إغلاق الاتصال. ويستجيب بإرسالRSTفي الحزمة 262441.
في هذا المثال، تمّت إعادة استخدام الاتصال نفسه مرّة واحدة على الأقل بنجاح، ولكن في الطلب الأخير، بدأ الخادم في إغلاق الاتصال بعد خمس ثوانٍ من وقت الخمول، وهو ما حدث في الوقت نفسه الذي أرسل فيه العميل طلبًا جديدًا. يشير ذلك إلى أنّ مهلة إبقاء الاتصال نشطًا في خادم الخلفية من المرجّح أن تكون أقصر من القيمة المحدّدة في العميل أو مساوية لها. للتحقّق من ذلك، يُرجى الاطّلاع على مقارنة مهلة البقاء على قيد الحياة في Edge Microgateway وخادم الخلفية.
- في الحزمة 250288، يرسل العميل طلب
مقارنة مهلات إبقاء الاتصال نشطًا
- لا يتضمّن Edge Microgateway خاصية مهلة محدّدة لإبقاء الاتصال نشطًا. ويتم تحديدها من خلال نظام التشغيل الذي يتم تشغيلها عليه. وتشمل الأمثلة الشائعة أنظمة التشغيل Windows وLinux وحاويات Docker.
- من المحتمل أن يتم تخصيص هذا الإعداد في نظام التشغيل. يُرجى التواصل مع مشرف النظام. تتضمّن أنظمة التشغيل Linux تلقائيًا مهلة تلقائية لإبقاء الاتصال نشطًا تبلغ ساعتين.
- بعد ذلك، تحقَّق من خاصية المهلة المحدّدة لعملية إبقاء الاتصال نشطًا التي تم ضبطها على خادم الخلفية. لنفترض أنّ خادم الخلفية مضبوط على قيمة 10 ثوانٍ.
- إذا تبيّن لك أنّ قيمة مهلة إبقاء الاتصال نشطًا في نظام التشغيل أعلى من قيمة مهلة إبقاء الاتصال نشطًا في خادم الخلفية كما هو موضّح في المثال أعلاه، سيكون ذلك هو سبب حدوث أخطاء
502.
الدقة
تأكَّد من أنّ خاصية مهلة البقاء على قيد الحياة تكون دائمًا أقل في نظام التشغيل الذي يتم تشغيل Edge Microgateway عليه مقارنةً بنظام التشغيل على خادم الخلفية.
- حدِّد القيمة المضبوطة لمهلة إبقاء الاتصال نشطًا على خادم الخلفية.
- اضبط قيمة مناسبة لخاصية مهلة البقاء على قيد الحياة في نظام التشغيل، بحيث تكون خاصية مهلة البقاء على قيد الحياة أقل من القيمة المضبوطة على خادم الخلفية، وذلك باتّباع الخطوات التي تنطبق على نظام التشغيل.
أفضل الممارسات
يُنصح بشدة بأن تتضمّن المكوّنات النهائية دائمًا حدًا أدنى لوقت انتهاء مهلة البقاء على قيد الحياة أقل من الحد الأدنى الذي تم ضبطه على الخوادم الأولية لتجنُّب حالات التعارض وأخطاء 502 من هذا النوع. يجب أن يكون كل انتقال إلى أسفل أصغر من كل انتقال إلى أعلى. في Edge
Microgateway، من أفضل الممارسات اتّباع الإرشادات التالية:
يجب أن تكون مهلة إبقاء الاتصال نشطًا في تطبيق العميل أو موازن التحميل أقل من مهلة إبقاء الاتصال نشطًا في Edge Microgateway.
لضبط مهلة البقاء على قيد الحياة في Edge Microgateway، أضِف القيمة
keep_alive_timeoutإلى ملف~/.edgemicro/org-env-config.yaml.edgemicro: keep_alive_timeout: 65000
- يجب أن تكون مهلة إبقاء نظام تشغيل Edge Microgateway نشطًا أقل من مهلة إبقاء الخادم المستهدف نشطًا.
- إذا كان لديك أي خطوات أخرى قبل Edge Microgateway أو بعدها، يجب تطبيق القاعدة نفسها. يجب أن تترك دائمًا مسؤولية إغلاق الاتصال مع المصدر للعميل الذي يتلقّى البيانات.
السبب: يغلق الخادم المستهدف الاتصال قبل الأوان
التشخيص
- اتّبِع الخطوات الموضّحة في خطوات التشخيص الشائعة وتأكَّد ممّا إذا ظهر لك الخطأ
[socket hang up][ECONNRESET]. - إذا كانت الإجابة بنعم، يمكنك إجراء المزيد من التحقيقات بمساعدة
tcpdumpكما هو موضّح أدناه.تشير رسالة الخطأ
[targetRequest error][GET][][socket hang up][ECONNRESET]في المثال أعلاه إلى أنّ هذا الخطأ حدث أثناء إرسال Edge Microgateway الطلب إلى خادم الخلفية (الخادم المستهدف). أي أنّ Edge Microgateway أرسل طلب البيانات من واجهة برمجة التطبيقات إلى خادم الخلفية وكان ينتظر الردّ. ومع ذلك، أنهى خادم الخلفية الاتصال فجأة قبل أن يتلقّى Edge Microgateway استجابة. - راجِع سجلّات خادم الخلفية لمعرفة ما إذا كانت هناك أي أخطاء أو معلومات قد تكون أدّت إلى إنهاء الخادم للاتصال بشكل مفاجئ. إذا عثرت على أي أخطاء أو معلومات، انتقِل إلى الحلّ وأصلِح المشكلة بشكل مناسب في خادم الخلفية.
- إذا لم تعثر على أي أخطاء أو معلومات في خادم الخلفية، اجمع ناتج
tcpdumpعلى خادم Edge Microgateway:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- تحليل
tcpdumpالتي تم تسجيلها:نموذج لنتائج tcpdump: ( عرض صورة أكبر)
في النموذج
tcpdumpأعلاه، يمكنك الاطّلاع على ما يلي:- في الحزمة 4، أرسل Edge Microgateway طلب
GETإلى الخادم المستهدف. - في الحزمة 5، استجاب الخادم المستهدف بالرمز
ACKلتأكيد استلام الطلب. - ومع ذلك، في الحزمة 6، بدلاً من الرد بحمولة استجابة، يرسل الخادم المستهدف
FIN, ACKلبدء إغلاق الاتصال. - في الحِزم 7 وما يليها، يتم إغلاق الاتصال بشكل متبادل. بما أنّ الاتصال تم إغلاقه قبل إرسال الاستجابة، ستعرض Edge Microgateway الخطأ
502HTTP للعميل. - يُرجى العِلم أنّ الطابع الزمني للحزمة 8،
2021-06-23T03:52:24.110Zيتوافق مع الطابع الزمني الذي تم فيه تسجيل الخطأ في سجلّات Edge Microgateway. يمكن غالبًا استخدام الطوابع الزمنية في ملفات السجلّ وفيtcpdumpلربط الأخطاء بالحِزم الفعلية.
الدقة
أصلِح المشكلة على خادم الخلفية بشكلٍ مناسب.
إذا استمرت المشكلة وكنت بحاجة إلى مساعدة في تحديد المشاكل وحلّها في
502 Bad Gateway Errorأو إذا كنت تعتقد أنّ المشكلة في Edge Microgateway، انتقِل إلى المعلومات التشخيصية التي يجب جمعها.يجب جمع معلومات التشخيص
إذا استمرت المشكلة حتى بعد اتّباع التعليمات أعلاه، اجمع معلومات التشخيص التالية ثم تواصَل مع فريق دعم Apigee Edge:
- ملفات السجلّ: المجلد التلقائي هو
/var/tmp، ولكن يمكن إلغاء هذا الإعداد في ملفconfig.yamlالرئيسي (logging > dir parameter). يُنصح بتغييرlog > levelإلىinfoقبل تقديم ملفات السجلّ إلى فريق الدعم في Apigee. - ملف الإعداد: تقع الإعدادات الرئيسية لـ Edge Microgateway في ملف YAML في مجلد Edge Microgateway التلقائي،
$HOME/.edgemicro. هناك ملف إعداد تلقائي باسمdefault.yaml، ثم ملف لكل بيئةORG-ENV-config.yaml. يُرجى تحميل هذا الملف بالكامل للمؤسسة والبيئة المتأثرتين.
- في الحزمة 4، أرسل Edge Microgateway طلب