504 গেটওয়ে টাইম আউট - রাউটার টাইমিং আউট

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান
তথ্য

উপসর্গ

ক্লায়েন্ট অ্যাপ্লিকেশনটি API কলগুলির প্রতিক্রিয়া হিসাবে Gateway Timeout বার্তা সহ 504 এর একটি HTTP স্ট্যাটাস কোড পায়।

এই ত্রুটির প্রতিক্রিয়া নির্দেশ করে যে ক্লায়েন্ট একটি API কল চালানোর সময় 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>

সময়সীমার কারণ কি?

এজ প্ল্যাটফর্মের মাধ্যমে একটি API অনুরোধের জন্য সাধারণ পথ হল ক্লায়েন্ট > রাউটার > মেসেজ প্রসেসর > ব্যাকএন্ড সার্ভার যা নিচের চিত্রে দেখানো হয়েছে:

ক্লায়েন্ট, রাউটার, মেসেজ প্রসেসর এবং ব্যাকএন্ড সার্ভার সহ Apigee Edge রানটাইম প্রবাহের সমস্ত উপাদান উপযুক্ত ডিফল্ট টাইমআউট মানগুলির সাথে সেট আপ করা হয়েছে যাতে নিশ্চিত করা যায় যে API অনুরোধগুলি সম্পূর্ণ হতে খুব বেশি সময় নেয় না। যদি প্রবাহের কোনো উপাদান টাইমআউট কনফিগারেশনে নির্দিষ্ট সময়ের মধ্যে আপস্ট্রিম কম্পোনেন্ট থেকে সাড়া না পায়, তাহলে নির্দিষ্ট কম্পোনেন্ট টাইমআউট হয়ে যাবে এবং সাধারণত 504 Gateway Timeout ত্রুটি ফিরিয়ে দেবে।

এই প্লেবুকটি বর্ণনা করে কিভাবে রাউটার টাইম আউট হয়ে গেলে 504 ত্রুটির সমস্যা সমাধান এবং সমাধান করা যায়।

রাউটারে টাইমআউট

Apigee Edge-এ রাউটারে কনফিগার করা ডিফল্ট টাইমআউট হল 57 সেকেন্ড। এজ-এ API অনুরোধ প্রাপ্ত হওয়ার সময় থেকে ব্যাকএন্ড প্রতিক্রিয়া এবং কার্যকর করা সমস্ত নীতি সহ প্রতিক্রিয়া ফেরত পাঠানো না হওয়া পর্যন্ত এটি একটি API প্রক্সি কার্যকর করতে পারে। রাউটারে I/O টাইমআউট কনফিগার করার ব্যাখ্যা অনুযায়ী রাউটার/ভার্চুয়াল হোস্টে ডিফল্ট টাইমআউট ওভাররাইড করা যেতে পারে।

সম্ভাব্য কারণ

এজ-এ, রাউটার টাইমিং আউটের কারণে 504 Gateway Timeout ত্রুটির সাধারণ কারণগুলি হল:

কারণ বর্ণনা সমস্যা সমাধানের নির্দেশাবলী প্রযোজ্য
রাউটারে ভুল টাইমআউট কনফিগারেশন রাউটারটি ভুল I/O সময়সীমার সাথে কনফিগার করা হলে এটি ঘটে। এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা

সাধারণ রোগ নির্ণয়ের পদক্ষেপ

এই ত্রুটি নির্ণয় করতে নিম্নলিখিত সরঞ্জাম/কৌশলগুলির মধ্যে একটি ব্যবহার করুন:

  • API পর্যবেক্ষণ
  • NGINX অ্যাক্সেস লগ

API পর্যবেক্ষণ

