আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
লক্ষণ
এপিআই কলের জবাবে ক্লায়েন্ট অ্যাপ্লিকেশনটি Gateway Timeout বার্তা সহ একটি 504 HTTP স্ট্যাটাস কোড পায়।
এই ত্রুটিপূর্ণ প্রতিক্রিয়াটি নির্দেশ করে যে, একটি এপিআই কল সম্পাদনের সময় ক্লায়েন্ট Apigee Edge বা ব্যাকএন্ড সার্ভার থেকে সময়মতো কোনো প্রতিক্রিয়া পায়নি।
ত্রুটির বার্তা
ক্লায়েন্ট অ্যাপ্লিকেশনটি নিম্নলিখিত প্রতিক্রিয়া কোডটি পায়:
HTTP/1.1 504 Gateway Time-out
cURL বা ওয়েব ব্রাউজার ব্যবহার করে এই ধরনের প্রক্সি কল করার সময়, আপনি নিম্নলিখিত ত্রুটিটি পেতে পারেন:
<!DOCTYPE html> <html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
টাইমআউটের কারণ কী?
নিম্নলিখিত চিত্রে দেখানো অনুযায়ী, এজ প্ল্যাটফর্মের মাধ্যমে একটি এপিআই অনুরোধের সাধারণ পথটি হলো ক্লায়েন্ট > রাউটার > মেসেজ প্রসেসর > ব্যাকএন্ড সার্ভার ।

ক্লায়েন্ট, রাউটার, মেসেজ প্রসেসর এবং ব্যাকএন্ড সার্ভার সহ Apigee Edge রানটাইম ফ্লো-এর সমস্ত উপাদান উপযুক্ত ডিফল্ট টাইমআউট মান দিয়ে সেট আপ করা হয়, যাতে API অনুরোধগুলি সম্পূর্ণ হতে খুব বেশি সময় না নেয়। যদি ফ্লো-এর কোনো উপাদান টাইমআউট কনফিগারেশনে নির্দিষ্ট করা সময়সীমার মধ্যে আপস্ট্রিম উপাদান থেকে প্রতিক্রিয়া না পায়, তাহলে সেই নির্দিষ্ট উপাদানটি টাইমআউট হয়ে যাবে এবং সাধারণত একটি 504 Gateway Timeout ত্রুটি ফেরত দেবে।
এই প্লেবুকে বর্ণনা করা হয়েছে, রাউটার টাইম আউট হওয়ার কারণে সৃষ্ট 504 এরর কীভাবে ট্রাবলশুট ও সমাধান করতে হয়।
রাউটারে টাইমআউট
Apigee Edge-এর রাউটারগুলিতে ডিফল্টভাবে ৫৭ সেকেন্ডের টাইমআউট কনফিগার করা থাকে। Edge-এ API অনুরোধটি গ্রহণ করার সময় থেকে শুরু করে ব্যাকএন্ডের প্রতিক্রিয়া এবং কার্যকর হওয়া সমস্ত পলিসি সহ প্রতিক্রিয়াটি ফেরত পাঠানো পর্যন্ত, একটি API প্রক্সি সর্বোচ্চ এই পরিমাণ সময় পর্যন্ত কার্যকর থাকতে পারে। "রাউটারগুলিতে I/O টাইমআউট কনফিগার করা" অংশে যেমন ব্যাখ্যা করা হয়েছে, সেই অনুযায়ী রাউটার/ভার্চুয়াল হোস্টগুলিতে এই ডিফল্ট টাইমআউটকে ওভাররাইড করা যেতে পারে।
সম্ভাব্য কারণসমূহ
Edge-এ, রাউটার টাইম আউট হওয়ার কারণে সৃষ্ট 504 Gateway Timeout ত্রুটির সাধারণ কারণগুলো হলো:
| কারণ | বর্ণনা | সমস্যা সমাধানের নির্দেশাবলী প্রযোজ্য |
|---|---|---|
| রাউটারে ভুল টাইমআউট কনফিগারেশন | রাউটারটি ভুল I/O টাইমআউট পিরিয়ড দিয়ে কনফিগার করা থাকলে এমনটা ঘটে। | এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা |
সাধারণ রোগ নির্ণয়ের পদক্ষেপ
এই ত্রুটি নির্ণয় করতে নিম্নলিখিত সরঞ্জাম/কৌশলগুলোর মধ্যে যেকোনো একটি ব্যবহার করুন:
- এপিআই পর্যবেক্ষণ
- NGINX অ্যাক্সেস লগ
এপিআই পর্যবেক্ষণ
এপিআই মনিটরিং ব্যবহার করে ত্রুটি নির্ণয় করতে:
- Analyze > API Monitoring > Investigate পৃষ্ঠায় যান।
-
5xxত্রুটিগুলির জন্য ফিল্টার করুন এবং সময়সীমা নির্বাচন করুন। - সময়ের সাপেক্ষে স্ট্যাটাস কোড প্লট করুন।
নীচে দেখানো অনুযায়ী,
504ত্রুটি দেখানো নির্দিষ্ট সেলটিতে ক্লিক করে এই ত্রুটিগুলি সম্পর্কে আরও বিশদ বিবরণ এবং লগ দেখুন:504 ত্রুটি দেখানোর উদাহরণ

