503 পরিষেবা অনুপলব্ধ - ব্যাকএন্ড সার্ভার দ্বারা অকাল বন্ধ

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

উপসর্গ

ক্লায়েন্ট অ্যাপ্লিকেশনটি একটি API প্রক্সি কলের পরে Service Unavailable বার্তা সহ একটি HTTP প্রতিক্রিয়া স্থিতি 503 পায়৷

ভুল বার্তা

ক্লায়েন্ট অ্যাপ্লিকেশন নিম্নলিখিত প্রতিক্রিয়া কোড পায়:

HTTP/1.1 503 Service Unavailable

উপরন্তু, আপনি নিম্নলিখিত ত্রুটি বার্তা পর্যবেক্ষণ করতে পারেন:

{
   "fault": {
      "faultstring": "The Service is temporarily unavailable",
      "detail": {
           "errorcode": "messaging.adaptors.http.flow.ServiceUnavailable"
       }
    }
}

সম্ভবপর কারন

কারণ বর্ণনা সমস্যা সমাধানের নির্দেশাবলী প্রযোজ্য
টার্গেট সার্ভার অকালে সংযোগ বন্ধ করে দেয় টার্গেট সার্ভার অকালে সংযোগটি শেষ করে দেয় যখন বার্তা প্রসেসর এখনও অনুরোধ পেলোড পাঠাচ্ছে। এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা

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

ব্যর্থ অনুরোধের বার্তা আইডি নির্ধারণ করুন

ট্রেস টুল

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

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

    Message ID in Phase Details section

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. যদি X-Apigee-fault-code messaging.adaptors.http.flow.ServiceUnavailable এর সাথে কোনো 503 ত্রুটি থাকে, তাহলে নিম্নলিখিত উদাহরণে দেখানো এক বা একাধিক অনুরোধের জন্য বার্তা আইডিটি নোট করুন:

    নমুনা এন্ট্রি 503 ত্রুটি দেখাচ্ছে

    Sample entry showing status code, message ID, fault source, and fault code

কারণ: টার্গেট সার্ভার অকালে সংযোগ বন্ধ করে দেয়

রোগ নির্ণয়

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

      বিকল্প পাঠ

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

      বিকল্প পাঠ

    3. আরও তদন্তের জন্য tcpdump ব্যবহারে যান।
  2. আপনি যদি ব্যক্তিগত ক্লাউড ব্যবহারকারী হন:
    • ব্যর্থ অনুরোধের বার্তা আইডি নির্ধারণ করুন
    • মেসেজ প্রসেসর লগ ( /opt/apigee/var/log/edge-message-processor/logs/system.log ) এ বার্তা আইডি খুঁজুন।
    • আপনি নিম্নলিখিত ব্যতিক্রমগুলির মধ্যে একটি দেখতে পাবেন:

      ব্যতিক্রম #1: java.io.IOException: চ্যানেল 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)
      

      বা

      ব্যতিক্রম #2: onExceptionWrite ব্যতিক্রম: {}
      java.io.IOException: ভাঙ্গা পাইপ

      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 সমাধান করা ব্যাকএন্ড সার্ভারের আইপি ঠিকানা এবং পোর্ট নম্বর নির্দেশ করে।
    • উপরের ত্রুটি বার্তায় 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 আউটপুট (মেসেজ প্রসেসরে সংগৃহীত):

    বিকল্প পাঠ

    উপরের 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 ত্রুটি ঘটেছে টাইমজোন তথ্য সহ সময়কাল প্রদান করুন।

আপনি যদি একজন ব্যক্তিগত ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্য প্রদান করুন:

  • ব্যর্থ অনুরোধের জন্য পরিলক্ষিত সম্পূর্ণ ত্রুটি বার্তা
  • প্রতিষ্ঠান, পরিবেশের নাম এবং API প্রক্সি নাম যার জন্য আপনি 503 ত্রুটি পর্যবেক্ষণ করছেন
  • API প্রক্সি বান্ডেল
  • 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 বার্তা প্রসেসর এবং ব্যাকএন্ড সার্ভারে জড়ো হয়েছিল যখন ত্রুটি ঘটেছে