API মনিটরিং ব্যবহার করে ত্রুটি নির্ণয় করতে:

  1. এনালাইজ > API মনিটরিং > ইনভেস্টিগেট পেজে নেভিগেট করুন।
  2. 5xx ত্রুটির জন্য ফিল্টার করুন এবং সময়সীমা নির্বাচন করুন।
  3. সময়ের বিপরীতে প্লট স্ট্যাটাস কোড
  4. নীচে দেখানো হিসাবে আরও বিশদ বিবরণ এবং এই ত্রুটিগুলি সম্পর্কে লগগুলি দেখতে 504 ত্রুটি দেখানো নির্দিষ্ট ঘরে ক্লিক করুন:

    504 ত্রুটি দেখানোর উদাহরণ

  5. ডানদিকের ফলকে, লগগুলি দেখুন ক্লিক করুন।

    ট্রাফিক লগ উইন্ডো থেকে, কিছু 504 ত্রুটির জন্য নিম্নলিখিত বিশদ নোট করুন:

    • অনুরোধ: এটি কল করার জন্য ব্যবহৃত অনুরোধের পদ্ধতি এবং URI প্রদান করে
    • প্রতিক্রিয়ার সময়: এটি অনুরোধের জন্য অতিবাহিত মোট সময় প্রদান করে।

    উপরের উদাহরণে,

    • অনুরোধটি GET /test-timeout নির্দেশ করছে।
    • প্রতিক্রিয়া সময় 57.001 সেকেন্ড। এটি ইঙ্গিত দেয় যে বার্তা প্রসেসরের প্রতিক্রিয়া জানানোর আগেই রাউটার সময় শেষ হয়ে গেছে কারণ মানটি রাউটারের ডিফল্ট I/O টাইমআউট সেটের খুব কাছাকাছি, যা 57 সেকেন্ড।

    আপনি API মনিটরিং GET লগ API ব্যবহার করে সমস্ত লগ পেতে পারেন। উদাহরণস্বরূপ, org , env , timeRange , এবং status জন্য লগ জিজ্ঞাসা করে, আপনি লেনদেনের জন্য সমস্ত লগ ডাউনলোড করতে সক্ষম হবেন যেখানে ক্লায়েন্টের সময় শেষ হয়েছে৷

    যেহেতু API মনিটরিং এই 504 ত্রুটির জন্য প্রক্সিকে - (সেট করা নয়) তে সেট করে, আপনি ভার্চুয়াল হোস্ট এবং পাথের জন্য সংশ্লিষ্ট প্রক্সি পেতে API ( Logs API ) ব্যবহার করতে পারেন।

    যেমন:

    curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
    
  6. অতিরিক্ত 504 ত্রুটির জন্য প্রতিক্রিয়া সময় পর্যালোচনা করুন এবং 504 ত্রুটির সমস্ত জুড়ে প্রতিক্রিয়া সময় সামঞ্জস্যপূর্ণ কিনা (রাউটারে I/O টাইমআউট মান সেট করা হয়েছে যা 57 সেকেন্ড) কিনা তা পরীক্ষা করুন।

NGINX অ্যাক্সেস লগ

NGINX অ্যাক্সেস লগ ব্যবহার করে ত্রুটি নির্ণয় করতে:

  1. NGINX অ্যাক্সেস লগগুলি পরীক্ষা করুন:
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log
  2. একটি নির্দিষ্ট সময়ের মধ্যে কোন 504 ত্রুটি আছে কিনা তা দেখতে অনুসন্ধান করুন (যদি সমস্যাটি অতীতে ঘটে থাকে) বা 504 সাথে এখনও কোনও অনুরোধ ব্যর্থ হচ্ছে কিনা।
  3. কিছু 504 ত্রুটির জন্য নিম্নলিখিত তথ্য নোট করুন:
    • প্রতিক্রিয়া সময়
    • URI অনুরোধ করুন

    এই উদাহরণে, আমরা নিম্নলিখিত তথ্য দেখতে পাই:

    • অনুরোধের সময়: 57.001 সেকেন্ড। এটি নির্দেশ করে যে রাউটারটি 57.001 সেকেন্ড পরে টাইম আউট হয়ে গেছে।

    • অনুরোধ: GET /test-timeout
    • হোস্ট উপনাম : myorg-test.apigee.net
  4. অনুরোধের সময়টি রাউটার/ভার্চুয়াল হোস্টে কনফিগার করা I/O টাইমআউটের মতো একই কিনা তা পরীক্ষা করে দেখুন। যদি হ্যাঁ, তাহলে এর মানে হল এই সময়ের মধ্যে মেসেজ প্রসেসর সাড়া না দেওয়ার আগেই রাউটার টাইম আউট হয়ে গেছে।

    উপরে দেখানো NGINX অ্যাক্সেস লগ এন্ট্রির উদাহরণে, 57.001 সেকেন্ডের অনুরোধের সময় রাউটারে সেট করা ডিফল্ট I/O টাইমআউটের খুব কাছাকাছি। এটি স্পষ্টভাবে নির্দেশ করে যে রাউটারটি বার্তা প্রসেসরের প্রতিক্রিয়া জানানোর আগেই সময় শেষ হয়ে গেছে।

  5. অনুরোধ ক্ষেত্রের বেস পাথ ব্যবহার করে যে API প্রক্সিটির জন্য অনুরোধ করা হয়েছিল তা নির্ধারণ করুন।

