503 सेवा उपलब्ध नहीं है - बैकएंड सर्वर, समय से पहले बंद हो जाए

आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं.
जानकारी

समस्या का ब्यौरा

एपीआई प्रॉक्सी कॉल के बाद, क्लाइंट ऐप्लिकेशन को Service Unavailable मैसेज के साथ एचटीटीपी रिस्पॉन्स स्टेटस 503 मिलता है.

गड़बड़ी का मैसेज

क्लाइंट ऐप्लिकेशन को यह रिस्पॉन्स कोड मिलता है:

HTTP/1.1 503 Service Unavailable

इसके अलावा, आपको गड़बड़ी का यह मैसेज भी दिख सकता है:

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

संभावित वजहें

वजह ब्यौरा इनके लिए समस्या हल करने के निर्देश
टारगेट सर्वर, कनेक्शन को समय से पहले बंद कर देता है टारगेट सर्वर, कनेक्शन को समय से पहले बंद कर देता है. ऐसा तब होता है, जब मैसेज प्रोसेसर अब भी अनुरोध पेलोड भेज रहा होता है. Edge Public और Private Cloud के उपयोगकर्ताओं के लिए

गड़बड़ी का पता लगाने के सामान्य चरण

अनुरोध पूरा न होने पर, मैसेज आईडी का पता लगाना

ट्रेस टूल

ट्रेस टूल का इस्तेमाल करके, अनुरोध पूरा न होने पर मिलने वाले मैसेज आईडी का पता लगाने के लिए:

  1. अगर समस्या अब भी बनी हुई है, तो जिस एपीआई पर असर पड़ा है उसके लिए ट्रेस सेशन चालू करें.
  2. एपीआई कॉल करें और समस्या को दोबारा हल करें - 503 Service Unavailable गड़बड़ी कोड messaging.adaptors.http.flow.ServiceUnavailable. के साथ
  3. उन अनुरोधों में से किसी एक को चुनें जो पूरे नहीं हुए.
  4. AX फ़ेज़ पर जाएं. इसके बाद, अनुरोध का मैसेज आईडी (X-Apigee.Message-ID) पता करें. इसके लिए, फ़ेज़ की जानकारी सेक्शन में नीचे की ओर स्क्रोल करें. यह सेक्शन, यहां दी गई इमेज में दिखाया गया है.

    'फ़ेज़ की जानकारी' सेक्शन में मौजूद मैसेज आईडी

NGINX ऐक्सेस लॉग

NGINX ऐक्सेस लॉग का इस्तेमाल करके, अनुरोध पूरा न होने का मैसेज आईडी पता करने के लिए:

503 गड़बड़ियों के लिए मैसेज आईडी का पता लगाने के लिए, NGINX के ऐक्सेस लॉग भी देखे जा सकते हैं. यह खास तौर पर तब काम आता है, जब समस्या पहले भी हो चुकी हो या समस्या कभी-कभी होती हो और यूज़र इंटरफ़ेस (यूआई) में ट्रेस कैप्चर न किया जा सके. NGINX के ऐक्सेस लॉग से यह जानकारी पाने के लिए, यह तरीका अपनाएं:

  1. NGINX के ऐक्सेस लॉग देखें: (/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log)
  2. खोजें कि क्या किसी खास समयावधि के दौरान, किसी खास एपीआई प्रॉक्सी के लिए कोई 503 गड़बड़ी हुई है (अगर समस्या पहले हुई थी) या क्या अब भी कोई अनुरोध 503 के साथ पूरा नहीं हो रहा है.
  3. अगर X-Apigee-fault-code messaging.adaptors.http.flow.ServiceUnavailable से जुड़ी कोई 503 गड़बड़ी है, तो ऐसे एक या उससे ज़्यादा अनुरोधों के लिए मैसेज आईडी नोट करें. यहां दिए गए उदाहरण में दिखाया गया है कि मैसेज आईडी कैसे नोट किया जाता है:

    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 पैन में ये दोनों सेट हों:
      • error.class: com.apigee.errors.http.server.ServiceUnavailableException
      • error.cause: Broken pipe

      alt_text

    3. ज़्यादा जानकारी के लिए, tcpdump का इस्तेमाल करना लेख पढ़ें.
  2. अगर आप Private Cloud के उपयोगकर्ता हैं, तो:
    • अनुरोध पूरा न होने पर, मैसेज आईडी का पता लगाएं.
    • मैसेज प्रोसेसर के लॉग में मैसेज आईडी खोजें (/opt/apigee/var/log/edge-message-processor/logs/system.log).
    • आपको इनमें से कोई एक अपवाद दिखेगा:

      अपवाद #1: 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)

      या

      अपवाद #2: 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
    • इन दोनों अपवादों से पता चलता है कि मैसेज प्रोसेसर, अनुरोध के पेलोड को बैकएंड सर्वर पर लिख रहा था. इसी दौरान, बैकएंड सर्वर ने कनेक्शन को समय से पहले बंद कर दिया. इसलिए, Message Processor 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 का सैंपल आउटपुट (Message Processor पर इकट्ठा किया गया):

    alt_text

    ऊपर दिए गए tcpdump में, आपको यह जानकारी दिखेगी:

    1. पैकेट 4 में, मैसेज प्रोसेसर ने बैकएंड सर्वर को POST अनुरोध भेजा.
    2. पैकेट 5, 8, 9, 10, 11 में, मैसेज प्रोसेसर ने अनुरोध पेलोड को बैकएंड सर्वर को भेजना जारी रखा.
    3. पैकेट 6 और 7 में,बैकएंड सर्वर ने Message Processor से मिले अनुरोध के पेलोड के एक हिस्से के लिए ACK के साथ जवाब दिया.
    4. हालांकि, पैकेट 12 में, मिले हुए ऐप्लिकेशन डेटा पैकेट के लिए ACK के साथ जवाब देने और इसके बाद रिस्पॉन्स पेलोड के साथ जवाब देने के बजाय, बैकएंड सर्वर FIN ACK के साथ जवाब देता है. इससे कनेक्शन बंद हो जाता है.
    5. इससे साफ़ तौर पर पता चलता है कि मैसेज प्रोसेसर, अनुरोध पेलोड भेज रहा था. हालांकि, बैकएंड सर्वर ने कनेक्शन को समय से पहले ही बंद कर दिया.
    6. इस वजह से, मैसेज प्रोसेसर एक IOException: Broken Pipe गड़बड़ी रिकॉर्ड करता है और क्लाइंट को 503 भेजता है

रिज़ॉल्यूशन

  1. अपनी ऐप्लिकेशन और नेटवर्किंग टीमों के साथ मिलकर, बैकएंड सर्वर साइड पर समय से पहले कनेक्शन बंद होने की समस्या का विश्लेषण करें और उसे ठीक करें.
  2. पक्का करें कि बैकएंड सर्वर ऐप्लिकेशन, पूरे अनुरोध पेलोड को पाने से पहले कनेक्शन को टाइम आउट या रीसेट न कर रहा हो.
  3. अगर आपके पास Apigee और बैकएंड सर्वर के बीच कोई इंटरमीडियरी नेटवर्किंग डिवाइस या लेयर है, तो पक्का करें कि पूरा अनुरोध पेलोड मिलने से पहले उनका टाइम आउट न हो.

अगर समस्या अब भी बनी रहती है, तो गड़बड़ी की जानकारी इकट्ठा करना ज़रूरी है पर जाएं.

डाइग्नोस्टिक जानकारी इकट्ठा करना ज़रूरी है

अगर ऊपर दिए गए निर्देशों का पालन करने के बाद भी समस्या बनी रहती है, तो यहां दी गई डाइग्नोस्टिक जानकारी इकट्ठा करें. इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें:

अगर आप पब्लिक क्लाउड के उपयोगकर्ता हैं, तो यह जानकारी दें:

  • संगठन का नाम
  • परिवेश का नाम
  • एपीआई प्रॉक्सी का नाम
  • 503 गड़बड़ी को फिर से बनाने के लिए, curl कमांड पूरी करें
  • अनुरोध वाली ट्रेस फ़ाइल, जिसमें 503 Service Unavailable गड़बड़ी है
  • अगर फ़िलहाल 503 गड़बड़ियां नहीं हो रही हैं, तो उस समयावधि की जानकारी दें, जब 503 गड़बड़ियां हुई थीं. साथ ही, टाइमज़ोन की जानकारी भी दें.

अगर आप Private Cloud के उपयोगकर्ता हैं, तो यह जानकारी दें:

  • अनुरोध पूरे न होने पर, गड़बड़ी का पूरा मैसेज दिखता है
  • संगठन, एनवायरमेंट का नाम, और एपीआई प्रॉक्सी का नाम, जिनके लिए आपको 503 गड़बड़ियां दिख रही हैं
  • एपीआई प्रॉक्सी बंडल
  • 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 गड़बड़ी होने पर, मैसेज प्रोसेसर और बैकएंड सर्वर पर इकट्ठा किया गया