আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন। তথ্য
সমস্যার উপসর্গ
API প্রক্সি কলের পরে ক্লায়েন্ট অ্যাপ্লিকেশন 503 HTTP রেসপন্স স্ট্যাটাস সহ এই মেসেজটি পায়:
Service Unavailable
সমস্যা সংক্রান্ত মেসেজ
ক্লায়েন্ট অ্যাপ্লিকেশন নিম্নলিখিত রেসপন্স কোড পায়:
HTTP/1.1 503 Service Unavailable
এছাড়াও, আপনি নিম্নলিখিত সমস্যার মেসেজ দেখতে পেতে পারেন:
{
"fault": {
"faultstring": "The Service is temporarily unavailable",
"detail": {
"errorcode": "messaging.adaptors.http.flow.ServiceUnavailable"
}
}
}সম্ভাব্য কারণ
| কারণ | বিবরণ | এর জন্য প্রযোজ্য সমস্যার সমাধান সংক্রান্ত নির্দেশাবলী |
|---|---|---|
| টার্গেট সার্ভার কানেকশন অসম্পূর্ণ রেখেই বন্ধ করে দেয় | মেসেজ প্রসেসর এখনও অনুরোধের পেলোড পাঠাচ্ছে, সেই সময় টার্গেট সার্ভার কানেকশন বন্ধ করে দেয়। | এজ পাবলিক ও প্রাইভেট ক্লাউড ব্যবহারকারী |
সাধারণ ডায়াগনসিস ধাপ
অনুরোধটি কেন সম্পূর্ণ করা যায়নি তা মেসেজ আইডি থেকে বোঝা
ট্রেস টুল
Trace টুল ব্যবহার করে ব্যর্থ অনুরোধের মেসেজ আইডি নির্ধারণ করতে:
- সমস্যাটি এখনও থাকলে, প্রভাবিত এপিআইয়ের জন্য ট্রেস সেশন চালু করুন।
- API কল করুন এবং সমস্যাটি আবার তৈরি করুন -
503 Service Unavailableসমস্যার কোডmessaging.adaptors.http.flow.ServiceUnavailable. - কাজ না করা অনুরোধগুলির মধ্যে একটি বেছে নিন।
- 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-এর সাথে এখনও কোনও অনুরোধ ব্যর্থ হচ্ছে কিনা। 503X-Apigee-fault-code messaging.adaptors.http.flow.ServiceUnavailable সংক্রান্ত কোনও সমস্যা থাকলে, নিচের উদাহরণে দেখানো হয়েছে এমন এক বা একাধিক অনুরোধের জন্য মেসেজ আইডি নোট করুন:503সমস্যা সহ স্যাম্পেল এন্ট্রি
কারণ: টার্গেট সার্ভার কানেকশন অসম্পূর্ণ অবস্থায় বন্ধ করে দেয়
ডায়াগনসিস
- আপনি পাবলিক ক্লাউড বা প্রাইভেট ক্লাউড ব্যবহারকারী হলে:
- ট্রেস টুল ব্যবহার করুন (সাধারণ ডায়াগনসিস ধাপ-এ যেভাবে বলা হয়েছে)
এবং রেকর্ড করা Analytics ডেটা প্যানেলে নিম্নলিখিত দুটি সেট করা আছে কিনা তা যাচাই করুন:
- X-Apigee.fault-code:
messaging.adaptors.http.flow.ServiceUnavailable - X-Apigee.fault-source:
target

- X-Apigee.fault-code:
- ট্রেস টুল ব্যবহার করুন (সাধারণ ডায়াগনসিস ধাপ-এ যেভাবে বলা হয়েছে)
এবং যাচাই করুন যে
TARGET_REQ_FLOWstate প্রপার্টির ঠিক পরে সমস্যা প্যানেলে আপনার নিম্নলিখিত দুটি সেট করা আছে কিনা:- error.class:
com.apigee.errors.http.server.ServiceUnavailableException - error.cause:
Broken pipe

- error.class:
- আরও তদন্ত করতে tcpdump ব্যবহার করা লিঙ্কে যান।
- ট্রেস টুল ব্যবহার করুন (সাধারণ ডায়াগনসিস ধাপ-এ যেভাবে বলা হয়েছে)
এবং রেকর্ড করা Analytics ডেটা প্যানেলে নিম্নলিখিত দুটি সেট করা আছে কিনা তা যাচাই করুন:
- আপনি প্রাইভেট ক্লাউড ব্যবহারকারী হলে:
- অনুরোধটি কেন কাজ করছে না তা বুঝতে মেসেজ আইডি দেখুন।
- Message Processor log-এ মেসেজ আইডি সার্চ করুন
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)। - আপনি নিম্নলিখিত ব্যতিক্রমগুলির মধ্যে একটি দেখতে পাবেন:
ব্যতিক্রম #১: java.io.IOException: Broken pipe occurred while writing to channel 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)
অথবা
ব্যতিক্রম #২: onExceptionWrite ব্যতিক্রম: {}
java.io.IOException: Broken pipe2021-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সমাধান করা ব্যাকএন্ড সার্ভারের IP অ্যাড্রেস ও পোর্ট নম্বর নির্দেশ করে।- উপরের সমস্যার মেসেজে
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সমস্যা আগে যখন হয়েছিল তখনকার সময়সীমা ও টাইমজোন সংক্রান্ত তথ্য দিন।
আপনি প্রাইভেট ক্লাউড ব্যবহারকারী হলে, নিম্নলিখিত তথ্য দিন:
- অনুরোধ সম্পূর্ণ না হওয়ার ক্ষেত্রে দেখা সম্পূর্ণ সমস্যার মেসেজ
- আপনি যে সংস্থার জন্য
503সমস্যা লক্ষ্য করছেন তার নাম, এনভায়রনমেন্টের নাম ও API প্রক্সি নাম - API Proxy বান্ডেল
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মেসেজ প্রসেসর ও ব্যাকএন্ড সার্ভারে সংগ্রহ করা হয় যখন সমস্যা হয়