কারণ: রাউটারে ভুল টাইমআউট কনফিগারেশন

রোগ নির্ণয়

  1. 504 ত্রুটিগুলি সৃষ্ট কিনা তা নির্ধারণ করুন কারণ বার্তা প্রসেসরের প্রতিক্রিয়া জানানোর আগেই রাউটার সময় শেষ হয়ে গেছে। আপনি রাউটারে API মনিটরিং/ রিকোয়েস্ট টাইম ইন রেসপন্স টাইম (উভয় ক্ষেত্রই একই তথ্যের প্রতিনিধিত্ব করে, কিন্তু ভিন্ন নামে ডাকা হয়) রাউটার/ভার্চুয়ালে কনফিগার করা I/O টাইমআউটের মতো একই কিনা তা পরীক্ষা করে দেখতে পারেন। হোস্ট এবং ক্ষেত্রগুলি ফল্ট সোর্স , ফল্ট প্রক্সি এবং ফল্ট কোড সেট করা হয়েছে - এপিআই মনিটরিং বা NGINX অ্যাক্সেস লগ ব্যবহার করে সাধারণ নির্ণয়ের ধাপে ব্যাখ্যা করা হয়েছে৷
  2. রাউটারে কনফিগার করা I/O টাইমআউট মান বা নির্দিষ্ট ভার্চুয়াল হোস্ট মেসেজ প্রসেসর বা নির্দিষ্ট API প্রক্সিতে কনফিগার করা তুলনায় কম কিনা তা পরীক্ষা করে দেখুন।

    আপনি এই বিভাগে ধাপগুলি অনুসরণ করে এটি করতে পারেন।

ভার্চুয়াল হোস্টে I/O টাইমআউট যাচাই করা হচ্ছে

এজ UI

এজ UI ব্যবহার করে ভার্চুয়াল হোস্ট টাইমআউট যাচাই করতে, নিম্নলিখিতগুলি করুন:

  1. এজ UI এ লগইন করুন।
  2. অ্যাডমিন > ভার্চুয়াল হোস্টে নেভিগেট করুন।
  3. একটি নির্দিষ্ট পরিবেশ নির্বাচন করুন যেখানে আপনি টাইমআউট সমস্যার সম্মুখীন হচ্ছেন।
  4. নির্দিষ্ট ভার্চুয়াল হোস্ট নির্বাচন করুন যার জন্য আপনি I/O টাইমআউট মান যাচাই করতে চান।
  5. বৈশিষ্ট্যের অধীনে, সেকেন্ডে প্রক্সি রিড টাইমআউট মান দেখুন।

    উপরের উদাহরণে, প্রক্সি রিড টাইমআউট 120 এর মান দিয়ে কনফিগার করা হয়েছে। এর মানে হল এই ভার্চুয়াল হোস্টে কনফিগার করা I/O টাইমআউট হল 120 ​​সেকেন্ড।

ব্যবস্থাপনা APIs

এছাড়াও আপনি নিম্নলিখিত ব্যবস্থাপনা API ব্যবহার করে প্রক্সি রিড টাইমআউট যাচাই করতে পারেন:

  1. নীচে দেখানো হিসাবে virtualhost কনফিগারেশন পেতে গেট ভার্চুয়াল হোস্ট 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 হল ভার্চুয়াল হোস্টের নাম

  2. 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_timeout 120 এর মান দিয়ে কনফিগার করা হয়েছে। এর মানে হল এই ভার্চুয়াল হোস্টে কনফিগার করা I/O টাইমআউট হল 120 ​​সেকেন্ড।

