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 के सार्वजनिक और निजी क्लाउड के उपयोगकर्ता |
निदान के सामान्य चरण
पूरे न होने वाले अनुरोध का मैसेज आईडी पता करें
ट्रेस टूल
ट्रेस टूल की मदद से, असफल अनुरोध का मैसेज आईडी तय करने के लिए:
- अगर यह समस्या अब भी हल नहीं हुई है, तो उस एपीआई के लिए ट्रेस सेशन को चालू करें जिस पर असर पड़ा है.
- एपीआई कॉल करें और समस्या को फिर से बताएं -
503 Service Unavailable
गड़बड़ी कोडmessaging.adaptors.http.flow.ServiceUnavailable.
के साथ - असफल अनुरोधों में से किसी एक को चुनें.
- AX फ़ेज़ पर जाएं और नीचे दिए गए डायग्राम में चरण की जानकारी सेक्शन में नीचे की ओर स्क्रोल करके, अनुरोध का मैसेज आईडी
(
X-Apigee.Message-ID
) तय करें.
NGINX के ऐक्सेस लॉग
NGINX ऐक्सेस लॉग का इस्तेमाल करके, पूरे न होने वाले अनुरोध का मैसेज आईडी तय करने के लिए:
503
गड़बड़ियों का मैसेज आईडी तय करने के लिए, NGINX ऐक्सेस लॉग भी देखे जा सकते हैं.
यह सुविधा खास तौर पर तब मददगार होती है, जब समस्या पहले भी हुई हो या बीच-बीच में समस्या आ रही हो और आपको यूज़र इंटरफ़ेस (यूआई) में ट्रेस कैप्चर नहीं हो पा रहा हो. NGINX ऐक्सेस लॉग से यह जानकारी पाने के लिए, नीचे दिया गया तरीका अपनाएं:
- NGINX के ऐक्सेस लॉग देखें: (
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
) - यह देखें कि तय किए गए समय (अगर यह समस्या पहले हुई है) के दौरान किसी खास एपीआई प्रॉक्सी के लिए
503
गड़बड़ियां तो नहीं हैं या503
से जुड़े कोई अनुरोध अब भी पूरे नहीं हो पा रहे हैं. - अगर X-Apigee-fault-code text.adaptors.http.flow.ServiceUnavailable में
503
गड़बड़ियां हैं, तो ऐसे एक या उससे ज़्यादा अनुरोधों के मैसेज आईडी का ध्यान रखें, जैसा कि यहां दिए गए उदाहरण में दिखाया गया है:503
गड़बड़ी दिखाने वाली सैंपल एंट्री
वजह: टारगेट सर्वर, कनेक्शन को समय से पहले बंद कर देता है
संक्रमण की जांच
- अगर आप पब्लिक क्लाउड या प्राइवेट क्लाउड के उपयोगकर्ता हैं:
- ट्रेस टूल का इस्तेमाल करें (जैसा कि सामान्य तरीकों में बताया गया है)
और पुष्टि करें कि आपके पास Analytics डेटा में रिकॉर्ड किया गया पैनल में ये दोनों चीज़ें सेट हैं:
- X-Apigee.fault-code:
messaging.adaptors.http.flow.ServiceUnavailable
- X-Apigee.fault-source:
target
- X-Apigee.fault-code:
- ट्रेस टूल का इस्तेमाल करें (जैसा कि गड़बड़ी की जानकारी के सामान्य तरीके में बताया गया है)
और पुष्टि करें कि आपने
TARGET_REQ_FLOW
स्थिति प्रॉपर्टी के तुरंत बाद, गड़बड़ी पैनल में ये दोनों चीज़ें सेट की हों:- error.class:
com.apigee.errors.http.server.ServiceUnavailableException
- error.cause:
Broken pipe
- error.class:
- आगे की जांच के लिए, tcpdump का इस्तेमाल करना पर जाएं.
- ट्रेस टूल का इस्तेमाल करें (जैसा कि सामान्य तरीकों में बताया गया है)
और पुष्टि करें कि आपके पास Analytics डेटा में रिकॉर्ड किया गया पैनल में ये दोनों चीज़ें सेट हैं:
- अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं:
- सफल न होने वाले अनुरोध का मैसेज आईडी तय करें.
- मैसेज प्रोसेसर लॉग
(
/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 का इस्तेमाल करना
-
बैकएंड सर्वर या मैसेज प्रोसेसर पर, यहां दिए गए निर्देशों का इस्तेमाल करके
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
- कैप्चर किए गए
tcpdump
का विश्लेषण करें:tcpdump आउटपुट का सैंपल (मैसेज प्रोसेसर पर इकट्ठा किया गया):
ऊपर दिए गए
tcpdump
में, आपको यह जानकारी दिख सकती है:- पैकेट
4
में, मैसेज प्रोसेसर ने बैकएंड सर्वर कोPOST
का अनुरोध भेजा. - पैकेट
5
,8
,9
,10
,11
में, मैसेज प्रोसेसर ने बैकएंड सर्वर पर, अनुरोध पेलोड भेजना जारी रखा. - पैकेट
6
और7
में, बैकएंड सर्वर ने मैसेज प्रोसेसर से मिले अनुरोध पेलोड के एक हिस्से के लिए,ACK
का जवाब दिया. - हालांकि, पैकेट
12
में मिलने वाले ऐप्लिकेशन डेटा पैकेट के लिए,ACK
का इस्तेमाल करने और रिस्पॉन्स पेलोड के साथ रिस्पॉन्स देने के बजाय, बैकएंड सर्वर कनेक्शन के बंद होने के बारे में बताने के लिए,FIN ACK
रिस्पॉन्स देता है. - इससे साफ़ तौर पर पता चलता है कि जब मैसेज प्रोसेसर अनुरोध पेलोड भेज रहा था, तब बैकएंड सर्वर समय से पहले कनेक्शन को बंद कर रहा था.
- ऐसा करने पर मैसेज प्रोसेसर,
IOException: Broken Pipe
गड़बड़ी रिकॉर्ड करता है और क्लाइंट को503
दिखाता है
- पैकेट
रिज़ॉल्यूशन
- बैकएंड सर्वर साइड पर, समय से पहले डिसकनेक्ट होने की समस्या का विश्लेषण करने और उसे ठीक करने के लिए, अपने ऐप्लिकेशन और नेटवर्किंग टीमों में से किसी एक या दोनों के साथ काम करें.
- पक्का करें कि पूरा अनुरोध पेलोड पाने से पहले, बैकएंड सर्वर ऐप्लिकेशन टाइम आउट या कनेक्शन को रीसेट न कर रहा हो.
- अगर आपके पास 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
इकट्ठा किया गया