شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
علامت
برنامه مشتری کد وضعیت HTTP 502 Bad Gateway
را با کد ECONNRESET
به عنوان پاسخی برای تماس های API در Edge Microgateway دریافت می کند.
پیغام خطا
مشتری کد پاسخ زیر را می بیند:
HTTP/1.1 502 Bad Gateway
پاسخ شامل پیام خطای زیر خواهد بود:
{"message":"socket hang up","code":"ECONNRESET"}
علل احتمالی
علت | توضیحات | دستورالعمل های عیب یابی قابل اجرا برای |
---|---|---|
مهلت زمانی نگه داشتن زنده پیکربندی نادرست است | وقفههای Keep-alive بین Edge Microgateway و سرور مورد نظر به اشتباه پیکربندی شدهاند. | کاربران Edge Public و Private Cloud |
سرور هدف اتصال را زودتر از موعد قطع می کند | در حالی که Edge Microgateway در حال ارسال بار درخواستی است، سرور مورد نظر اتصال را پیش از موعد می بندد. | کاربران Edge Public و 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]
شامل نام میزبان سرور و پورت مورد نظر در عنصر دوم نیز وجود خواهد داشت. در این مثالXXXX: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 و سرور backend در سیستم عامل میزبان 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 خاصیت بازدارندگی خاصی ندارد. توسط سیستم عاملی که در آن اجرا می شود تعیین می شود. نمونههای رایج کانتینرهای ویندوز، لینوکس و داکر هستند.
- ممکن است این امکان وجود داشته باشد که در سیستم عامل سفارشی شده باشد. با مدیر سیستم خود چک کنید. به طور پیشفرض، سیستمعاملهای لینوکس دارای یک بازه زمانی پیشفرض دو ساعته هستند.
- در مرحله بعد، ویژگی keep-alive timeout پیکربندی شده در سرور باطن خود را بررسی کنید. فرض کنید سرور باطن شما با مقدار 10 ثانیه پیکربندی شده است.
- اگر تعیین کردید که مقدار بازه زمانی keep-alive در سیستم عامل بالاتر از مقدار ویژگی keep-alive timeout در سرور باطن مانند مثال بالا است، آنگاه این دلیل خطاهای
502
است.
قطعنامه
اطمینان حاصل کنید که خاصیت timeout keep-alive در سیستم عاملی که Edge Microgateway در آن اجرا می شود در مقایسه با سرور باطن همیشه کمتر باشد.
- مقدار تنظیم شده برای بازه زمانی نگه داشتن زنده در سرور باطن را تعیین کنید.
- با استفاده از مراحلی که برای سیستم عامل شما قابل اجرا است، مقدار مناسبی را برای ویژگی timeout keep-alive در سیستم عامل پیکربندی کنید، به طوری که خاصیت timeout keep-alive کمتر از مقدار تنظیم شده در سرور backend باشد.
بهترین تمرین
اکیداً توصیه میشود که مؤلفههای پاییندست همیشه آستانه زمانبندی نگهداشتن زنده کمتری نسبت به پیکربندیشده در سرورهای بالادستی داشته باشند تا از این نوع شرایط مسابقه و خطاهای 502
جلوگیری شود. هر جهش پایین دست باید کمتر از هر پرش بالادست باشد. در Edge Microgateway، استفاده از دستورالعمل های زیر تمرین خوبی است:
مهلت زمانی نگه داشتن زنده در برنامه مشتری یا متعادل کننده بار باید کمتر از مهلت زمانی نگه داشتن زنده Edge Microgateway باشد.
برای پیکربندی بازه زمانی keep-alive در 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 درخواست API را به سرور باطن ارسال کرد و منتظر پاسخ بود. با این حال، سرور باطن قبل از دریافت پاسخ Edge Microgateway به طور ناگهانی اتصال را قطع کرد. - گزارشهای سرور بکاند خود را بررسی کنید و ببینید آیا خطا یا اطلاعاتی وجود دارد که میتواند منجر به قطع ناگهانی اتصال سرور باطن شود. اگر خطا یا اطلاعاتی پیدا کردید، به Resolution بروید و مشکل را به طور مناسب در سرور باطن خود برطرف کنید.
- اگر هیچ خطایی یا اطلاعاتی در سرور باطن خود پیدا نکردید، خروجی
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 خطای HTTP
502
را به مشتری برمی گرداند. - توجه داشته باشید که مهر زمانی بسته 8 ،
2021-06-23T03:52:24.110Z
مربوط به مهر زمانی است که در آن خطا در گزارش های Edge Microgateway ثبت شده است. مُهرهای زمانی در فایلهای گزارش وtcpdump
اغلب میتوانند برای مرتبط کردن خطاها با بستههای واقعی استفاده شوند.
قطعنامه
مشکل را در سرور باطن به طور مناسب برطرف کنید.
اگر مشکل همچنان ادامه دارد و برای عیبیابی
502 Bad Gateway Error
نیاز به کمک دارید یا مشکوک هستید که این مشکل در Edge Microgateway است، به Must collect اطلاعات عیبیابی بروید.باید اطلاعات تشخیصی را جمع آوری کرد
اگر حتی پس از پیروی از دستورالعملهای بالا، مشکل همچنان ادامه داشت، اطلاعات تشخیصی زیر را جمعآوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:
- فایلهای گزارش : پوشه پیشفرض
/var/tmp
است اما ممکن است در فایل اصلیconfig.yaml
لغو شود (logging > dir parameter
). توصیه می شود قبل از ارائه فایل های گزارش به پشتیبانی Apigeelog > level
بهinfo
تغییر دهید. - فایل پیکربندی : پیکربندی اصلی Edge Microgateway در فایل YAML در پوشه پیشفرض Edge Microgateway،
$HOME/.edgemicro
قرار دارد. یک فایل پیکربندی پیشفرض به نامdefault.yaml
و سپس یک فایل برای هر محیطORG - ENV -config.yaml
وجود دارد. لطفاً این فایل را به طور کامل برای org و env تحت تأثیر آپلود کنید.
- در بسته 4 ، Edge Microgateway یک درخواست