router.properties ফাইলে I/O টাইমআউট যাচাই করা হচ্ছে

  1. একটি রাউটার মেশিনে লগইন করুন।
  2. /opt/nginx/conf.d ডিরেক্টরিতে proxy_read_timeout প্রপার্টি অনুসন্ধান করুন এবং নিচের মত নতুন মান দিয়ে সেট করা হয়েছে কিনা তা পরীক্ষা করুন:
    grep -ri "proxy_read_timeout" /opt/nginx/conf.d
    
  3. নির্দিষ্ট ভার্চুয়াল হোস্ট কনফিগারেশন ফাইলে 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;

    উপরের উদাহরণের আউটপুটে, লক্ষ্য করুন যে প্রপার্টি proxy_read_timeout 0-default.conf এ নতুন মান 57 সহ সেট করা হয়েছে যা ডিফল্ট ভার্চুয়াল হোস্টের কনফিগারেশন ফাইল। এটি নির্দেশ করে যে ডিফল্ট ভার্চুয়াল হোস্টের জন্য রাউটারে I/O টাইমআউট 57 সেকেন্ডে কনফিগার করা হয়েছে। আপনার যদি একাধিক ভার্চুয়াল হোস্ট থাকে, আপনি তাদের প্রত্যেকের জন্য এই তথ্য দেখতে পাবেন। 504 ত্রুটির সাথে ব্যর্থ হওয়া API কলগুলি করার জন্য আপনি যে নির্দিষ্ট ভার্চুয়াল হোস্ট ব্যবহার করেছেন তার জন্য proxy_read_timeout এর মান পান৷

API প্রক্সিতে I/O টাইমআউট যাচাই করা হচ্ছে

আপনি নিম্নলিখিত I/O সময়সীমা দেখতে পারেন:

  • API প্রক্সির টার্গেট এন্ডপয়েন্ট
  • API প্রক্সির ServiceCallout নীতি
API প্রক্সির টার্গেট এন্ডপয়েন্টে I/O টাইমআউট দেখুন
  1. এজ UI-তে, নির্দিষ্ট API প্রক্সি নির্বাচন করুন যেখানে আপনি I/O টাইমআউট মান দেখতে চান।
  2. আপনি চেক করতে চান এমন নির্দিষ্ট টার্গেট এন্ডপয়েন্ট নির্বাচন করুন।
  3. TargetEndpoint কনফিগারেশনে <HTTPTargetConnection> উপাদানের অধীনে একটি উপযুক্ত মান সহ io.timeout.millis সম্পত্তি দেখুন।

    উদাহরণস্বরূপ, নিম্নলিখিত কোডে I/O টাইমআউট 120 সেকেন্ডে সেট করা হয়েছে:

    <Properties>
      <Property name="io.timeout.millis">120000</Property>
    </Properties>
API প্রক্সির ServiceCallout নীতিতে I/O সময়সীমা দেখুন
  1. এজ UI-তে, নির্দিষ্ট API প্রক্সি নির্বাচন করুন যেখানে আপনি ServiceCallout নীতির জন্য নতুন I/O টাইমআউট মান দেখতে চান।
  2. আপনি চেক করতে চান এমন নির্দিষ্ট ServiceCallout নীতি নির্বাচন করুন।
  3. <ServiceCallout> কনফিগারেশনের অধীনে একটি উপযুক্ত মান সহ <Timeout> উপাদানটি দেখুন।

    উদাহরণস্বরূপ, নিম্নলিখিত কোডের I/O টাইমআউট হবে 120 সেকেন্ড:

    <Timeout>120000</Timeout>

বার্তা প্রসেসরগুলিতে I/O সময়সীমা যাচাই করা হচ্ছে

  1. মেসেজ প্রসেসর মেশিনে লগইন করুন।
  2. নিম্নলিখিত কমান্ড ব্যবহার করে /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
  3. উপরের উদাহরণের আউটপুটে, লক্ষ্য করুন যে HTTPTransport.io.timeout.millis প্রপার্টি http.properties55000 মান সহ সেট করা হয়েছে। এটি নির্দেশ করে যে I/O টাইমআউট সফলভাবে মেসেজ প্রসেসরে 55 সেকেন্ডে কনফিগার করা হয়েছে।

