503 পরিষেবা উপলভ্য নেই - ব্যাকএন্ড সার্ভার দ্বারা অসম্পূর্ণ ক্লোজার

আপনি 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 টুল ব্যবহার করে ব্যর্থ অনুরোধের মেসেজ আইডি নির্ধারণ করতে:

  1. সমস্যাটি এখনও থাকলে, প্রভাবিত এপিআইয়ের জন্য ট্রেস সেশন চালু করুন।
  2. API কল করুন এবং সমস্যাটি আবার তৈরি করুন - 503 Service Unavailable সমস্যার কোড messaging.adaptors.http.flow.ServiceUnavailable.
  3. কাজ না করা অনুরোধগুলির মধ্যে একটি বেছে নিন।
  4. AX ফেজ-এ নেভিগেট করুন এবং মেসেজ আইডি নির্ধারণ করুন (X-Apigee.Message-ID) নিম্নলিখিত ছবিতে দেখানো ফেজ বিবরণ বিভাগে নিচে স্ক্রল করে অনুরোধ করুন।

    ফেজ বিবরণ বিভাগে মেসেজ আইডি

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

NGINX অ্যাক্সেস লগ ব্যবহার করে ব্যর্থ অনুরোধের মেসেজ আইডি নির্ধারণ করতে:

এছাড়াও, আপনি 503 সমস্যার জন্য মেসেজ আইডি নির্ধারণ করতে NGINX অ্যাক্সেস লগ দেখতে পারেন। অতীতে সমস্যা হয়ে থাকলে অথবা সমস্যাটি মাঝে মাঝে হলে এবং আপনি UI-তে ট্রেস ক্যাপচার করতে না পারলে এটি বিশেষভাবে উপযোগী। NGINX অ্যাক্সেস লগ থেকে এই তথ্য নির্ধারণ করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. NGINX অ্যাক্সেস লগ চেক করুন: (/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log)
  2. নির্দিষ্ট সময়সীমার মধ্যে নির্দিষ্ট API প্রক্সি সংক্রান্ত কোনও 503 সমস্যা আছে কিনা তা সার্চ করে দেখুন (যদি সমস্যাটি আগে ঘটে থাকে) অথবা 503-এর সাথে এখনও কোনও অনুরোধ ব্যর্থ হচ্ছে কিনা।
  3. 503 X-Apigee-fault-code messaging.adaptors.http.flow.ServiceUnavailable সংক্রান্ত কোনও সমস্যা থাকলে, নিচের উদাহরণে দেখানো হয়েছে এমন এক বা একাধিক অনুরোধের জন্য মেসেজ আইডি নোট করুন:

    503 সমস্যা সহ স্যাম্পেল এন্ট্রি

    স্ট্যাটাস কোড, মেসেজ আইডি, সমস্যার সোর্স ও সমস্যার কোড সহ এন্ট্রি

কারণ: টার্গেট সার্ভার কানেকশন অসম্পূর্ণ অবস্থায় বন্ধ করে দেয়

ডায়াগনসিস

  1. আপনি পাবলিক ক্লাউড বা প্রাইভেট ক্লাউড ব্যবহারকারী হলে:
    1. ট্রেস টুল ব্যবহার করুন (সাধারণ ডায়াগনসিস ধাপ-এ যেভাবে বলা হয়েছে) এবং রেকর্ড করা Analytics ডেটা প্যানেলে নিম্নলিখিত দুটি সেট করা আছে কিনা তা যাচাই করুন:
      • X-Apigee.fault-code: messaging.adaptors.http.flow.ServiceUnavailable
      • X-Apigee.fault-source: target

      alt_text

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

      alt_text

    3. আরও তদন্ত করতে tcpdump ব্যবহার করা লিঙ্কে যান।
  2. আপনি প্রাইভেট ক্লাউড ব্যবহারকারী হলে:
    • অনুরোধটি কেন কাজ করছে না তা বুঝতে মেসেজ আইডি দেখুন।
    • 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 pipe

      2021-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 ব্যবহার করা

  1. নিচের কমান্ড ব্যবহার করে ব্যাকএন্ড সার্ভার বা মেসেজ প্রসেসরে 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
    
  2. tcpdump ক্যাপচার করা বিশ্লেষণ করুন:

    tcpdump আউটপুটের নমুনা (মেসেজ প্রসেসরের উপর সংগ্রহ করা):

    alt_text

    উপরের tcpdump থেকে আপনি নিম্নলিখিত বিষয়গুলি দেখতে পাবেন:

    1. প্যাকেট 4-এ, মেসেজ প্রসেসর ব্যাকএন্ড সার্ভারে POST অনুরোধ পাঠিয়েছে।
    2. প্যাকেট 5, 8, 9, 10, 11-এ, মেসেজ প্রসেসর ব্যাকএন্ড সার্ভারে অনুরোধ পেলোড পাঠানো চালিয়ে গেছে।
    3. প্যাকেট 6 এবং 7-এ,মেসেজ প্রসেসরের থেকে পাওয়া অনুরোধের পেলোডের একটি অংশের জন্য ব্যাকএন্ড সার্ভার ACK দিয়ে উত্তর দিয়েছে।
    4. তবে, প্যাকেট 12-এ, প্রাপ্ত অ্যাপ্লিকেশন ডেটা প্যাকেটের জন্য ACK দিয়ে উত্তর দেওয়ার পরিবর্তে এবং তারপরে উত্তর পে-লোড দিয়ে উত্তর দেওয়ার পরিবর্তে, ব্যাকএন্ড সার্ভার FIN ACK দিয়ে উত্তর দেয় যা কানেকশন বন্ধ করার প্রক্রিয়া শুরু করে।
    5. এটি স্পষ্টভাবে দেখায় যে মেসেজ প্রসেসর এখনও অনুরোধের পেলোড পাঠাচ্ছিল, সেই সময় ব্যাকএন্ড সার্ভার কানেকশনটি অসম্পূর্ণভাবে বন্ধ করে দিচ্ছে ।
    6. এর ফলে মেসেজ প্রসেসর একটি IOException: Broken Pipe সমস্যা রেকর্ড করে এবং ক্লায়েন্টকে একটি 503 রিটার্ন করে

রেজোলিউশন

  1. ব্যাকএন্ড সার্ভার সাইডে অকালে ডিসকানেক্ট হয়ে যাওয়া সংক্রান্ত সমস্যা বিশ্লেষণ ও সমাধান করতে আপনার অ্যাপ্লিকেশন ও নেটওয়ার্কিং টিমের সাথে কাজ করুন।
  2. সম্পূর্ণ অনুরোধের পেলোড পাওয়ার আগে ব্যাকএন্ড সার্ভার অ্যাপ্লিকেশন টাইম-আউট বা কানেকশন রিসেট করছে না তা নিশ্চিত করুন।
  3. 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 মেসেজ প্রসেসর ও ব্যাকএন্ড সার্ভারে সংগ্রহ করা হয় যখন সমস্যা হয়