আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন। তথ্য
সমস্যার উপসর্গ
API কলের উত্তর হিসেবে ক্লায়েন্ট অ্যাপ্লিকেশন 502 HTTP স্ট্যাটাস কোড সহ এই মেসেজটি পায়:
Bad Gateway
HTTP স্ট্যাটাস কোড 502-এর অর্থ হল, ক্লায়েন্ট ব্যাকএন্ড সার্ভার থেকে সঠিক উত্তর পাচ্ছে না যা আসলে অনুরোধটি সম্পূর্ণ করার কথা।
সমস্যার মেসেজ
ক্লায়েন্ট অ্যাপ্লিকেশন নিম্নলিখিত রেসপন্স কোড পায়:
HTTP/1.1 502 Bad Gateway
এছাড়াও, আপনি নিম্নলিখিত সমস্যার মেসেজ দেখতে পেতে পারেন:
{
"fault": {
"faultstring": "Unexpected EOF at target",
"detail": {
"errorcode": "messaging.adaptors.http.UnexpectedEOFAtTarget"
}
}
}সম্ভাব্য কারণ
502 Bad Gateway Error সমস্যার একটি সাধারণ কারণ হল Unexpected EOF
সমস্যা, যা নিম্নলিখিত কারণে হতে পারে:
| কারণ | বিবরণ | এর জন্য দেওয়া ধাপ |
|---|---|---|
| টার্গেট সার্ভার ভুলভাবে কনফিগার করা হয়েছে | TLS/SSL কানেকশন কাজ করার জন্য টার্গেট সার্ভার সঠিকভাবে কনফিগার করা হয়নি। | এজ পাবলিক ও প্রাইভেট ক্লাউড ব্যবহারকারী |
| ব্যাকএন্ড সার্ভার থেকে EOFException | ব্যাকএন্ড সার্ভার হঠাৎ করে EOF পাঠাতে পারে। | শুধুমাত্র Edge Private Cloud ব্যবহারকারীদের জন্য |
| কানেকশন চালু রাখার টাইমআউট ভুলভাবে কনফিগার করা হয়েছে | Apigee ও ব্যাকএন্ড সার্ভারে 'কিপ অ্যালাইভ' টাইম-আউট ভুলভাবে কনফিগার করা হয়েছে। | এজ পাবলিক ও প্রাইভেট ক্লাউড ব্যবহারকারী |
সাধারণ ডায়াগনসিস ধাপ
সমস্যা নির্ণয় করতে, আপনি নিম্নলিখিত যেকোনও পদ্ধতি ব্যবহার করতে পারেন:
API মনিটরিং
API মনিটরিং ব্যবহার করে সমস্যার ডায়াগনসিস করতে:
API মনিটরিং ব্যবহার করে, আপনি
502 সমস্যাগুলি তদন্ত করতে পারেন, এর জন্য
সমস্যার তদন্ত করুন লিঙ্কে দেওয়া ধাপগুলি অনুসরণ করুন। অর্থাৎ:
- তদন্ত করুন ড্যাশবোর্ডে যান।
- ড্রপ-ডাউন মেনু থেকে স্ট্যাটাস কোড বেছে নিন এবং
502সমস্যা হওয়ার সময় সঠিক সময় সীমা বেছে নেওয়া হয়েছে কিনা তা নিশ্চিত করুন। - আপনি যখন প্রচুর পরিমাণে
502সমস্যা দেখতে পাবেন, তখন ম্যাট্রিক্সের বক্সে ক্লিক করুন। - ডানদিকে,
502সমস্যার জন্য লগ দেখুন বিকল্পে ক্লিক করুন, যা নিচের মতো দেখতে হবে: - Fault Source হল
target - সমস্যার কোড হল
messaging.adaptors.http.UnexpectedEOFAtTarget

এখানে আমরা নিম্নলিখিত তথ্য দেখতে পাই:
এটি থেকে বোঝা যায় যে 502 সমস্যার কারণ হল টার্গেট, কারণ অপ্রত্যাশিত EOF হয়েছে।
এছাড়াও, আরও তদন্তের জন্য 502 ত্রুটির জন্য Request Message ID নোট করে রাখুন।
তদন্ত।
ট্রেস টুল
Trace টুল ব্যবহার করে সমস্যার ডায়াগনসিস করতে:
-
ট্রেস সেশন চালু করুন এবং সমস্যাটি আবার তৈরি করতে API কল করুন
502 Bad Gateway। - কাজ না করা অনুরোধগুলির মধ্যে একটি বেছে নিন এবং ট্রেস পরীক্ষা করুন।
- ট্রেসের বিভিন্ন ফেজ নেভিগেট করুন এবং কোথায় সমস্যা হয়েছে তা খুঁজে বের করুন।
-
নিচে দেখানো ছবির মতো, টার্গেট সার্ভারে অনুরোধ পাঠানোর পরে আপনাকে ব্যর্থতা সংক্রান্ত মেসেজ দেখানো হবে:


-
ট্রেসে AX (Analytics ডেটা রেকর্ড করা হয়েছে) ফেজে X-Apigee.fault-source এবং X-Apigee.fault-code-এর ভ্যালু নির্ধারণ করুন।
X-Apigee.fault-source এবং X-Apigee.fault-code-এর মান যদি নিচে দেওয়া টেবিলে দেখানো মানের সাথে মিলে যায়, তাহলে আপনি নিশ্চিত হতে পারেন যে
502সমস্যাটি টার্গেট সার্ভার থেকে আসছে:রেসপন্স হেডার ভ্যালু X-Apigee.fault-source targetX-Apigee.fault-code messaging.adaptors.http.flow.UnexpectedEOFAtTargetএছাড়াও, আরও তদন্তের জন্য
502সমস্যারX-Apigee.Message-IDনোট নিন ।
NGINX অ্যাক্সেস লগ
NGINX ব্যবহার করে সমস্যার ডায়াগনসিস করতে:
এছাড়াও, 502 স্ট্যাটাস
কোডের কারণ নির্ধারণ করতে, আপনি NGINX অ্যাক্সেস লগ দেখতে পারেন। অতীতে সমস্যা হয়ে থাকলে অথবা সমস্যাটি
আচমকা হলে এবং আপনি UI-তে ট্রেস ক্যাপচার করতে না পারলে এটি বিশেষভাবে উপযোগী। NGINX অ্যাক্সেস লগ থেকে এই তথ্য নির্ধারণ করতে
নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- NGINX অ্যাক্সেস লগ চেক করুন।
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log - নির্দিষ্ট API প্রক্সির জন্য নির্দিষ্ট সময়সীমার মধ্যে হওয়া
502সংক্রান্ত সমস্যা (যদি সমস্যাটি আগে হয়ে থাকে) অথবা এখনও502সংক্রান্ত সমস্যার কারণে ব্যর্থ হওয়া অনুরোধ সার্চ করুন। - কোনও
502সমস্যা থাকলে, টার্গেটUnexpected EOFপাঠানোর কারণে সমস্যা হয়েছে কিনা তা চেক করুন। X-Apigee.fault-source এবং X- Apigee.fault-code-এর ভ্যালু নিচের টেবিলে দেখানো ভ্যালুর সাথে মিলে গেলে,502সমস্যাটি টার্গেট অপ্রত্যাশিতভাবে কানেকশন বন্ধ করে দেওয়ার কারণে হয়েছে:রেসপন্স হেডার ভ্যালু X-Apigee.fault-source targetX-Apigee.fault-code messaging.adaptors.http.flow.UnexpectedEOFAtTargetএখানে একটি নমুনা এন্ট্রি দেওয়া হল যা টার্গেট সার্ভারের কারণে হওয়া
502সমস্যা দেখাচ্ছে:
এছাড়াও, আরও তদন্তের জন্য 502 সমস্যার মেসেজ আইডি নোট করে রাখুন।
কারণ: টার্গেট সার্ভার ভুলভাবে কনফিগার করা হয়েছে
TLS/SSL কানেকশন কাজ করার জন্য টার্গেট সার্ভার সঠিকভাবে কনফিগার করা হয়নি।
ডায়াগনসিস
502সমস্যার মেসেজ আইডি, ফল্ট কোড ও ফল্ট সোর্স নির্ধারণ করতে API মনিটরিং, ট্রেস টুল অথবা NGINX অ্যাক্সেস লগ ব্যবহার করুন।- প্রভাবিত API-এর জন্য UI-তে ট্রেস চালু করুন।
- API অনুরোধ ব্যর্থ হওয়ার ট্রেসে যদি নিম্নলিখিত বিষয়গুলি দেখা যায়:
- টার্গেট ফ্লোয়ের অনুরোধ শুরু হওয়ার সাথে সাথেই
502 Bad Gatewayসমস্যাটি দেখা যায়। error.class-এmessaging.adaptors.http.UnexpectedEOF.দেখানো হয়তাহলে, খুব সম্ভবত ভুল টার্গেট সার্ভার কনফিগারেশনের কারণে এই সমস্যা হয়েছে।
- টার্গেট ফ্লোয়ের অনুরোধ শুরু হওয়ার সাথে সাথেই
- Edge ম্যানেজমেন্ট API কল ব্যবহার করে টার্গেট সার্ভারের সংজ্ঞা পান:
- আপনি পাবলিক ক্লাউড ব্যবহারকারী হলে, এই API ব্যবহার করুন:
curl -v https://api.enterprise.apigee.com/v1/organizations/<orgname>/environments/<envname>/targetservers/<targetservername> -u <username>
- আপনি প্রাইভেট ক্লাউড ব্যবহারকারী হলে, এই API ব্যবহার করুন:
curl -v http://<management-server-host>:<port #>/v1/organizations/<orgname>/environments/<envname>/targetservers/<targetservername> -u <username>
TargetServerসংজ্ঞার নমুনা সংক্রান্ত ত্রুটি:<TargetServer name="target1"> <Host>mocktarget.apigee.net</Host> <Port>443</Port> <IsEnabled>true</IsEnabled> </TargetServer >
- আপনি পাবলিক ক্লাউড ব্যবহারকারী হলে, এই API ব্যবহার করুন:
-
ইলাস্ট্রেশন করা
TargetServerসংজ্ঞাটি একটি সাধারণ ভুল কনফিগারেশনের উদাহরণ যা নিচে ব্যাখ্যা করা হল:ধরে নেওয়া যাক যে টার্গেট সার্ভার
mocktarget.apigee.net, পোর্ট443-এ সুরক্ষিত (HTTPS) কানেকশন গ্রহণ করার জন্য কনফিগার করা হয়েছে। তবে, আপনি যদি টার্গেট সার্ভারের সংজ্ঞা দেখেন, তাহলে এমন কোনও অ্যাট্রিবিউট/ফ্ল্যাগ নেই যা নির্দেশ করে যে এটি সুরক্ষিত কানেকশনের জন্য তৈরি করা হয়েছে। এর ফলে Edge, নির্দিষ্ট টার্গেট সার্ভারে যাওয়া API অনুরোধকে HTTP (সুরক্ষিত নয়) অনুরোধ হিসেবে বিবেচনা করে। তাই Edge এই টার্গেট সার্ভারের সাথে SSL হ্যান্ডশেক প্রসেস শুরু করবে না।যেহেতু টার্গেট সার্ভার
443-এ শুধুমাত্র HTTPS (SSL) অনুরোধ গ্রহণ করার জন্য কনফিগার করা আছে, তাই এটি Edge থেকে আসা অনুরোধ প্রত্যাখ্যান করবে বা কানেকশন বন্ধ করে দেবে। এর ফলে, আপনি মেসেজ প্রসেসরেUnexpectedEOFAtTargetসমস্যা দেখতে পাবেন। মেসেজ প্রসেসর ক্লায়েন্টকে উত্তর হিসেবে502 Bad Gatewayপাঠাবে।
রেজোলিউশন
আপনার প্রয়োজন অনুযায়ী টার্গেট সার্ভার সঠিকভাবে কনফিগার করা হয়েছে কিনা তা সবসময় নিশ্চিত করুন।
উপরের উদাহরণে দেখানো ছবিটির জন্য, আপনি যদি কোনও সুরক্ষিত (HTTPS/SSL) টার্গেট
সার্ভারে অনুরোধ করতে চান, তাহলে আপনাকে enabled ফ্ল্যাগ সেট করা SSLInfo অ্যাট্রিবিউট
true-এ অন্তর্ভুক্ত করতে হবে। টার্গেট এন্ডপয়েন্ট ডেফিনিশনে টার্গেট সার্ভারের জন্য SSLInfo অ্যাট্রিবিউট যোগ করার অনুমতি থাকলেও, কোনও বিভ্রান্তি এড়াতে টার্গেট
সার্ভার ডেফিনিশনের অংশ হিসেবে SSLInfo অ্যাট্রিবিউট যোগ করার পরামর্শ দেওয়া হয়।
- ব্যাকএন্ড পরিষেবার একমুখী SSL কমিউনিকেশন প্রয়োজন হলে, তাহলে:
- আপনাকে
TargetServerডেফিনিশনে TLS/SSL চালু করতে হবে, এর জন্যSSLInfoঅ্যাট্রিবিউট যোগ করতে হবে যেখানেenabledফ্ল্যাগকে নিচে দেখানো মতো true হিসেবে সেট করা হয়েছে:<TargetServer name="mocktarget"> <Host>mocktarget.apigee.net</Host> <Port>443</Port> <IsEnabled>true</IsEnabled> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> </TargetServer> - আপনি Edge-এ টার্গেট সার্ভারের সার্টিফিকেট যাচাই করতে চাইলে, আমাদেরও
নিচে দেখানো উপায়ে ট্রাস্টস্টোর (যেখানে টার্গেট সার্ভারের সার্টিফিকেট আছে) অন্তর্ভুক্ত করতে হবে:
<TargetServer name="mocktarget"> <Host>mocktarget.apigee.net</Host> <Port>443</Port> <IsEnabled>true</IsEnabled> <SSLInfo> <Ciphers/> <ClientAuthEnabled>false</ClientAuthEnabled> <Enabled>true</Enabled> <IgnoreValidationErrors>false</IgnoreValidationErrors> <Protocols/> <TrustStore>mocktarget-truststore</TrustStore> </SSLInfo> </TargetServer>
- আপনাকে
- ব্যাকএন্ড পরিষেবার টু-ওয়ে SSL কমিউনিকেশন প্রয়োজন হলে, তাহলে:
- নিচে দেখানো অনুযায়ী, আপনাকে
ClientAuthEnabled,Keystore,KeyAliasএবংTruststoreফ্ল্যাগ সঠিকভাবে সেট করাSSLInfoঅ্যাট্রিবিউট রাখতে হবে:<TargetServer name="mocktarget"> <IsEnabled>true</IsEnabled> <Host>www.example.com</Host> <Port>443</Port> <SSLInfo> <Ciphers/> <ClientAuthEnabled>true</ClientAuthEnabled> <Enabled>true</Enabled> <IgnoreValidationErrors>false</IgnoreValidationErrors> <KeyAlias>keystore-alias</KeyAlias> <KeyStore>keystore-name</KeyStore> <Protocols/> <TrustStore>truststore-name</TrustStore> </SSLInfo> </TargetServer >
- নিচে দেখানো অনুযায়ী, আপনাকে
রেফারেন্স
ব্যাকএন্ড সার্ভার জুড়ে লোড ব্যালেন্সিং
কারণ: ব্যাকএন্ড সার্ভার থেকে EOFException
ব্যাকএন্ড সার্ভার হঠাৎ করে EOF (ফাইলের শেষ) পাঠাতে পারে।
ডায়াগনসিস
502সমস্যার মেসেজ আইডি, ফল্ট কোড ও ফল্ট সোর্স নির্ধারণ করতে API মনিটরিং, ট্রেস টুল অথবা NGINX অ্যাক্সেস লগ ব্যবহার করুন।- Message Processor লগ চেক করুন
(
/opt/apigee/var/log/edge-message-processor/logs/system.log) এবং নির্দিষ্ট API-এর জন্য আপনার কাছেeof unexpectedআছে কিনা অথবা API অনুরোধের জন্য আপনার কাছে অনন্যmessageidআছে কিনা তা দেখুন, তাহলে আপনি এটি সার্চ করতে পারবেন।মেসেজ প্রসেসর লগ থেকে ব্যতিক্রমী স্ট্যাক ট্রেসের নমুনা
"message": "org:myorg env:test api:api-v1 rev:10 messageid:rrt-1-14707-63403485-19 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : SSLClientChannel[C:193.35.250.192:8443 Remote host:0.0.0.0:50100]@459069 useCount=6 bytesRead=0 bytesWritten=755 age=40107ms lastIO=12832ms .onExceptionRead exception: {} java.io.EOFException: eof unexpected at com.apigee.nio.channels.PatternInputChannel.doRead(PatternInputChannel.java:45) ~[nio-1.0.0.jar:na] at com.apigee.nio.channels.InputChannel.read(InputChannel.java:103) ~[nio-1.0.0.jar:na] at com.apigee.protocol.http.io.MessageReader.onRead(MessageReader.java:79) ~[http-1.0.0.jar:na] at com.apigee.nio.channels.DefaultNIOSupport$DefaultIOChannelHandler.onIO(NIOSupport.java:51) [nio-1.0.0.jar:na] at com.apigee.nio.handlers.NIOThread.run(NIOThread.java:123) [nio-1.0.0.jar:na]"
উপরের উদাহরণে, আপনি দেখতে পাবেন যে মেসেজ প্রসেসর যখন ব্যাকএন্ড সার্ভার থেকে উত্তর পড়ার চেষ্টা করছে, তখন
java.io.EOFException: eof unexpectedসমস্যা হয়েছে। এই ব্যতিক্রমটি ফাইলের শেষ (EOF) বা স্ট্রিমের শেষকে নির্দেশ করে যা অপ্রত্যাশিতভাবে পৌঁছে গেছে।অর্থাৎ, মেসেজ প্রসেসর ব্যাকএন্ড সার্ভারে API অনুরোধ পাঠিয়েছে এবং উত্তর পাওয়ার জন্য অপেক্ষা করছে অথবা উত্তর পড়ছে। তবে, মেসেজ প্রসেসর উত্তর পাওয়ার বা সম্পূর্ণ উত্তর পড়ার আগেই ব্যাকএন্ড সার্ভার হঠাৎ করে কানেকশন বন্ধ করে দেয়।
- আপনার ব্যাকএন্ড সার্ভার লগ চেক করে দেখুন যে কোনও সমস্যা বা তথ্য আছে কিনা যা ব্যাকএন্ড সার্ভারকে হঠাৎ করে কানেকশন বন্ধ করে দিতে বাধ্য করেছে। আপনি কোনও সমস্যা/তথ্য খুঁজে পেলে, সমাধান বিভাগে যান এবং আপনার ব্যাকএন্ড সার্ভারে সমস্যাটি যথাযথভাবে সমাধান করুন।
- আপনার ব্যাকএন্ড সার্ভারে কোনও সমস্যা বা তথ্য খুঁজে না পেলে, মেসেজ প্রসেসরের
tcpdumpআউটপুট সংগ্রহ করুন:- আপনার ব্যাকএন্ড সার্ভার হোস্টের একটি IP অ্যাড্রেস থাকলে, নিম্নলিখিত কমান্ড ব্যবহার করুন:
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
- আপনার ব্যাকএন্ড সার্ভার হোস্টের একাধিক IP অ্যাড্রেস থাকলে, নিম্নলিখিত কমান্ড ব্যবহার করুন:
মেসেজ প্রসেসরের IP অ্যাড্রেস ব্যবহার করুন।tcpdump -i any -s 0 host HOSTNAME -w FILE_NAME
সাধারণত, এই সমস্যাটি ঘটে কারণ মেসেজ প্রসেসর ব্যাকএন্ড সার্ভারে অনুরোধ পাঠানোর সাথে সাথেই ব্যাকএন্ড সার্ভার
[FIN,ACK]দিয়ে উত্তর দেয়।
- আপনার ব্যাকএন্ড সার্ভার হোস্টের একটি IP অ্যাড্রেস থাকলে, নিম্নলিখিত কমান্ড ব্যবহার করুন:
-
নিচের
tcpdumpউদাহরণটি দেখুন।502 Bad Gateway Error(UnexpectedEOFAtTarget) হলেtcpdumpস্যাম্পেল নেওয়া হয়েছে
- TCPDump আউটপুট থেকে, আপনি ইভেন্টের নিম্নলিখিত ক্রম লক্ষ্য করেছেন:
- প্যাকেট
985-এ, মেসেজ প্রসেসর ব্যাকএন্ড সার্ভারে API অনুরোধ পাঠায়। - প্যাকেট
986-এ, ব্যাকএন্ড সার্ভার সঙ্গে সঙ্গে[FIN,ACK]দিয়ে উত্তর দেয়। - প্যাকেট
987-এ, মেসেজ প্রসেসর ব্যাকএন্ড সার্ভারকে[FIN,ACK]দিয়ে উত্তর দেয়। - অবশেষে,
[ACK]এবং[RST]-এর মাধ্যমে দুই দিক থেকেই কানেকশন বন্ধ হয়ে যায়। - যেহেতু ব্যাকএন্ড সার্ভার
[FIN,ACK]পাঠায়, তাই আপনি Message Processor-এ ব্যতিক্রমjava.io.EOFException: eof unexpectedব্যতিক্রম পান।
- প্যাকেট
- ব্যাকএন্ড সার্ভারে নেটওয়ার্ক সংক্রান্ত সমস্যা হলে এটি হতে পারে। এই সমস্যা আরও খতিয়ে দেখতে আপনার নেটওয়ার্ক অপারেশন টিমকে কাজে লাগান।
রেজোলিউশন
ব্যাকএন্ড সার্ভারে যথাযথভাবে সমস্যার সমাধান করুন।
সমস্যাটি থেকে গেলে এবং 502 Bad Gateway Error-এর সমস্যা সমাধানের জন্য আপনার সাহায্যের প্রয়োজন হলে অথবা আপনি
যদি মনে করেন যে এটি Edge-এর মধ্যে কোনও সমস্যা, তাহলে Apigee Edge সহায়তা টিমের সাথে যোগাযোগ করুন।
কারণ: ভুলভাবে কনফিগার করা 'কিপ অ্যালাইভ' টাইমআউট
502 সমস্যার কারণ এটি কিনা তা ডায়াগনসিস করার আগে, নিম্নলিখিত
বিষয়গুলি পড়ে দেখুন।
Apigee-তে পারসিস্ট্যান্ট কানেকশন
টার্গেট ব্যাকএন্ড সার্ভারের সাথে যোগাযোগ করার সময় Apigee ডিফল্ট হিসেবে (এবং HTTP/1.1 স্ট্যান্ডার্ড মেনে) পারসিস্টেন্ট কানেকশন
ব্যবহার করে। আগে থেকেই প্রতিষ্ঠিত TCP এবং (প্রযোজ্য হলে) TLS/SSL কানেকশন আবার ব্যবহার করার অনুমতি দিয়ে, পারসিস্টেন্ট কানেকশন পারফর্ম্যান্স বাড়াতে পারে। এর ফলে
লেটেন্সি ওভারহেড কমে যায়। কানেকশন কতক্ষণ ধরে বজায় রাখতে হবে তা একটি প্রপার্টির মাধ্যমে কন্ট্রোল করা হয়
কিপ অ্যালাইভ টাইমআউট (keepalive.timeout.millis)।
ব্যাকএন্ড সার্ভার ও Apigee মেসেজ প্রসেসর, একে অপরের সাথে কানেকশন চালু রাখতে কিপ-অ্যালাইভ টাইমআউট ব্যবহার করে। কিপ অ্যালাইভ টাইমআউট সময়ের মধ্যে কোনও ডেটা না পেলে, ব্যাকএন্ড সার্ভার বা মেসেজ প্রসেসর একে অপরের সাথে কানেকশন বন্ধ করে দিতে পারে।
Apigee-তে মেসেজ প্রসেসরে ডিফল্ট হিসেবে ডিপ্লয় করা API প্রক্সিতে, 60sওভাররাইড না করা পর্যন্ত, কিপ-অ্যালাইভ টাইমআউট সেট করা থাকে। 60s-এর জন্য কোনও ডেটা না পেলে, Apigee ব্যাকএন্ড সার্ভারের সাথে কানেকশন
বন্ধ করে দেবে। এছাড়াও, ব্যাকএন্ড সার্ভার একটি কিপ-অ্যালাইভ টাইমআউট বজায় রাখবে,
এবং এটি শেষ হয়ে গেলে, ব্যাকএন্ড সার্ভার মেসেজ প্রসেসরের সাথে কানেকশন বন্ধ করে দেবে।
সঠিক নয় এমন 'কিপ অ্যালাইভ' টাইমআউট কনফিগারেশনের প্রভাব
Apigee বা ব্যাকএন্ড সার্ভার, কোনওটিতেই যদি ভুল 'কিপ-অ্যালাইভ' টাইমআউট কনফিগার করা থাকে, তাহলে
এর ফলে রেস কন্ডিশন তৈরি হয় এবং এর ফলে ব্যাকএন্ড সার্ভার কোনও রিসোর্সের অনুরোধের উত্তরে অপ্রত্যাশিত End Of File
(FIN) পাঠায়।
যেমন, API প্রক্সি বা মেসেজ
প্রসেসরের মধ্যে যদি কিপ-অ্যালাইভ টাইমআউট কনফিগার করা থাকে এবং তার ভ্যালু যদি আপস্ট্রিম ব্যাকএন্ড সার্ভারের টাইমআউটের সমান বা তার থেকে বেশি হয়, তাহলে
নিম্নলিখিত রেস কন্ডিশন হতে পারে। অর্থাৎ, ব্যাকএন্ড সার্ভারের কিপ-অ্যালাইভ টাইমআউটের থ্রেশহোল্ডের খুব কাছাকাছি সময় পর্যন্ত মেসেজ প্রসেসর কোনও
ডেটা না পেলে, একটি অনুরোধ
আসে এবং আগে থেকে থাকা কানেকশন ব্যবহার করে ব্যাকএন্ড সার্ভারে পাঠানো হয়। এর ফলে
502 Bad Gateway হতে পারে, নিচে এর কারণ ব্যাখ্যা করা হল:
- ধরা যাক, মেসেজ প্রসেসর ও ব্যাকএন্ড সার্ভার দু'টিতেই 'কিপ অ্যালাইভ' টাইমআউট ৬০ সেকেন্ড হিসেবে সেট করা আছে এবং নির্দিষ্ট মেসেজ প্রসেসর আগের অনুরোধটি প্রসেস করার পরে ৫৯ সেকেন্ড পর্যন্ত কোনও নতুন অনুরোধ আসেনি।
- মেসেজ প্রসেসর এগিয়ে যায় এবং ৫৯ সেকেন্ডে আসা অনুরোধটি প্রসেস করে আগেকার কানেকশন ব্যবহার করে (কারণ কিপ অ্যালাইভ টাইমআউট এখনও শেষ হয়নি) এবং ব্যাকএন্ড সার্ভারে অনুরোধ পাঠায়।
- তবে, অনুরোধটি ব্যাকএন্ড সার্ভারে পৌঁছানোর আগেই ব্যাকএন্ড সার্ভারে কিপ-অ্যালাইভ টাইমআউট থ্রেশহোল্ড অতিক্রম করে গেছে।
- মেসেজ প্রসেসরের রিসোর্সের অনুরোধ ইন-ফ্লাইট আছে, কিন্তু ব্যাকএন্ড সার্ভার
মেসেজ প্রসেসরকে
FINপ্যাকেট পাঠিয়ে কানেকশন বন্ধ করার চেষ্টা করে। - মেসেজ প্রসেসর ডেটা পাওয়ার জন্য অপেক্ষা করার সময়, পরিবর্তে
অপ্রত্যাশিত
FINপায় এবং কানেকশন বন্ধ হয়ে যায়। - এর ফলে
Unexpected EOFএবং তারপরে মেসেজ প্রসেসর ক্লায়েন্টকে502রিটার্ন করে।
এই ক্ষেত্রে, আমরা লক্ষ্য করেছি যে 502 সমস্যাটি হয়েছে কারণ মেসেজ প্রসেসর এবং ব্যাকএন্ড সার্ভার, দু'টিতেই একই কিপ অ্যালাইভ টাইমআউট
ভ্যালু ৬০ সেকেন্ড কনফিগার করা ছিল। একইভাবে,
মেসেজ
প্রসেসরের জন্য ব্যাকএন্ড সার্ভারের তুলনায় বেশি ভ্যালু কনফিগার করা থাকলে, এই সমস্যা হতে পারে।
ডায়াগনসিস
- আপনি পাবলিক ক্লাউড ব্যবহারকারী হলে:
- API মনিটরিং বা ট্রেস টুল ব্যবহার করুন (যেমন
সাধারণ ডায়াগনসিস ধাপ-এ ব্যাখ্যা করা হয়েছে) এবং যাচাই করুন যে আপনার কাছে নিম্নলিখিত দুটি
সেটিংসই আছে:
- সমস্যার কোড:
messaging.adaptors.http.flow.UnexpectedEOFAtTarget - সমস্যার সোর্স:
target
- সমস্যার কোড:
- আরও তদন্ত করতে tcpdump ব্যবহার করা লিঙ্কে যান।
- API মনিটরিং বা ট্রেস টুল ব্যবহার করুন (যেমন
সাধারণ ডায়াগনসিস ধাপ-এ ব্যাখ্যা করা হয়েছে) এবং যাচাই করুন যে আপনার কাছে নিম্নলিখিত দুটি
সেটিংসই আছে:
- আপনি প্রাইভেট ক্লাউড ব্যবহারকারী হলে:
502সমস্যার জন্য মেসেজ আইডি, ফল্ট কোড এবং ফল্ট সোর্স নির্ধারণ করতে ট্রেস টুল বা NGINX অ্যাক্সেস লগ ব্যবহার করুন।- Message Processor log-এ মেসেজ আইডি সার্চ করুন
(/opt/apigee/var/log/edge-message-processor/logs/system.log)। - আপনি নিচে দেখানো
java.io.EOFEXception: eof unexpectedদেখতে পাবেন:2020-11-22 14:42:39,917 org:myorg env:prod api:myproxy rev:1 messageid:myorg-opdk-dc1-node2-17812-56001-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:51.254.225.9:80 Local:10.154.0.61:35326]@12972 useCount=7 bytesRead=0 bytesWritten=159 age=7872ms lastIO=479ms isOpen=true.onExceptionRead exception: {} java.io.EOFException: eof unexpected at com.apigee.nio.channels.PatternInputChannel.doRead(PatternInputChannel.java:45) at com.apigee.nio.channels.InputChannel.read(InputChannel.java:103) at com.apigee.protocol.http.io.MessageReader.onRead(MessageReader.java:80) at com.apigee.nio.channels.DefaultNIOSupport$DefaultIOChannelHandler.onIO(NIOSupport.java:51) at com.apigee.nio.handlers.NIOThread.run(NIOThread.java:220)
- সমস্যা
java.io.EOFException: eof unexpectedথেকে বোঝা যায় যে মেসেজ প্রসেসর একটিEOFপেয়েছে, যখন এটি ব্যাকএন্ড সার্ভার থেকে উত্তর পাওয়ার জন্য অপেক্ষা করছিল। - উপরের সমস্যা সংক্রান্ত মেসেজে
useCount=7অ্যাট্রিবিউট থেকে বোঝা যায় যে মেসেজ প্রসেসর এই কানেকশনটি প্রায় সাতবার আবার ব্যবহার করেছে এবংbytesWritten=159অ্যাট্রিবিউট থেকে বোঝা যায় যে মেসেজ প্রসেসর ব্যাকএন্ড সার্ভারে159বাইটের অনুরোধ পেলোড পাঠিয়েছে। তবে, অপ্রত্যাশিতEOFহওয়ার সময় এটি শূন্য বাইট পেয়েছে। -
এটি থেকে বোঝা যায় যে মেসেজ প্রসেসর একই কানেকশন একাধিকবার ব্যবহার করেছে, এবং এই ক্ষেত্রে এটি ডেটা পাঠিয়েছে, কিন্তু কিছুক্ষণ পরেই কোনও ডেটা পাওয়ার আগে একটি
EOFপায়। এর অর্থ হল, ব্যাকএন্ড সার্ভারের কিপ-অ্যালাইভ টাইমআউট API প্রক্সিতে সেট করা টাইমআউটের সমান বা তার থেকে কম হওয়ার সম্ভাবনা বেশি।নিচে যেভাবে ব্যাখ্যা করা হয়েছে, সেই অনুযায়ী
tcpdump-এর সাহায্যে আপনি আরও তদন্ত করতে পারবেন।
tcpdump ব্যবহার করা
- নিম্নলিখিত কমান্ডের সাহায্যে ব্যাকএন্ড সার্ভারে
tcpdumpক্যাপচার করুন:tcpdump -i any -s 0 host MP_IP_Address -w File_Name
tcpdumpক্যাপচার করা বিশ্লেষণ করুন:tcpdump আউটপুটের নমুনা এখানে দেওয়া হল:

উপরের নমুনা
tcpdump-এ, আপনি নিম্নলিখিত বিষয়গুলি দেখতে পাবেন:- প্যাকেট
5992,-এ ব্যাকএন্ড সার্ভার একটিGETঅনুরোধ পেয়েছে। - প্যাকেট
6064-এ, এটি200 OK.দিয়ে উত্তর দেয় - প্যাকেট
6084-এ, ব্যাকএন্ড সার্ভার আরেকটিGETঅনুরোধ পেয়েছে। - প্যাকেট
6154-এ, এটি200 OKদিয়ে উত্তর দেয়। - প্যাকেট
6228-এ, ব্যাকএন্ড সার্ভার একটি থার্ডGETঅনুরোধ পেয়েছে। - এইবার, ব্যাকএন্ড সার্ভার মেসেজ প্রসেসরকে
FIN, ACKরিটার্ন করে (প্যাকেট6285) যা কানেকশন বন্ধ করার প্রসেস শুরু করে।
এই উদাহরণে একই কানেকশন দু'বার সফলভাবে আবার ব্যবহার করা হয়েছে, কিন্তু তৃতীয় অনুরোধে, ব্যাকএন্ড সার্ভার কানেকশন বন্ধ করার প্রসেস শুরু করে, যেখানে মেসেজ প্রসেসর ব্যাকএন্ড সার্ভার থেকে ডেটা পাওয়ার জন্য অপেক্ষা করছে। এর থেকে বোঝা যায় যে ব্যাকএন্ড সার্ভারের কিপ অ্যালাইভ টাইমআউট সম্ভবত API প্রক্সিতে সেট করা ভ্যালুর সমান বা তার থেকে কম। এটি যাচাই করতে, Apigee ও ব্যাকএন্ড সার্ভারে 'কিপ-অ্যালাইভ' টাইমআউট তুলনা করুন দেখুন।
- প্যাকেট
Apigee এবং ব্যাকএন্ড সার্ভারে 'কিপ অ্যালাইভ' টাইমআউটের তুলনা করা
- ডিফল্ট হিসেবে, Apigee, 'কিপ অ্যালাইভ' টাইমআউট প্রপার্টির জন্য ৬০ সেকেন্ডের ভ্যালু ব্যবহার করে।
-
তবে, এটি সম্ভব যে আপনি API প্রক্সিতে ডিফল্ট মান ওভাররাইড করেছেন।
502সমস্যা দেখাচ্ছে এমন API প্রক্সি ফেল করার নির্দিষ্টTargetEndpointসংজ্ঞা চেক করে আপনি এটি যাচাই করতে পারবেন।TargetEndpoint কনফিগারেশনের নমুনা:
<TargetEndpoint name="default"> <HTTPTargetConnection> <URL>https://mocktarget.apigee.net/json</URL> <Properties> <Property name="keepalive.timeout.millis">30000</Property> </Properties> </HTTPTargetConnection> </TargetEndpoint>উপরের উদাহরণে, ৩০ সেকেন্ড (
30000মিলিসেকেন্ড) ভ্যালু দিয়ে 'কিপ অ্যালাইভ টাইমআউট' প্রপার্টি ওভাররাইড করা হয়েছে। - এরপরে, আপনার ব্যাকএন্ড সার্ভারে কনফিগার করা 'কিপ অ্যালাইভ' টাইমআউট প্রপার্টি চেক করুন। ধরা যাক,
আপনার ব্যাকএন্ড সার্ভার
25 secondsভ্যালু দিয়ে কনফিগার করা আছে। - আপনি যদি নির্ধারণ করেন যে Apigee-তে কিপ-অ্যালাইভ টাইমআউট প্রপার্টির ভ্যালু
উপরের উদাহরণে দেখানো ব্যাকএন্ড সার্ভারে কিপ-অ্যালাইভ টাইমআউট প্রপার্টির ভ্যালুর
চেয়ে বেশি, তাহলে
502সমস্যার কারণ এটিই।
রেজোলিউশন
ব্যাকএন্ড সার্ভারের তুলনায় Apigee-তে (API প্রক্সি এবং মেসেজ প্রসেসর কম্পোনেন্ট) 'কিপ অ্যালাইভ টাইমআউট' প্রপার্টির মান সবসময় কম থাকে কিনা তা নিশ্চিত করুন।
- ব্যাকএন্ড সার্ভারে 'কিপ অ্যালাইভ' টাইমআউটের জন্য সেট করা ভ্যালু নির্ধারণ করুন।
- API প্রক্সি বা মেসেজ প্রসেসরে কিপ অ্যালাইভ টাইমআউট প্রপার্টির জন্য উপযুক্ত ভ্যালু কনফিগার করুন, যাতে কিপ অ্যালাইভ টাইমআউট প্রপার্টির ভ্যালু ব্যাকএন্ড সার্ভারে সেট করা ভ্যালুর থেকে কম হয়। এটি করার জন্য মেসেজ প্রসেসরে কিপ অ্যালাইভ টাইমআউট কনফিগার করা লিঙ্কে গিয়ে ধাপে ধাপে নির্দেশাবলী অনুসরণ করুন।
এর পরেও সমস্যা থেকে গেলে, রোগ নির্ণয় সংক্রান্ত তথ্য অবশ্যই সংগ্রহ করতে হবে লিঙ্কে যান।
পেশাদার পদ্ধতি
এই ধরনের রেস কন্ডিশন ও
502 সমস্যা এড়াতে, ডাউনস্ট্রিম কম্পোনেন্টগুলিতে আপস্ট্রিম সার্ভারের তুলনায় সবসময় কম কিপ অ্যালাইভ টাইমআউট
থ্রেশহোল্ড কনফিগার করার জন্য জোরদার পরামর্শ দেওয়া হয়। প্রতিটি ডাউনস্ট্রিম হপ, প্রতিটি আপস্ট্রিম হপের থেকে কম হতে হবে। Apigee
Edge-এ, নিম্নলিখিত নির্দেশিকা ব্যবহার করা ভাল:
- ক্লায়েন্ট কিপ-অ্যালাইভ টাইমআউট, এজ রাউটার কিপ-অ্যালাইভ টাইমআউটের থেকে কম হতে হবে।
- Edge রাউটারের কিপ-অ্যালাইভ টাইমআউট, মেসেজ প্রসেসরের কিপ-অ্যালাইভ টাইমআউটের থেকে কম হতে হবে।
- মেসেজ প্রসেসর কিপ-অ্যালাইভ টাইমআউটকে টার্গেট সার্ভার কিপ-অ্যালাইভ টাইমআউটের থেকে কম হতে হবে।
- Apigee-এর আগে বা পরে অন্য কোনও হপ থাকলে, একই নিয়ম প্রযোজ্য হবে। আপস্ট্রিমের সাথে কানেকশন বন্ধ করার দায়িত্ব সবসময় ডাউনস্ট্রিম ক্লায়েন্টের উপর ছেড়ে দেওয়া উচিত।
অবশ্যই ডায়াগনস্টিক তথ্য সংগ্রহ করতে হবে
উপরে উল্লেখ করা নির্দেশাবলী অনুসরণ করার পরেও সমস্যাটি থেকে গেলে, নিম্নলিখিত ডায়াগনস্টিক তথ্য সংগ্রহ করুন এবং তারপরে Apigee Edge সহায়তা টিমের সাথে যোগাযোগ করুন।
আপনি পাবলিক ক্লাউড ব্যবহারকারী হলে, নিম্নলিখিত তথ্য প্রদান করুন:
- সংস্থার নাম
- পরিবেশের নাম
- API প্রক্সির নাম
502সমস্যাটি আবার তৈরি করতেcurlকমান্ডটি সম্পূর্ণ করুন502 Bad Gateway - Unexpected EOFসমস্যা সহ অনুরোধ থাকা ট্রেস ফাইল502সমস্যা বর্তমানে না হয়ে থাকলে,502সমস্যা আগে যখন হয়েছিল তখনকার সময়সীমা ও টাইমজোন সংক্রান্ত তথ্য দিন।
আপনি প্রাইভেট ক্লাউড ব্যবহারকারী হলে, নিম্নলিখিত তথ্য দিন:
- অনুরোধ সম্পূর্ণ না হওয়ার ক্ষেত্রে দেখা সম্পূর্ণ সমস্যার মেসেজ
- আপনি যে সংস্থার জন্য
502সমস্যা লক্ষ্য করছেন তার নাম, এনভায়রনমেন্টের নাম ও API প্রক্সি নাম - API Proxy বান্ডেল
502 Bad Gateway - Unexpected EOFসমস্যা সহ অনুরোধ থাকা ট্রেস ফাইল- NGINX অ্যাক্সেস লগ
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log - মেসেজ প্রসেসর লগ
/opt/apigee/var/log/edge-message-processor/logs/system.log 502সমস্যা হওয়ার সময়সীমা ও টাইমজোন সংক্রান্ত তথ্যTcpdumpsমেসেজ প্রসেসর বা ব্যাকএন্ড সার্ভার অথবা দু'টিতেই সংগ্রহ করা হয়, যখন সমস্যা হয়েছিল