একবার আপনি রাউটার এবং মেসেজ প্রসেসরে কনফিগার করা টাইমআউট নির্ধারণ করলে, মেসেজ প্রসেসর/এপিআই প্রক্সির তুলনায় রাউটার/ভার্চুয়াল হোস্ট কম টাইমআউট মান দিয়ে কনফিগার করা হয়েছে কিনা তা যাচাই করুন।

নীচের সারণীতে দেখানো সমস্ত স্তরগুলিতে সেট করা মানগুলির একটি নোট করুন:

রাউটারে টাইমআউট (সেকেন্ড) ভার্চুয়াল হোস্টের সময়সীমা (সেকেন্ড) বার্তা প্রসেসরের সময়সীমা (সেকেন্ড) API প্রক্সিতে টাইমআউট (সেকেন্ড)
57 - 55 120

এই উদাহরণে,

  • 57 সেকেন্ডের ডিফল্ট মান রাউটারে কনফিগার করা আছে।
  • নির্দিষ্ট ভার্চুয়াল হোস্টে টাইমআউট মান সেট করা নেই। এর মানে হল যে এটি রাউটারে কনফিগার করা 57 সেকেন্ডের ডিফল্ট মান ব্যবহার করবে।
  • বার্তা প্রসেসরে, 55 সেকেন্ডের একটি ডিফল্ট মান কনফিগার করা হয়।
  • যাইহোক, নির্দিষ্ট API প্রক্সিতে, 120 সেকেন্ডের একটি মান কনফিগার করা হয়েছে।

মনে রাখবেন যে উচ্চতর টাইমআউট মান শুধুমাত্র API প্রক্সিতে কনফিগার করা হয়েছে, কিন্তু রাউটার এখনও 57 সেকেন্ডের সাথে কনফিগার করা আছে। সুতরাং, রাউটার 57 সেকেন্ডে টাইম আউট হয়ে যায় যখন মেসেজ প্রসেসর/ব্যাকএন্ড এখনও আপনার অনুরোধ প্রক্রিয়া করছে। এর ফলে রাউটার ক্লায়েন্ট অ্যাপ্লিকেশনে 504 Gateway Timeout ত্রুটির সাথে প্রতিক্রিয়া জানায়।

রেজোলিউশন

এই সমস্যাটি সমাধান করতে রাউটার এবং বার্তা প্রসেসরে সঠিক I/O টাইমআউট কনফিগার করতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন।

  1. Apigee Edge-এর মাধ্যমে API অনুরোধ প্রবাহের সাথে জড়িত বিভিন্ন উপাদানে কোন টাইমআউট মান সেট করা উচিত তা বোঝার জন্য I/O টাইমআউট কনফিগার করার জন্য সেরা অনুশীলনগুলি দেখুন।
  2. উপরের উদাহরণে, আপনি যদি নিশ্চিত হন যে একটি উচ্চতর টাইমআউট মান সেট করা দরকার কারণ ব্যাকএন্ড সার্ভারের জন্য দীর্ঘ সময়ের প্রয়োজন, এবং আপনি বার্তা প্রসেসরের টাইমআউট মান 120 সেকেন্ডে বাড়িয়েছেন, তাহলে একটি উচ্চতর টাইমআউট মান সেট করুন উদাহরণস্বরূপ : রাউটারে 123 seconds । নতুন টাইমআউট মানের কারণে সমস্ত API প্রক্সিগুলিকে প্রভাবিত না করতে, নির্দিষ্ট API প্রক্সিতে ব্যবহৃত নির্দিষ্ট ভার্চুয়াল হোস্টে 123 seconds মান সেট করুন।
  3. ভার্চুয়াল হোস্টে টাইমআউট সেট করতে রাউটারে I/O টাইমআউট কনফিগার করার নির্দেশাবলী অনুসরণ করুন।