আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান । তথ্য
উপসর্গ
ক্লায়েন্ট অ্যাপ্লিকেশনটি একটি API প্রক্সি কলের পরে Service Unavailable
বার্তা সহ একটি HTTP প্রতিক্রিয়া স্থিতি 503
পায়৷
ত্রুটি বার্তা
ক্লায়েন্ট অ্যাপ্লিকেশন নিম্নলিখিত প্রতিক্রিয়া কোড পায়:
HTTP/1.1 503 Service Unavailable
উপরন্তু, আপনি নিম্নলিখিত ত্রুটি বার্তা পর্যবেক্ষণ করতে পারেন:
{ "fault": { "faultstring": "The Service is temporarily unavailable", "detail": { "errorcode": "messaging.adaptors.http.flow.ServiceUnavailable" } } }
সম্ভাব্য কারণ
কারণ | বর্ণনা | সমস্যা সমাধানের নির্দেশাবলী প্রযোজ্য |
---|---|---|
টার্গেট সার্ভার অকালে সংযোগ বন্ধ করে দেয় | টার্গেট সার্ভার অকালে সংযোগটি শেষ করে দেয় যখন বার্তা প্রসেসর এখনও অনুরোধ পেলোড পাঠাচ্ছে। | এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা |
সাধারণ রোগ নির্ণয়ের পদক্ষেপ
ব্যর্থ অনুরোধের বার্তা আইডি নির্ধারণ করুন
ট্রেস টুল
ট্রেস টুল ব্যবহার করে ব্যর্থ অনুরোধের বার্তা আইডি নির্ধারণ করতে:
- সমস্যাটি এখনও সক্রিয় থাকলে, প্রভাবিত API-এর জন্য ট্রেস সেশন সক্রিয় করুন।
- API কল করুন এবং সমস্যাটি পুনরুত্পাদন করুন - ত্রুটি কোড
messaging.adaptors.http.flow.ServiceUnavailable.
সহ503 Service Unavailable
৷ - একটি ব্যর্থ অনুরোধ নির্বাচন করুন.
- AX পর্বে নেভিগেট করুন, এবং নিম্নলিখিত চিত্রে দেখানো হিসাবে ফেজ বিশদ বিভাগে নীচে স্ক্রোল করে অনুরোধের বার্তা আইডি (
X-Apigee.Message-ID
) নির্ধারণ করুন৷
NGINX অ্যাক্সেস লগ
NGINX অ্যাক্সেস লগ ব্যবহার করে ব্যর্থ অনুরোধের বার্তা আইডি নির্ধারণ করতে:
503
ত্রুটির জন্য বার্তা আইডি নির্ধারণ করতে আপনি NGINX অ্যাক্সেস লগগুলিও উল্লেখ করতে পারেন। এটি বিশেষভাবে উপযোগী যদি সমস্যাটি অতীতে ঘটে থাকে বা সমস্যাটি মাঝে মাঝে হয় এবং আপনি UI-তে ট্রেস ক্যাপচার করতে অক্ষম হন। NGINX অ্যাক্সেস লগ থেকে এই তথ্য নির্ধারণ করতে নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করুন:
- NGINX অ্যাক্সেস লগগুলি পরীক্ষা করুন: (
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log
) - একটি নির্দিষ্ট সময়কালের (যদি সমস্যা অতীতে ঘটে থাকে) নির্দিষ্ট API প্রক্সির জন্য কোনো
503
ত্রুটি আছে কিনা বা503
সাথে কোনো অনুরোধ এখনও ব্যর্থ হয়েছে কিনা তা দেখতে অনুসন্ধান করুন। - যদি X-Apigee-fault-code messaging.adaptors.http.flow.ServiceUnavailable এর সাথে কোনো
503
ত্রুটি থাকে, তাহলে নিম্নলিখিত উদাহরণে দেখানো এক বা একাধিক অনুরোধের জন্য বার্তা আইডিটি নোট করুন:নমুনা এন্ট্রি
503
ত্রুটি দেখাচ্ছে
কারণ: টার্গেট সার্ভার অকালে সংযোগ বন্ধ করে দেয়
রোগ নির্ণয়
- আপনি যদি একজন পাবলিক ক্লাউড বা প্রাইভেট ক্লাউড ব্যবহারকারী হন:
- ট্রেস টুল ব্যবহার করুন ( সাধারণ নির্ণয়ের ধাপে ব্যাখ্যা করা হয়েছে) এবং যাচাই করুন যে আপনার কাছে বিশ্লেষণ ডেটা রেকর্ড করা প্যানে নিম্নলিখিত দুটি সেট আছে:
- X-Apigee.fault-code:
messaging.adaptors.http.flow.ServiceUnavailable
- X-Apigee.fault-source:
target
- X-Apigee.fault-code:
- ট্রেস টুলটি ব্যবহার করুন ( সাধারণ নির্ণয়ের ধাপে ব্যাখ্যা করা হয়েছে) এবং যাচাই করুন যে
TARGET_REQ_FLOW
স্টেট প্রপার্টির পরপরই আপনি ত্রুটি ফলকে নিম্নলিখিত দুটি সেট করেছেন:- error.class:
com.apigee.errors.http.server.ServiceUnavailableException
- error.cause:
Broken pipe
- error.class:
- আরও তদন্তের জন্য tcpdump ব্যবহারে যান।
- ট্রেস টুল ব্যবহার করুন ( সাধারণ নির্ণয়ের ধাপে ব্যাখ্যা করা হয়েছে) এবং যাচাই করুন যে আপনার কাছে বিশ্লেষণ ডেটা রেকর্ড করা প্যানে নিম্নলিখিত দুটি সেট আছে:
- আপনি যদি ব্যক্তিগত ক্লাউড ব্যবহারকারী হন:
- ব্যর্থ অনুরোধের বার্তা আইডি নির্ধারণ করুন ।
- মেসেজ প্রসেসর লগ (
/opt/apigee/var/log/edge-message-processor/logs/system.log
) এ বার্তা আইডি খুঁজুন। - আপনি নিম্নলিখিত ব্যতিক্রমগুলির মধ্যে একটি দেখতে পাবেন:
ব্যতিক্রম #1: java.io.IOException: চ্যানেল ClientOutputChannel এ লেখার সময় ভাঙা পাইপ ঘটেছে
2021-01-30 15:31:14,693 org:anotherorg env:prod api:myproxy rev:1 messageid:myorg-opdk-test-1-30312-13747-1 NIOThread@1 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.io.IOException: Broken pipe occurred while writing to channel ClientOutputChannel(ClientChannel[Connected: Remote:IP:PORT Local:0.0.0.0:42828]@8380 useCount=1 bytesRead=0 bytesWritten=76295 age=2012ms lastIO=2ms isOpen=false)
বা
ব্যতিক্রম #2: onExceptionWrite ব্যতিক্রম: {}
java.io.IOException: ভাঙ্গা পাইপ2021-01-31 15:29:37,438 org:anotherorg env:prod api:503-test rev:1 messageid:leonyoung-opdk-test-1-18604-13978-1 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context$2.onException() : ClientChannel[Connected: Remote:IP:PORT Local:0.0.0.0:57880]@8569 useCount=1 bytesRead=0 bytesWritten=76295 age=3180ms lastIO=2 ms isOpen=false.onExceptionWrite exception: {} java.io.IOException: Broken pipe
- এই দুটি ব্যতিক্রমই ইঙ্গিত দেয় যে যখন মেসেজ প্রসেসর ব্যাকএন্ড সার্ভারে রিকোয়েস্ট পেলোড লিখছিল তখনও ব্যাকএন্ড সার্ভারের মাধ্যমে সংযোগটি অকালে বন্ধ হয়ে গিয়েছিল। তাই, মেসেজ প্রসেসর ব্যতিক্রমটি ছুঁড়ে দেয়
java.io.IOException: Broken pipe
. -
Remote: IP : PORT
সমাধান করা ব্যাকএন্ড সার্ভারের আইপি ঠিকানা এবং পোর্ট নম্বর নির্দেশ করে। - উপরের ত্রুটি বার্তায়
bytesWritten=76295
বৈশিষ্ট্যটি নির্দেশ করে যে মেসেজ প্রসেসর ব্যাকএন্ড সার্ভারে76295
বাইটের একটি পেলোড পাঠিয়েছিল যখন সংযোগটি সময়ের আগে বন্ধ হয়ে গিয়েছিল। - অ্যাট্রিবিউট
bytesRead=0
নির্দেশ করে যে মেসেজ প্রসেসর ব্যাকএন্ড সার্ভার থেকে কোনো ডেটা (প্রতিক্রিয়া) পায়নি। - এই সমস্যাটি আরও তদন্ত করতে, ব্যাকএন্ড সার্ভার বা মেসেজ প্রসেসরে একটি
tcpdump
সংগ্রহ করুন এবং নীচের ব্যাখ্যা অনুযায়ী এটি বিশ্লেষণ করুন।
tcpdump ব্যবহার করে
ব্যাকএন্ড সার্ভার বা মেসেজ প্রসেসরে একটি
tcpdump
ক্যাপচার করুন নিম্নলিখিত কমান্ডগুলি দিয়ে:ব্যাকএন্ড সার্ভারে
tcpdump
সংগ্রহ করার জন্য কমান্ড:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
বার্তা প্রসেসরে
tcpdump
সংগ্রহ করার জন্য কমান্ড:tcpdump -i any -s 0 host BACKEND_HOSTNAME -w FILE_NAME
- ক্যাপচার করা
tcpdump
বিশ্লেষণ করুন:নমুনা tcpdump আউটপুট (মেসেজ প্রসেসরে সংগৃহীত):
উপরের
tcpdump
এ, আপনি নিম্নলিখিতগুলি দেখতে পারেন:- প্যাকেট
4
এ, বার্তা প্রসেসর ব্যাকএন্ড সার্ভারে একটিPOST
অনুরোধ পাঠিয়েছে। - প্যাকেটে
5
,8
,9
,10
,11
, মেসেজ প্রসেসর ব্যাকএন্ড সার্ভারে রিকোয়েস্ট পেলোড পাঠাতে থাকে। - প্যাকেট
6
এবং7
এ, ব্যাকএন্ড সার্ভার মেসেজ প্রসেসর থেকে প্রাপ্ত অনুরোধ পেলোডের একটি অংশের জন্যACK
সাথে প্রতিক্রিয়া জানায়। - যাইহোক, প্যাকেট
12
-এ, প্রাপ্ত অ্যাপ্লিকেশন ডেটা প্যাকেটগুলির জন্যACK
দিয়ে প্রতিক্রিয়া জানানোর পরিবর্তে এবং পরবর্তীতে প্রতিক্রিয়া পেলোডের সাথে প্রতিক্রিয়া জানানোর পরিবর্তে, ব্যাকএন্ড সার্ভার পরিবর্তে সংযোগ বন্ধ করার জন্য একটিFIN ACK
দিয়ে প্রতিক্রিয়া জানায়। - এটি স্পষ্টভাবে দেখায় যে ব্যাকএন্ড সার্ভার অকালে সংযোগটি বন্ধ করে দিচ্ছে যখন বার্তা প্রসেসর এখনও অনুরোধ পেলোড পাঠাচ্ছে।
- এর ফলে মেসেজ প্রসেসর একটি
IOException: Broken Pipe
ত্রুটি রেকর্ড করে এবং ক্লায়েন্টকে503
ফেরত দেয়।
- প্যাকেট
রেজোলিউশন
- ব্যাকএন্ড সার্ভার সাইডে অকাল সংযোগ বিচ্ছিন্ন হওয়ার সমস্যাটি বিশ্লেষণ এবং সমাধান করতে আপনার অ্যাপ্লিকেশন এবং নেটওয়ার্কিং টিমগুলির মধ্যে একটি বা উভয়ের সাথে কাজ করুন৷
- নিশ্চিত করুন যে ব্যাকএন্ড সার্ভার অ্যাপ্লিকেশনটি সম্পূর্ণ অনুরোধ পেলোড পাওয়ার আগে টাইম আউট বা সংযোগ পুনরায় সেট করছে না।
- আপনার যদি Apigee এবং ব্যাকএন্ড সার্ভারের মধ্যে কোনো মধ্যস্থতাকারী নেটওয়ার্কিং ডিভাইস বা স্তর থাকে, তাহলে নিশ্চিত করুন যে পুরো অনুরোধ পেলোড প্রাপ্ত হওয়ার আগে সেগুলি টাইমিং আউট হচ্ছে না।
যদি সমস্যা এখনও থেকে যায়, তাহলে ডায়াগনস্টিক তথ্য সংগ্রহ করতে হবে ।
ডায়াগনস্টিক তথ্য সংগ্রহ করতে হবে
উপরের নির্দেশাবলী অনুসরণ করার পরেও যদি সমস্যা থেকে যায়, তাহলে নিম্নলিখিত ডায়াগনস্টিক তথ্য সংগ্রহ করুন এবং তারপর Apigee Edge সাপোর্টের সাথে যোগাযোগ করুন:
আপনি যদি একজন পাবলিক ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্য প্রদান করুন:
- প্রতিষ্ঠানের নাম
- পরিবেশের নাম
- API প্রক্সি নাম
-
503
ত্রুটি পুনরুত্পাদন করতেcurl
কমান্ডটি সম্পূর্ণ করুন -
503 Service Unavailable
ত্রুটি সহ অনুরোধ ধারণকারী ট্রেস ফাইল - যদি
503
ত্রুটি বর্তমানে ঘটছে না, অতীতে যখন503
ত্রুটি ঘটেছে টাইমজোন তথ্য সহ সময়কাল প্রদান করুন।
আপনি যদি একজন ব্যক্তিগত ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্য প্রদান করুন:
- ব্যর্থ অনুরোধের জন্য পরিলক্ষিত সম্পূর্ণ ত্রুটি বার্তা
- প্রতিষ্ঠান, পরিবেশের নাম এবং API প্রক্সি নাম যার জন্য আপনি
503
ত্রুটি পর্যবেক্ষণ করছেন - API প্রক্সি বান্ডেল
-
503 Service Unavailable
ত্রুটি সহ অনুরোধ ধারণকারী ট্রেস ফাইল - NGINX অ্যাক্সেস লগ
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log
- বার্তা প্রসেসর লগ
/opt/apigee/var/log/edge-message-processor/logs/system.log
- টাইমজোন তথ্য সহ সময়কাল যখন
503
ত্রুটি ঘটেছে -
Tcpdumps
বার্তা প্রসেসর এবং ব্যাকএন্ড সার্ভারে জড়ো হয়েছিল যখন ত্রুটি ঘটেছে