- ডানদিকের প্যানেলে, 'লগ দেখুন' (View logs) -এ ক্লিক করুন।

ট্র্যাফিক লগস উইন্ডো থেকে, কিছু
504ত্রুটির জন্য নিম্নলিখিত বিবরণগুলি লক্ষ্য করুন:- অনুরোধ: এটি কল করার জন্য ব্যবহৃত অনুরোধ পদ্ধতি এবং URI প্রদান করে।
- প্রতিক্রিয়া সময়: এটি অনুরোধটির জন্য অতিবাহিত মোট সময় প্রদান করে।
উপরের উদাহরণে,
- অনুরোধটি
GET /test-timeoutঅভিমুখী। - রেসপন্স টাইম হলো
57.001সেকেন্ড। এর থেকে বোঝা যায় যে, মেসেজ প্রসেসর সাড়া দেওয়ার আগেই রাউটারের টাইম আউট হয়ে গেছে, কারণ এই মানটি রাউটারে সেট করা ডিফল্ট I/O টাইম আউট ( ৫৭ সেকেন্ড)-এর খুব কাছাকাছি।
আপনি এপিআই মনিটরিং GET লগস এপিআই ব্যবহার করেও সমস্ত লগ পেতে পারেন। উদাহরণস্বরূপ,
org,env,timeRange, এবংstatusদিয়ে লগ কোয়েরি করার মাধ্যমে, আপনি সেইসব ট্রানজ্যাকশনের সমস্ত লগ ডাউনলোড করতে পারবেন যেখানে ক্লায়েন্টের টাইম আউট হয়েছে।যেহেতু এপিআই মনিটরিং এই
504ত্রুটিগুলির জন্য প্রক্সিকে-(সেট করা নেই) হিসেবে সেট করে, তাই আপনি ভার্চুয়াল হোস্ট এবং পাথের জন্য সংশ্লিষ্ট প্রক্সি পেতে এপিআই ( লগস এপিআই ) ব্যবহার করতে পারেন।উদাহরণস্বরূপ :
curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
- অতিরিক্ত
504ত্রুটিগুলির জন্য রেসপন্স টাইম পর্যালোচনা করুন এবং পরীক্ষা করে দেখুন যে সমস্ত504ত্রুটির ক্ষেত্রে রেসপন্স টাইম সামঞ্জস্যপূর্ণ কিনা (রাউটারে সেট করা I/O টাইমআউট মান ৫৭ সেকেন্ড)।
NGINX অ্যাক্সেস লগ
NGINX অ্যাক্সেস লগ ব্যবহার করে ত্রুটি নির্ণয় করতে:
- NGINX অ্যাক্সেস লগগুলি পরীক্ষা করুন:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log - একটি নির্দিষ্ট সময়কালের মধ্যে কোনো
504ত্রুটি আছে কিনা (যদি সমস্যাটি অতীতে ঘটে থাকে) অথবা এখনও কোনো অনুরোধ504ত্রুটির কারণে ব্যর্থ হচ্ছে কিনা তা অনুসন্ধান করে দেখুন। - কিছু
504ত্রুটির ক্ষেত্রে নিম্নলিখিত তথ্যগুলো লক্ষ্য করুন:- প্রতিক্রিয়া সময়
- অনুরোধ URI

