درحال مشاهده اسناد Apigee Edge هستید.
به
اسناد Apigee X بروید. اطلاعات
نشانه
برنامه مشتری کد وضعیت HTTP 502 Bad Gateway را با
کد ECONNRESET بهعنوان پاسخ برای فراخوانیهای API در Edge Microgateway دریافت میکند.
پیام خطا
کارخواه کد پاسخ زیر را خواهد دید:
HTTP/1.1 502 Bad Gateway
پاسخ شامل پیام خطای زیر خواهد بود:
{"message":"socket hang up","code":"ECONNRESET"}علل احتمالی
| علت | شرح | دستورالعملهای عیبیابی برای موارد زیر قابلاجرا است |
|---|---|---|
| مهلت زمان زنده نگه داشتن پیکربندی نادرست | مهلتهای زمانی «فعال نگه داشتن» بین Edge Microgateway و سرور هدف بهدرستی پیکربندی نشده است. | کاربران «فضای ابری خصوصی و عمومی لبهای» |
| سرور هدف اتصال را زودتر ازموعد میبندد | وقتی Edge Microgateway درحال ارسال بار درخواست است، سرور هدف اتصال را زودتر ازموعد میبندد. | کاربران «فضای ابری خصوصی و عمومی لبهای» |
مراحل متداول تشخیص خرابی
- گزارشهای 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، میتوانید موارد زیر را ببینید:- در بسته ۲۵۰۲۸۸، کارخواه درخواست
POSTرا ارسال میکند. - در بسته ۲۵۰۳۷۱، سرور با
200 OKپاسخ میدهد. - در بسته ۲۵۰۵۵۹، کارخواه
ACK.را ارسال میکند - در بسته ۲۵۰۵۶۰، سرور پیام
Continuationرا ارسال میکند. - در بسته ۲۵۰۵۶۱، کارخواه
ACK.را ارسال میکند - در بسته ۲۶۲۴۳۶، سرور
FIN, ACKرا به کارخواهی که بستن اتصال را آغاز کرده است ارسال میکند. توجه داشته باشید که این تقریباً پنج ثانیه پساز بسته قبلی (۲۵۰۵۶۱) است. - در بسته ۲۶۲۴۴۱، کارخواه درخواست دیگری
POSTارسال میکند. بااینحال، این کار انجام نمیشود زیرا سرور قبلاً بستن اتصال را آغاز کرده است. باRSTدر بسته ۲۶۲۴۴۱ پاسخ میدهد.
در این مثال، از اتصال یکسانی حداقل یکبار باموفقیت استفاده مجدد شده است، اما در درخواست نهایی، سرور پساز پنج ثانیه زمان بیکاری، بستن اتصال را آغاز میکند، که همزمان با زمانی است که مشتری درخواست جدیدی ارسال کرده است. این نشان میدهد که مهلت زمانی فعال نگه داشتن سرور پشتیبان احتمالاً کوتاهتر یا برابر با مقدار تنظیمشده در کارخواه است. برای تأیید این موضوع، به مقایسه مهلت زمانی فعال نگه داشتن در Edge Microgateway و سرور زیرینه مراجعه کنید.
- در بسته ۲۵۰۲۸۸، کارخواه درخواست
مقایسه کردن مهلتهای زمان زنده نگه داشتن
- Edge Microgateway ویژگی زمان اتمام مشخصی برای زنده نگه داشتن ندارد. این مقدار توسط سیستمعاملی که برنامه در آن اجرا میشود تعیین میشود. نمونههای رایج عبارتاند از Windows، Linux، و محتویهای Docker.
- ممکن است این مورد در سیستمعامل سفارشیسازی شده باشد. با سرپرست سیستم خود تماس بگیرید. بهطور پیشفرض، سیستمعاملهای Linux دارای مهلت زمانی پیشفرض دو ساعته برای زنده نگه داشتن هستند.
- سپس، ویژگی مهلت زمانی فعال نگه داشتن پیکربندیشده در سرور نهایی را بررسی کنید. فرض کنیم سرور زیرینه شما با مقدار ۱۰ ثانیه پیکربندی شده است.
- اگر متوجه شدید که مقدار مهلت زمانی فعال نگه داشتن در سیستمعامل
بیشتر از مقدار دارایی مهلت زمانی فعال نگه داشتن در سرور زیرینه است، همانطور که در
مثال بالا نشان داده شده است، این دلیل خطاهای
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 درخواست API را به سرور زیرینه ارسال کرده است و منتظر پاسخ است. بااینحال، سرور پشتیبان اتصال را بهطور ناگهانی قبلاز اینکه Edge Microgateway پاسخی دریافت کند قطع کرد. - گزارشهای سرور نهاییتان را بررسی کنید و ببینید آیا خطا یا اطلاعاتی وجود دارد که باعث شده باشد سرور نهایی اتصال را بهطور ناگهانی قطع کند. اگر خطا یا اطلاعاتی پیدا کردید، به Resolution (وضوح) بروید و مشکل را بهطور مناسب در سرور پشتیبان خود برطرف کنید.
- اگر در سرور زیرین خود هیچ خطا یا اطلاعاتی پیدا نکردید،
برونداد
tcpdumpرا در سرور Edge Microgateway جمعآوری کنید:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
-
tcpdumpضبطشده را تجزیهوتحلیل کنید:نمونه برونداد tcpdump: ( مشاهده تصویر بزرگتر)
در نمونه بالا
tcpdump، میتوانید موارد زیر را ببینید:- در بسته ۴، Edge Microgateway درخواست
GETرا به سرور مقصد ارسال کرد. - در بسته ۵، سرور مقصد با
ACKبه درخواست پاسخ داد. - بااینحال، در بسته ۶، سرور هدف بهجای پاسخ دادن با بار پاسخ،
FIN, ACKرا ارسال میکند که باعث شروع بسته شدن اتصال میشود. - در بستههای ۷ بهبعد، اتصال بهصورت متقابل بسته میشود. ازآنجاییکه اتصال قبلاز ارسال پاسخ بسته شده است، Edge Microgateway خطای HTTP
502را به مشتری برمیگرداند. - توجه داشته باشید که مُهر زمان بسته ۸،
2021-06-23T03:52:24.110Zبا مُهر زمانی که خطا در گزارشهای Edge Microgateway ثبت شده است مطابقت دارد. از مُهرهای زمان در فایلهای گزارش و درtcpdumpاغلب میتوان برای مرتبط کردن خطاها با بستههای واقعی استفاده کرد.
وضوح
مشکل را در سرور زیرینه بهطور مناسب برطرف کنید.
اگر مشکل ادامه داشت و برای عیبیابی
502 Bad Gateway Errorبه کمک نیاز داشتید یا مشکوک بودید که مشکل از Edge Microgateway است، به باید اطلاعات تشخیص خرابی را جمعآوری کنید بروید.باید اطلاعات تشخیص خرابی را جمعآوری کند
اگر مشکل حتی پساز دنبال کردن دستورالعملهای بالا ادامه داشت، اطلاعات تشخیصی زیر را جمعآوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:
- فایلهای گزارش: پوشه پیشفرض
/var/tmpاست اما ممکن است در فایل اصلیconfig.yaml(logging > dir parameter) لغو شود. توصیه میشود قبلاز ارائه فایلهای گزارش به «پشتیبانی Apigee»،log > levelرا بهinfoتغییر دهید. - فایل پیکربندی: پیکربندی اصلی Edge Microgateway در فایل
YAML در پوشه پیشفرض Edge Microgateway،
$HOME/.edgemicro، قرار دارد. یک فایل پیکربندی پیشفرض بهنامdefault.yamlو سپس یک فایل برای هر محیطORG-ENV-config.yamlوجود دارد. لطفاً این فایل را بهطور کامل برای سازمان و محیط تحتتأثیر قرارگرفته بارگذاری کنید.
- در بسته ۴، Edge Microgateway درخواست