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 के सार्वजनिक और निजी क्लाउड के उपयोगकर्ता

निदान के सामान्य चरण

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

ट्रेस टूल

ट्रेस टूल की मदद से, असफल अनुरोध का मैसेज आईडी तय करने के लिए:

  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 text.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 स्थिति प्रॉपर्टी के तुरंत बाद, गड़बड़ी पैनल में ये दोनों चीज़ें सेट की हों:
      • error.class: com.apigee.errors.http.server.ServiceUnavailableException
      • error.cause: Broken pipe

      alt_text

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

      अपवाद #1: java.io.IO पहाड़ी चैनल पर काम करते समय, पाइप खराब हो गया है

      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: onexceptWrite अपवाद: {}
      java.io.IOअपवाद: टूटा हुआ पाइप

      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 आउटपुट का सैंपल (मैसेज प्रोसेसर पर इकट्ठा किया गया):

    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 की सहायता टीम से संपर्क करें:

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

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

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

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