এই উদাহরণে, আমরা নিম্নলিখিত তথ্য দেখতে পাই:
অনুরোধের সময়:
57.001সেকেন্ড। এর অর্থ হলো, ৫৭.০০১ সেকেন্ড পর রাউটারটির সময়সীমা শেষ হয়ে গেছে।- অনুরোধ:
GET /test-timeout - হোস্ট অ্যালিয়াস :
myorg-test.apigee.net
রিকোয়েস্ট টাইম এবং রাউটার/ভার্চুয়াল হোস্টে কনফিগার করা আই/ও টাইমআউট একই কিনা তা পরীক্ষা করে দেখুন। যদি একই হয়, তাহলে এর অর্থ হলো, মেসেজ প্রসেসর এই সময়ের মধ্যে সাড়া না দেওয়ায় রাউটারটি টাইমআউট হয়ে গেছে।
উপরে দেখানো উদাহরণ NGINX অ্যাক্সেস লগ এন্ট্রিতে,
57.001সেকেন্ডের রিকোয়েস্ট টাইমটি রাউটারে সেট করা ডিফল্ট I/O টাইমআউটের খুব কাছাকাছি। এটি পরিষ্কারভাবে নির্দেশ করে যে মেসেজ প্রসেসর সাড়া দেওয়ার আগেই রাউটারটি টাইমআউট হয়ে গেছে।- Request ফিল্ডে বেস পাথ ব্যবহার করে সেই API প্রক্সিটি নির্ধারণ করুন যার মাধ্যমে অনুরোধটি করা হয়েছিল।
কারণ: রাউটারে টাইমআউট কনফিগারেশন ভুল
রোগ নির্ণয়
- মেসেজ প্রসেসর সাড়া দেওয়ার আগেই রাউটারের টাইমআউট হয়ে যাওয়ার কারণে
504ত্রুটিগুলো ঘটছে কিনা তা নির্ধারণ করুন। ‘সাধারণ রোগ নির্ণয়ের ধাপসমূহ’-এ ব্যাখ্যা করা পদ্ধতি অনুযায়ী, এপিআই মনিটরিং বা এনজিআইএনএক্স অ্যাক্সেস লগ ব্যবহার করে আপনি এটি করতে পারেন। এর জন্য আপনাকে দেখতে হবে যে এপিআই মনিটরিং-এর রেসপন্স টাইম এবং রাউটারের রিকোয়েস্ট টাইম (উভয় ফিল্ড একই তথ্য প্রকাশ করে, কিন্তু ভিন্ন নামে পরিচিত) রাউটার/ভার্চুয়াল হোস্টে কনফিগার করা আই/ও টাইমআউটের সমান কিনা এবং ফল্ট সোর্স , ফল্ট প্রক্সি ও ফল্ট কোড ফিল্ডগুলো-হাই) তে সেট করা আছে কিনা । রাউটার বা নির্দিষ্ট ভার্চুয়াল হোস্টে কনফিগার করা I/O টাইমআউট মানটি, মেসেজ প্রসেসর বা নির্দিষ্ট API প্রক্সিতে কনফিগার করা মানের তুলনায় কম কিনা তা যাচাই করে দেখুন।
এই বিভাগে দেওয়া ধাপগুলো অনুসরণ করে আপনি এটি করতে পারেন।
ভার্চুয়াল হোস্টে I/O টাইমআউট যাচাই করা হচ্ছে
এজ ইউআই
Edge UI ব্যবহার করে ভার্চুয়াল হোস্ট টাইমআউট যাচাই করতে, নিম্নলিখিতগুলি করুন:
- Edge UI-তে লগইন করুন।
- অ্যাডমিন > ভার্চুয়াল হোস্ট- এ যান।
- একটি নির্দিষ্ট পরিবেশ নির্বাচন করুন যেখানে আপনি টাইমআউট সমস্যাটি অনুভব করছেন।
- সেই নির্দিষ্ট ভার্চুয়াল হোস্টটি নির্বাচন করুন যার জন্য আপনি I/O টাইমআউট মান যাচাই করতে চান।
- প্রোপার্টিজ-এর অধীনে, প্রক্সি রিড টাইমআউট-এর মান সেকেন্ডে দেখুন।

