আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন। তথ্য
সমস্যার উপসর্গ
API কলের উত্তর হিসেবে ক্লায়েন্ট অ্যাপ্লিকেশন 502 Bad Gateway HTTP স্ট্যাটাস কোড পায়, যার সাথে
protocol.http.TooBigLine সমস্যা কোড থাকে।
সমস্যা সংক্রান্ত মেসেজ
ক্লায়েন্ট অ্যাপ্লিকেশন নিম্নলিখিত রেসপন্স কোড পায়:
HTTP/1.1 502 Bad Gateway
এছাড়াও, আপনি নিম্নলিখিত সমস্যার মেসেজ দেখতে পেতে পারেন:
{
"fault":{
"faultstring":"response line size exceeding 2,048",
"detail":{
"errorcode":"protocol.http.TooBigLine"
}
}
}সম্ভাব্য কারণ
HTTP উত্তরের অংশ হিসেবে টার্গেট/ব্যাকএন্ড সার্ভার Apigee Edge-এ যে Response-Line পাঠায়, সেটির সাইজ যদি অনুমোদিত সর্বাধিক সীমা অতিক্রম করে যায়, তাহলে Apigee Edge-এ এই সমস্যা হয়।
এই সমস্যার সম্ভাব্য কারণগুলি দেখার আগে, Response-Line কী এবং এর সাইজ কীভাবে চেক করতে হয় তা বুঝে নেওয়া যাক।
উত্তর-লাইন বোঝা
একটি সাধারণ HTTP উত্তরে তিনটি অংশ থাকে:
- স্ট্যাটাস-লাইন (Apigee-তে রেসপন্স-লাইন হিসেবে উল্লেখ করা হয়)
- ( HTTP হেডারের সেট )
- [ Body ]
Response-Line তিনটি অংশ নিয়ে গঠিত: প্রোটোকল ভার্সন, তারপরে সংখ্যাসূচক স্ট্যাটাস কোড এবং এর সম্পর্কিত টেক্সচুয়াল বাক্যাংশ, যেমন নিচে দেখানো হয়েছে:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
টার্গেট/ব্যাকএন্ড সার্ভার অ্যাপ্লিকেশন কোনও HTTP উত্তর পাঠালে, প্রথম লাইনটি হল
যা উপরে বর্ণিত উত্তর-লাইন দেখায়। এর পরে
হেডার ও উত্তর বডি/পে-লোড থাকে। নিচে দেওয়া নমুনা স্ক্রিনশটে একটি সাধারণ
curl অনুরোধ, অনুরোধ অংশ ও উত্তর অংশ (সাথে
উত্তর-লাইন) দেখানো হয়েছে।
উত্তর-লাইনের সাইজ বোঝা
উপরে আলোচনা করা নমুনায়, উত্তরের শুরু লাইন (প্রথম লাইন) এছাড়াও উত্তর-লাইন হিসেবে উল্লেখ করা হয়েছে, যা নিচে দেওয়া হল:
HTTP/1.1 200 OK
এই Response-Line-এর সাইজ
~15 bytesকারণ এতে15 ASCII charactersআছে। যেহেতু এটি Apigee Edge-এ অনুমোদিত সীমার মধ্যে, তাই Apigee Edge কোনও ত্রুটি ছাড়াই ক্লায়েন্টে উত্তরটি ফেরত পাঠায়।- একইভাবে, উপরে দেখানো সমস্যার মেসেজে
faultstringলক্ষ্য করলে, এতে"response line size exceeding 2,048"আছে। এটি থেকে বোঝা যায় যে টার্গেট/ব্যাকএন্ড সার্ভারের পাঠানো HTTP রেসপন্সের মধ্যে থাকা Response-Line ২,০৪৮ বাইটের সীমা অতিক্রম করেছে।
বড় উত্তর-লাইন বোঝা
স্ট্যাটাস-লাইন (এখানে রেসপন্স-লাইন হিসেবে উল্লেখ করা হয়েছে) এবং সাধারণ HTTP অনুরোধ ও উত্তরের সংজ্ঞা অনুযায়ী, সাইজ Apigee Edge-এ নির্ধারিত ডিফল্ট সীমা ২ কেবির থেকে অনেক ছোট হবে, তাই আমরা হয়ত সীমা অতিক্রম করব না। তবে, এখানে কিছু সম্ভাব্য পরিস্থিতি দেওয়া হল যেখানে আপনি এই সীমা অতিক্রম করতে পারেন:
- টার্গেট/ব্যাকএন্ড সার্ভার HTTP সিস্টেম নয়। এটি HTTP উত্তর ছাড়া অন্য কোনও উত্তর দিতে পারে।
- টার্গেট/ব্যাকএন্ড সার্ভারে সমস্যা আছে এবং HTTP উত্তরের অংশ হিসেবে একটি দীর্ঘ Response-Line পাঠায়।
এই বিষয়ে আরও জানতে প্রোটোকল.http.TooBigLine, "response line size exceeding 2,048 দেখুন।
সমস্যার সম্ভাব্য কারণগুলি এখানে দেওয়া হল:
| কারণ | বিবরণ | এর জন্য প্রযোজ্য সমস্যার সমাধান সংক্রান্ত নির্দেশাবলী |
|---|---|---|
| উত্তর-লাইনের সাইজ অনুমোদিত সীমার থেকে বেশি | Apigee Edge-এ HTTP রেসপন্স হিসেবে টার্গেট/ব্যাকএন্ড সার্ভারের পাঠানো Response-Line-এর সাইজ Apigee Edge-এ অনুমোদিত সীমার চেয়ে বেশি | এজ পাবলিক ও প্রাইভেট ক্লাউড ব্যবহারকারী |
সাধারণ ডায়াগনসিস ধাপ
এই সমস্যা ডায়াগনসিস করতে নিম্নলিখিত টুল/টেকনিকের মধ্যে একটি ব্যবহার করুন:
API মনিটরিং
API মনিটরিং ব্যবহার করে সমস্যার ডায়াগনসিস করতে:
- Apigee Edge UI-তে সাইন-ইন করুন উপযুক্ত ভূমিকা সহ ব্যবহারকারী হিসেবে।
যে প্রতিষ্ঠানে সমস্যাটি তদন্ত করতে চান সেটিতে পরিবর্তন করুন।
- বিশ্লেষণ করুন > API মনিটরিং > তদন্ত করুন পৃষ্ঠায় নেভিগেট করুন।
- আপনি যে নির্দিষ্ট সময়সীমার মধ্যে সমস্যাটি লক্ষ্য করেছেন সেটি বেছে নিন।
- ফল্ট কোড আরও নির্দিষ্ট করে জানতে, আপনি প্রক্সি ফিল্টার বেছে নিতে পারেন।
- সময় অনুযায়ী সমস্যার কোড প্লট করুন।
এমন একটি সেল বেছে নিন যেখানে
protocol.http.TooBigLineফল্ট কোডটি নিচে দেখানো মতো আছে:
আপনি নিচে দেখানো
protocol.http.TooBigLineফল্ট কোড সংক্রান্ত তথ্য দেখতে পাবেন:
লগ দেখুন বিকল্পে ক্লিক করুন এবং ব্যর্থ অনুরোধের সারিটি বড় করে দেখুন।
- লগ উইন্ডো থেকে, নিম্নলিখিত বিবরণ নোট করুন:
- স্ট্যাটাস কোড:
502 - সমস্যার সোর্স:
target - সমস্যার কোড:
protocol.http.TooBigLine.
- স্ট্যাটাস কোড:
- Fault Source-এর ভ্যালু
targetএবং Fault Code-এর ভ্যালুprotocol.http.TooBigLineহলে, এর অর্থ হল যে টার্গেট/ ব্যাকএন্ড সার্ভারের HTTP রেসপন্স-লাইনের সাইজ, অনুমোদিত সর্বাধিক সীমার থেকে বেশি Apigee Edge.
ট্রেস টুল
- ট্রেস সেশন চালু করুন
এবং এগুলির মধ্যে একটি:
502 Bad Gatewayসমস্যার জন্য অপেক্ষা করুন। অথবা- আপনি যদি সমস্যাটি আবার তৈরি করতে পারেন, তাহলে API কল করুন এবং
502 Bad Gatewayসমস্যাটি আবার তৈরি করুন।
- কাজ না করা অনুরোধগুলির মধ্যে একটি বেছে নিন এবং ট্রেস পরীক্ষা করুন।
- ট্রেসের বিভিন্ন ফেজ নেভিগেট করুন এবং কোথায় সমস্যা হয়েছে তা খুঁজে বের করুন।
আপনি সাধারণত টার্গেট সার্ভারে অনুরোধ পাঠানো হয়েছে ধাপের ঠিক পরে
flowinfoসমস্যা দেখতে পাবেন, যেমন নিচে দেখানো হয়েছে:
ট্রেস থেকে পাওয়া ত্রুটির মানগুলি নোট করুন:
- সমস্যা:
response line exceeding 2,048 - error.class:
com.apigee.errors.http.server.BadGateway
এর থেকে বোঝা যায় যে Apigee Edge (Message Processor component) ব্যাকএন্ড সার্ভার থেকে উত্তর পাওয়ার সাথে সাথেই সমস্যাটি দেখায়, কারণ উত্তর-লাইনের সাইজ অনুমোদিত সীমা ছাড়িয়ে গেছে।
- সমস্যা:
নিচে দেখানো ক্লায়েন্টকে পাঠানো উত্তর ধাপে আপনি ক্লায়েন্টকে পাঠানো সমস্যা সংক্রান্ত মেসেজ দেখতে পাবেন:
- ট্রেস থেকে পাওয়া ত্রুটির ভ্যালু নোট করুন:
- সমস্যা:
502 Bad Gateway. - সমস্যা সংক্রান্ত কন্টেন্ট:
{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
- সমস্যা:
এছাড়াও, আপনি trace-এ AX (Analytics Data Recorded) ফেজে নেভিগেট করতে পারেন এবং সমস্যার বিবরণ দেখতে সেটিতে ক্লিক করতে পারেন।
নিম্নলিখিত মানগুলি মনে রাখবেন:
অনুরোধের হেডার ভ্যালু X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source targetসমস্যা সংক্রান্ত কন্টেন্ট : মূল টেক্সট {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
NGINX
NGINX অ্যাক্সেস লগ ব্যবহার করে সমস্যার ডায়াগনসিস করতে:
- আপনি প্রাইভেট ক্লাউড ব্যবহারকারী হলে, HTTP
502সমস্যার ব্যাপারে মূল তথ্য নির্ধারণ করতে আপনি NGINX অ্যাক্সেস লগ ব্যবহার করতে পারবেন। NGINX অ্যাক্সেস লগ চেক করুন:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logকোথায়: ORG, ENV ও PORT#-এর জায়গায় আসল ভ্যালু বসাতে হবে।
- নির্দিষ্ট সময়সীমার মধ্যে কোনও
502সমস্যা হয়েছে কিনা তা সার্চ করে দেখুন (যদি সমস্যাটি আগে হয়ে থাকে) অথবা এখনও কোনও অনুরোধ502সহ ব্যর্থ হচ্ছে কিনা তা দেখুন। আপনি যদি X-Apigee-fault-code
protocol.http.TooBigLine-এর ভ্যালুর সাথে ম্যাচ করা502কোনও সমস্যা খুঁজে পান, তাহলে X-Apigee-fault-source-এর ভ্যালু নির্ধারণ করুন।
NGINX অ্যাক্সেস লগ থেকে নেওয়া উপরের নমুনা এন্ট্রিতে X- Apigee-fault-code ও X-Apigee-fault-source:-এর জন্য নিম্নলিখিত ভ্যালু আছে:
রেসপন্স হেডার ভ্যালু X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source target
কারণ: উত্তর-লাইনের সাইজ অনুমোদিত সীমার থেকে বেশি
ডায়াগনসিস
- API মনিটরিং, ট্রেস টুল বা NGINX অ্যাক্সেস লগ ব্যবহার করে দেখা সমস্যার সমস্যার কোড ও সমস্যার সোর্স নির্ধারণ করুন, যা সমস্যার সাধারণ ডায়াগনসিস ধাপ-এ ব্যাখ্যা করা হয়েছে।
- সমস্যার সোর্স-এর ভ্যালু
targetহলে, এটি ইঙ্গিত করে যে টার্গেট/ব্যাকএন্ড সার্ভার অ্যাপ্লিকেশন Apigee-কে যে রেসপন্স-লাইন সাইজ পাঠিয়েছে সেটি Apigee Edge-এ অনুমোদিত সীমা-র থেকে বেশি। আপনি নিম্নলিখিত পদ্ধতির মধ্যে একটি ব্যবহার করে যাচাই করতে পারবেন যে Response-Line সাইজ অনুমোদিত ২ কেবি সীমা অতিক্রম করেছে:
সমস্যা সংক্রান্ত মেসেজ
সমস্যার মেসেজ ব্যবহার করে যাচাই করতে:
Apigee Edge থেকে পাওয়া সম্পূর্ণ সমস্যার মেসেজে আপনার অ্যাক্সেস থাকলে, তাহলে
faultstringদেখুন।সমস্যার মেসেজের নমুনা:
"faultstring":"response line size exceeding 2,048"
উপরের
faultstringথেকে বোঝা যাচ্ছে যে, উত্তর-লাইনের সাইজ অনুমোদিত ২ কেবি সীমা ছাড়িয়ে গেছে।আসল অনুরোধ
আসল অনুরোধ ব্যবহার করে যাচাই করতে:
টার্গেট/ব্যাকএন্ড সার্ভার অ্যাপ্লিকেশনে করা আসল অনুরোধে আপনার অ্যাক্সেস থাকলে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- উত্তর-লাইনের সাইজ যাচাই করুন
- আপনি যদি দেখেন যে URI-এর সাইজ
Apigee Edge-এ অনুমোদিত সীমার চেয়ে বেশি, তাহলে এটিই হল
সমস্যার কারণ।
টার্গেট/ব্যাকএন্ড সার্ভারের থেকে পাওয়া নমুনা উত্তর:
curl -v http://HOSTALIAS/test
* Trying 3.2.1.4... * TCP_NODELAY set * Connected to <hostalias> (3.2.1.4) port 80 (#0) > GET /test HTTP/1.1 > Host: HOSTALIAS > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 1111…<trimmed>...11111111 < Date: Mon, 26 Jul 2021 07:07:18 GMT < Content-Type: application/json < Content-Length: 269 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { <Response Body> } * Connection #0 to host <hostalias> left intact * Closing connection 0
উপরের ক্ষেত্রে, Response-Line
HTTP/1.1 200 1111…<trimmed>...11111111২ কেবির চেয়ে বড়, অর্থাৎ, এতে ২ কেবির চেয়ে বেশি ASCII অক্ষর আছে।আপনি অন্য কোনও ক্লায়েন্ট ব্যবহার করলে, ক্লায়েন্ট লগ পর্যালোচনা করে দেখুন এবং Apigee Edge-এ পাঠানো Response-Line-এর সাইজ খুঁজে বের করার চেষ্টা করুন।
মেসেজ প্রসেসর লগ
Message Processor লগ ব্যবহার করে যাচাই করতে:
আপনি প্রাইভেট ক্লাউড ব্যবহারকারী হলে, Response-Line সাইজ Apigee Edge-এ অনুমোদিত সীমা অতিক্রম করেছে কিনা তা যাচাই করতে মেসেজ প্রসেসর লগ ব্যবহার করতে পারবেন।
- API মনিটরিং, ট্রেস টুল, অথবা NGINX অ্যাক্সেস লগ ব্যবহার করে ব্যর্থ হওয়া অনুরোধের মেসেজ আইডি নির্ধারণ করুন, যা সাধারণ ডায়াগনসিস ধাপ-এ ব্যাখ্যা করা হয়েছে।
মেসেজ প্রসেসর লগে মেসেজ আইডি সার্চ করুন:
/opt/apigee/var/log/edge-message-processor/logs/system.logআপনি
system.logথেকে নিম্নলিখিত ধরনের লাইন দেখতে পাবেন:2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592 useCount=1 bytesRead=0 bytesWritten=201 age=144ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048 at <snipped> 2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
উপরের সমস্যার মেসেজে
message = response line size exceeding 2,048টেক্সটটি দেখায় যে উত্তর-লাইনের সাইজ ২ কেবির বেশি। তাই, Apigee Edge ব্যতিক্রম দেখায় এবং ক্লায়েন্ট অ্যাপ্লিকেশনকে ফল্ট কোডprotocol.http.TooBiglineসহ502স্ট্যাটাস কোড রিটার্ন করে।
রেজোলিউশন
সাইজ ঠিক করা
বিকল্প #১ [সাজেস্ট করা]: টার্গেট/ব্যাকএন্ড সার্ভার অ্যাপ্লিকেশনকে অনুমোদিত সীমার চেয়ে বেশি সাইজের রেসপন্স-লাইন না পাঠানোর জন্য ঠিক করুন
- সীমাতে উল্লেখ করা অনুমোদিত সীমার চেয়ে বেশি সাইজের Response-Line পাঠানোর নির্দিষ্ট ক্লায়েন্টের কারণ বিশ্লেষণ করুন।
- এটি কাঙ্ক্ষিত না হলে, আপনার টার্গেট/ব্যাকএন্ড সার্ভার অ্যাপ্লিকেশন পরিবর্তন করুন যাতে এটি অনুমোদিত সীমার চেয়ে কম সাইজের একটি Response-Line পাঠায়।
- এটি কাঙ্ক্ষিত হলে এবং আপনি অনুমোদিত সীমার চেয়ে বেশি সাইজের রেসপন্স-লাইন পাঠাতে চাইলে, পরবর্তী বিকল্পে যান।
CwC
বিকল্প #২: উত্তরের লাইন সংখ্যা বাড়াতে CwC প্রপার্টি ব্যবহার করুন
Apigee একটি CwC প্রপার্টি প্রদান করে যা এটিকে রেসপন্স-লাইন সাইজ সীমা বাড়াতে দেয়। বিবরণের জন্য, দেখুন মেসেজ প্রসেসরে উত্তর-লাইনের সীমা সেট করুন।
সীমা
Apigee আশা করে যে ক্লায়েন্ট অ্যাপ্লিকেশন এবং ব্যাকএন্ড সার্ভার এমন Request/Response-Lines পাঠাবে না যেগুলির সাইজ Apigee Edge Limits-এ Request/Response Line Limit হিসেবে উল্লেখ করা অনুমোদিত সীমার থেকে বেশি।
- আপনি পাবলিক ক্লাউড ব্যবহারকারী হলে, অনুরোধ ও উত্তর লাইন সাইজের সর্বাধিক সীমা Apigee Edge Limits-এ অনুরোধ/উত্তর লাইন সাইজ হিসেবে উল্লেখ করা আছে।
- আপনি প্রাইভেট ক্লাউড ব্যবহারকারী হলে, আপনি হয়ত অনুরোধ ও উত্তর-লাইন সাইজের ডিফল্ট সর্বাধিক সীমা পরিবর্তন করেছেন (যদিও এটি সাজেস্ট করা প্র্যাক্টিস নয়)। আপনি বর্তমান সীমা কীভাবে চেক করবেন লিঙ্কে দেওয়া নির্দেশাবলী অনুসরণ করে সর্বাধিক রেসপন্স-লাইন সাইজ সীমা নির্ধারণ করতে পারবেন।
বর্তমান সীমা কীভাবে চেক করবেন?
এই বিভাগে ব্যাখ্যা করা হয়েছে যে কীভাবে যাচাই করতে হয় যে মেসেজ প্রসেসরে প্রপার্টি HTTPResponse.line.limit নতুন ভ্যালু দিয়ে
আপডেট করা হয়েছে।
- মেসেজ প্রসেসর মেশিনে, প্রপার্টি
HTTPResponse.line.limitখুঁজে দেখুন/opt/apigee/edge-message-processor/confডিরেক্টরি এবং নিচে দেখানো ভ্যালু সেট করা হয়েছে কিনা তা চেক করুন:grep -ri "HTTPResponse.line.limit" /opt/apigee/edge-message-processor/conf
- উপরের কমান্ড থেকে প্রাপ্ত নমুনা ফলাফল নিচে দেওয়া হল:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
উপরের আউটপুটের উদাহরণে, লক্ষ্য করুন যে প্রপার্টি
HTTPResponse.line.limithttp.properties-এ2kভ্যালু দিয়ে সেট করা হয়েছে।এর থেকে বোঝা যায় যে প্রাইভেট ক্লাউডের জন্য Apigee-তে কনফিগার করা রেসপন্স-লাইনের সাইজের সীমা ২ কেবি।
Apigee সহায়তা টিমের থেকে এখনও কোনও সাহায্যের প্রয়োজন হলে, রোগ নির্ণয় সংক্রান্ত তথ্য অবশ্যই সংগ্রহ করুন।
অবশ্যই ডায়াগনস্টিক তথ্য সংগ্রহ করতে হবে
নিম্নলিখিত ডায়াগনস্টিক তথ্য সংগ্রহ করুন এবং তারপর Apigee Edge সহায়তা টিমের সাথে যোগাযোগ করুন:
আপনি পাবলিক ক্লাউড ব্যবহারকারী হলে, নিম্নলিখিত তথ্য প্রদান করুন:
- সংস্থার নাম
- পরিবেশের নাম
- API প্রক্সির নাম
502সংক্রান্ত সমস্যা আবার তৈরি করতে ব্যবহৃত সম্পূর্ণ curl কমান্ড- API অনুরোধের জন্য ট্রেস ফাইল
আপনি প্রাইভেট ক্লাউড ব্যবহারকারী হলে, নিম্নলিখিত তথ্য দিন:
- অনুরোধ সম্পূর্ণ না হওয়ার ক্ষেত্রে দেখা সম্পূর্ণ সমস্যার মেসেজ
- সংস্থার নাম
- পরিবেশের নাম
- API Proxy বান্ডেল
- API অনুরোধ কাজ না করলে তার ট্রেস ফাইল
502সমস্যাটি আবার তৈরি করতেcurlকমান্ড সম্পূর্ণ করুনNGINX অ্যাক্সেস লগ
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logকোথায়: ORG, ENV এবং PORT#-এর জায়গায় আসল ভ্যালু বসানো হয়।
- মেসেজ প্রসেসর সিস্টেম লগ
/opt/apigee/var/log/edge-message-processor/logs/system.log