উপরের উদাহরণে, প্রক্সি রিড টাইমআউট
120মানে কনফিগার করা হয়েছে। এর মানে হলো, এই ভার্চুয়াল হোস্টে কনফিগার করা I/O টাইমআউট হলো ১২০ সেকেন্ড।
ব্যবস্থাপনা এপিআই
এছাড়াও আপনি নিম্নলিখিত ম্যানেজমেন্ট এপিআইগুলো ব্যবহার করে প্রক্সি রিড টাইমআউট যাচাই করতে পারেন:
নিচে দেখানো অনুযায়ী
virtualhostকনফিগারেশন পেতে Get virtual host API-টি চালান:পাবলিক ক্লাউড ব্যবহারকারী
curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUALHOST_NAME -u USERNAME
প্রাইভেট ক্লাউড ব্যবহারকারী
curl -v -X GET http://MANAGEMENT_SERVER_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/v/virtualhosts/VIRTUALHOST_NAME -u USERNAME
কোথায়:
ORGANIZATION_NAME হলো প্রতিষ্ঠানের নাম।
ENVIRONMENT_NAME হলো পরিবেশের নাম।
VIRTUALHOST_NAME হলো ভার্চুয়াল হোস্টের নাম।
proxy_read_timeoutপ্রপার্টির জন্য কনফিগার করা মানটি পরীক্ষা করুন।নমুনা ভার্চুয়াল হোস্ট সংজ্ঞা
{ "hostAliases": [ "api.myCompany,com", ], "interfaces": [], "listenOptions": [], "name": "secure", "port": "443", "retryOptions": [], "properties": { "property": [ { "name": "proxy_read_timeout", "value": "120" } ] }, "sSLInfo": { "ciphers": [], "clientAuthEnabled": "false", "enabled": "true", "ignoreValidationErrors": false, "keyAlias": "myCompanyKeyAlias", "keyStore": "ref://myCompanyKeystoreref", "protocols": [] }, "useBuiltInFreeTrialCert": false }উপরের উদাহরণে,
proxy_read_timeout120মান দিয়ে কনফিগার করা হয়েছে। এর মানে হলো, এই ভার্চুয়াল হোস্টে কনফিগার করা I/O টাইমআউট হলো ১২০ সেকেন্ড।
router.propers ফাইলে I/O টাইমআউট যাচাই করা হচ্ছে
- একটি রাউটার মেশিনে লগইন করুন।
-
/opt/nginx/conf.dডিরেক্টরিতেproxy_read_timeoutপ্রপার্টিটি খুঁজুন এবং পরীক্ষা করে দেখুন যে এটি নিম্নলিখিত নতুন মান দিয়ে সেট করা হয়েছে কিনা:grep -ri "proxy_read_timeout" /opt/nginx/conf.d
নির্দিষ্ট ভার্চুয়াল হোস্ট কনফিগারেশন ফাইলে
proxy_read_timeoutপ্রপার্টির জন্য সেট করা মানটি যাচাই করুন।grep কমান্ড থেকে প্রাপ্ত নমুনা ফলাফল
/opt/nginx/conf.d/0-default.conf:proxy_read_timeout 57; /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;
উপরের উদাহরণ আউটপুটে লক্ষ্য করুন যে, ডিফল্ট ভার্চুয়াল হোস্টের কনফিগারেশন ফাইল
0-default.confএproxy_read_timeoutপ্রপার্টিটির নতুন মান57সেট করা হয়েছে। এটি নির্দেশ করে যে, রাউটারে ডিফল্ট ভার্চুয়াল হোস্টের জন্য I/O টাইমআউট ৫৭ সেকেন্ডে কনফিগার করা হয়েছে। আপনার যদি একাধিক ভার্চুয়াল হোস্ট থাকে, তবে আপনি সেগুলোর প্রতিটির জন্য এই তথ্য দেখতে পাবেন। যে নির্দিষ্ট ভার্চুয়াল হোস্টটি ব্যবহার করে আপনি এপিআই কলগুলো করেছিলেন এবং যেগুলো504এরর দিয়ে ব্যর্থ হয়েছিল, সেটিরproxy_read_timeoutএর মান সংগ্রহ করুন।
এপিআই প্রক্সিতে I/O টাইমআউট যাচাই করা হচ্ছে
আপনি নিম্নলিখিতভাবে I/O টাইমআউট দেখতে পারেন:
- এপিআই প্রক্সির টার্গেট এন্ডপয়েন্ট
- এপিআই প্রক্সির সার্ভিসকলআউট নীতি
এপিআই প্রক্সির টার্গেট এন্ডপয়েন্টে I/O টাইমআউট দেখুন
- Edge UI-তে, সেই নির্দিষ্ট API প্রক্সিটি নির্বাচন করুন যার I/O টাইমআউট মান আপনি দেখতে চান।
- যে নির্দিষ্ট টার্গেট এন্ডপয়েন্টটি আপনি চেক করতে চান, সেটি নির্বাচন করুন।
-
TargetEndpointকনফিগারেশনে<HTTPTargetConnection>এলিমেন্টের অধীনেio.timeout.millisপ্রপার্টিটিতে একটি উপযুক্ত মান দিন।উদাহরণস্বরূপ, নিম্নলিখিত কোডে I/O টাইমআউট ১২০ সেকেন্ডে সেট করা হয়েছে:
<Properties> <Property name="io.timeout.millis">120000</Property> </Properties>
এপিআই প্রক্সির সার্ভিসকলআউট পলিসিতে আই/ও টাইমআউট দেখুন
- Edge UI-তে, সেই নির্দিষ্ট API প্রক্সিটি নির্বাচন করুন যেখানে আপনি ServiceCallout পলিসির জন্য নতুন I/O টাইমআউট মানটি দেখতে চান।
- আপনি যে নির্দিষ্ট সার্ভিসকলআউট পলিসিটি চেক করতে চান, সেটি নির্বাচন করুন।
<ServiceCallout>কনফিগারেশনের অধীনে<Timeout>এলিমেন্টটিতে একটি উপযুক্ত মান দিন।উদাহরণস্বরূপ, নিম্নলিখিত কোডটির I/O টাইমআউট হবে ১২০ সেকেন্ড:
<Timeout>120000</Timeout>
মেসেজ প্রসেসরগুলিতে I/O টাইমআউট যাচাই করা হচ্ছে
- মেসেজ প্রসেসর মেশিনে লগইন করুন।
নিম্নলিখিত কমান্ড ব্যবহার করে
/opt/apigee/edge-message-processor/confডিরেক্টরিতেHTTPTransport.io.timeout.millisপ্রপার্টিটি খুঁজুন:grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
নমুনা আউটপুট
/opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
- উপরের উদাহরণ আউটপুটে লক্ষ্য করুন যে,
http.propertiesফাইলেHTTPTransport.io.timeout.millisপ্রপার্টিটির মান55000সেট করা হয়েছে। এটি নির্দেশ করে যে মেসেজ প্রসেসরে I/O টাইমআউট সফলভাবে ৫৫ সেকেন্ডে কনফিগার করা হয়েছে।
একবার আপনি রাউটার এবং মেসেজ প্রসেসরে কনফিগার করা টাইমআউট নির্ধারণ করে ফেললে, যাচাই করে দেখুন যে রাউটার/ভার্চুয়াল হোস্টটি মেসেজ প্রসেসর/এপিআই প্রক্সির তুলনায় কম টাইমআউট মান দিয়ে কনফিগার করা হয়েছে কিনা।
নিচের সারণিতে দেখানো অনুযায়ী সমস্ত লেয়ারে সেট করা মানগুলো লিখে রাখুন:
| রাউটারে সময়সীমা (সেকেন্ডে) | ভার্চুয়াল হোস্টে সময়সীমা অতিক্রান্ত (সেকেন্ড) | মেসেজ প্রসেসরের সময়সীমা শেষ (সেকেন্ড) | এপিআই প্রক্সিতে সময়সীমা অতিক্রান্ত (সেকেন্ড) |
|---|---|---|---|
| ৫৭ | - | ৫৫ | ১২০ |
এই উদাহরণে,
- রাউটারে ৫৭ সেকেন্ডের ডিফল্ট মান কনফিগার করা আছে।
- নির্দিষ্ট ভার্চুয়াল হোস্টে টাইমআউট ভ্যালু সেট করা নেই। এর মানে হলো, এটি রাউটারটিতে কনফিগার করা ৫৭ সেকেন্ডের ডিফল্ট ভ্যালুটি ব্যবহার করবে।
- মেসেজ প্রসেসরে ডিফল্ট মান হিসেবে ৫৫ সেকেন্ড কনফিগার করা আছে।
- তবে, নির্দিষ্ট এপিআই প্রক্সিতে ১২০ সেকেন্ডের একটি মান কনফিগার করা আছে।
উল্লেখ্য যে, উচ্চতর টাইমআউট মানটি শুধুমাত্র এপিআই প্রক্সিতে কনফিগার করা আছে, কিন্তু রাউটারটি এখনও ৫৭ সেকেন্ডে কনফিগার করা আছে। ফলে, মেসেজ প্রসেসর/ব্যাকএন্ড যখন আপনার অনুরোধটি প্রসেস করতে থাকে, তখনই রাউটারটি ৫৭ সেকেন্ডে টাইমআউট হয়ে যায়। এর কারণে রাউটারটি ক্লায়েন্ট অ্যাপ্লিকেশনকে 504 Gateway Timeout এরর দিয়ে সাড়া দেয়।
সমাধান
এই সমস্যাটি সমাধান করতে রাউটার এবং মেসেজ প্রসেসরে সঠিক I/O টাইমআউট কনফিগার করার জন্য নিম্নলিখিত ধাপগুলো অনুসরণ করুন।
- Apigee Edge-এর মাধ্যমে API অনুরোধ প্রবাহে জড়িত বিভিন্ন উপাদানে কী টাইমআউট মান সেট করা উচিত, তা বোঝার জন্য I/O টাইমআউট কনফিগার করার সর্বোত্তম অনুশীলনগুলি দেখুন।
- উপরের উদাহরণে, যদি আপনি নিশ্চিত হন যে ব্যাকএন্ড সার্ভারের বেশি সময় প্রয়োজন হওয়ায় একটি উচ্চতর টাইমআউট মান সেট করতে হবে, এবং আপনি মেসেজ প্রসেসরের টাইমআউট মান বাড়িয়ে ১২০ সেকেন্ড করেছেন, তাহলে রাউটারে একটি উচ্চতর টাইমআউট মান সেট করুন, যেমন:
123 seconds। নতুন টাইমআউট মানের কারণে সমস্ত এপিআই প্রক্সির উপর প্রভাব এড়াতে,123 secondsমানটি শুধুমাত্র সেই নির্দিষ্ট ভার্চুয়াল হোস্টে সেট করুন যা নির্দিষ্ট এপিআই প্রক্সিতে ব্যবহৃত হয়। - ভার্চুয়াল হোস্টে টাইমআউট সেট করতে, রাউটারে I/O টাইমআউট কনফিগার করার নির্দেশাবলী অনুসরণ করুন।