504 गेटवे का समय खत्म - राऊटर का समय खत्म हो गया

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

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

क्लाइंट ऐप्लिकेशन को इस मैसेज के साथ 504 का एचटीटीपी स्टेटस कोड मिलता है एपीआई कॉल के जवाब में Gateway Timeout.

गड़बड़ी के इस रिस्पॉन्स से पता चलता है कि क्लाइंट को Apigee Edge से समय पर जवाब नहीं मिला या बैकएंड सर्वर पर काम करता है.

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

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

HTTP/1.1 504 Gateway Time-out

cURL या किसी वेब ब्राउज़र का इस्तेमाल करके ऐसी प्रॉक्सी को कॉल करते समय, आपको यह गड़बड़ी दिख सकती है:

<!DOCTYPE html>
<html>
<head>
<title>Error</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>An error occurred.</h1>
<p>Sorry, the page you are looking for is currently unavailable.<br/>
Please try again later.</p>
</body>
</html>

टाइम आउट की वजह क्या है?

Edge प्लैटफ़ॉर्म से होकर एपीआई अनुरोध के लिए आम तौर पर क्लाइंट > राऊटर > मैसेज करें प्रोसेसर > बैकएंड सर्वर का इस्तेमाल कैसे किया जा सकता है, जैसा कि इस इमेज में दिखाया गया है:

Apigee Edge के रनटाइम फ़्लो में मौजूद सभी कॉम्पोनेंट, जैसे कि क्लाइंट, राऊटर, मैसेज प्रोसेसर और बैकएंड सर्वर, सही डिफ़ॉल्ट टाइम आउट वैल्यू के साथ सेट अप किए जाते हैं, ताकि यह भी पक्का करें कि एपीआई अनुरोधों को पूरा होने में ज़्यादा समय न लगे. अगर इसमें मौजूद किसी भी कॉम्पोनेंट में फ़्लो को टाइम आउट कॉन्फ़िगरेशन का पालन करता है, तो खास कॉम्पोनेंट टाइम आउट हो जाएगा और आम तौर पर 504 Gateway Timeoutगड़बड़ी.

इस प्लेबुक में बताया गया है कि 504 गड़बड़ी को कैसे ठीक करें और राऊटर का समय खत्म हो गया है.

राऊटर पर टाइम आउट हो गया

Apigee Edge में, राऊटर पर कॉन्फ़िगर किया गया डिफ़ॉल्ट टाइम आउट 57 सेकंड है. यह सबसे ज़्यादा है Edge पर एपीआई अनुरोध मिलने से लेकर, एपीआई प्रॉक्सी को एक्ज़ीक्यूट करने का समय जवाब को वापस भेजा जाता है. इसमें बैकएंड रिस्पॉन्स और लागू की जाने वाली सभी नीतियां शामिल होती हैं. डिफ़ॉल्ट टाइमआउट को राऊटर/वर्चुअल होस्ट पर बदला जा सकता है. इस बारे में ज़्यादा जानकारी यहां दी गई है राऊटर पर I/O टाइम आउट कॉन्फ़िगर करना.

संभावित कारण

Edge में, 504 Gateway Timeout गड़बड़ी की आम वजहें: राऊटर का समय खत्म हो रहा है:

वजह ब्यौरा इसके लिए लागू होने वाले, समस्या हल करने के निर्देश
रूटर पर टाइम आउट का गलत कॉन्फ़िगरेशन ऐसा तब होता है, जब राऊटर को गलत I/O टाइम आउट के साथ कॉन्फ़िगर किया गया हो. Edge के सार्वजनिक और प्राइवेट क्लाउड उपयोगकर्ता

गड़बड़ी की जांच करने के सामान्य तरीके

इस गड़बड़ी का पता लगाने के लिए, इनमें से किसी एक टूल/तकनीक का इस्तेमाल करें:

  • एपीआई मॉनिटरिंग
  • NGINX ऐक्सेस लॉग

एपीआई मॉनिटरिंग

एपीआई मॉनिटरिंग का इस्तेमाल करके, गड़बड़ी का पता लगाने के लिए:

  1. विश्लेषण करें > एपीआई मॉनिटरिंग > पेज की जांच करें.
  2. 5xx गड़बड़ियों को फ़िल्टर करें और समयसीमा चुनें.
  3. समय के हिसाब से स्टेटस कोड प्लॉट करें.
  4. ज़्यादा जानकारी देखने और 504 गड़बड़ियां देखने के लिए, उस सेल पर क्लिक करें जिसमें गड़बड़ियां दिख रही हैं इन गड़बड़ियों के बारे में लॉग करता है, जैसा कि नीचे दिखाया गया है:

    504 गड़बड़ियां दिखाने वाला उदाहरण

  5. दाईं ओर मौजूद पैनल में, लॉग देखें पर क्लिक करें.

    ट्रैफ़िक लॉग विंडो से, 504 की कुछ गड़बड़ियों के लिए, नीचे दी गई जानकारी को ध्यान से देखें:

    • अनुरोध: यह कॉल करने के लिए इस्तेमाल किया जाने वाला अनुरोध का तरीका और यूआरआई उपलब्ध कराता है
    • जवाब का समय: इससे अनुरोध के लिए बीता हुआ कुल समय मिलता है.

    ऊपर दिए गए उदाहरण में,

    • अनुरोध , GET /test-timeout के बारे में है.
    • जवाब देने का समय 57.001 सेकंड है. इससे पता चलता है कि राऊटर मैसेज प्रोसेसर के जवाब देने से पहले टाइम आउट हो गया हो, क्योंकि वैल्यू बहुत पास होती है डिफ़ॉल्ट I/O टाइम आउट पर सेट किया गया है, जो राऊटर पर सेट है, जो 57 है सेकंड.

    एपीआई मॉनिटरिंग का इस्तेमाल करके, सभी लॉग देखे जा सकते हैं GET लॉग एपीआई. उदाहरण के लिए, org, env, timeRange के लिए लॉग क्वेरी करके, और status के साथ ही, आप जहां चाहें, वहां लेन-देन के सभी लॉग डाउनलोड कर सकेंगे क्लाइंट का समय खत्म हो गया.

    एपीआई मॉनिटरिंग की सुविधा, इन 504 के लिए प्रॉक्सी को - (not set) पर सेट करती है या फिर आप एपीआई (लॉग API) का इस्तेमाल करके वर्चुअल होस्ट और पाथ से जुड़ी प्रॉक्सी का इस्तेमाल किया जा सकता है.

    उदाहरण के लिए :

    curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
    
  6. 504 की अन्य गड़बड़ियों के लिए, जवाब देने में लगने वाला समय देखें और जांच करें यह देखने के लिए कि जवाब देने का समय एक जैसा है या नहीं (रूटर पर I/O टाइम आउट मान सेट किया गया है) जो कि 57 सेकंड है) 504 गड़बड़ियों को पूरा करता है.

NGINX ऐक्सेस लॉग

NGINX ऐक्सेस लॉग का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:

  1. NGINX ऐक्सेस लॉग देखें:
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  2. यह देखने के लिए खोजें कि किसी खास अवधि के दौरान कोई 504 गड़बड़ी हुई है या नहीं (अगर समस्या पहले हुई है) या कोई अनुरोध अब भी पूरा नहीं हो पा रहा है 504.
  3. कुछ 504 गड़बड़ियों के लिए, नीचे दी गई जानकारी का ध्यान रखें:
    • जवाब देने में लगने वाला समय
    • अनुरोध URI

    इस उदाहरण में, हमें नीचे दी गई जानकारी दिखती है:

    • अनुरोध का समय: 57.001 सेकंड. इससे पता चलता है कि राऊटर का समय 57.001 सेकंड बाद खत्म हो गया.

    • अनुरोध: GET /test-timeout
    • होस्ट का उपनाम: myorg-test.apigee.net
  4. देखें कि अनुरोध का समय और I/O टाइम आउट एक जैसा है या नहीं को राऊटर/वर्चुअल होस्ट पर कॉन्फ़िगर किया गया हो. अगर हां, तो इसका मतलब है कि राऊटर का समय इस अवधि में मैसेज प्रोसेसर ने जवाब नहीं दिया.

    ऊपर दिखाई गई NGINX ऐक्सेस लॉग एंट्री के उदाहरण में, अनुरोध 57.001 सेकंड का समय, डिफ़ॉल्ट I/O टाइम आउट सेट के काफ़ी करीब है ट्रैक कर रही हूँ. इससे साफ़ तौर पर पता चलता है कि मैसेज भेजने से पहले राऊटर का समय खत्म हो गया प्रोसेसर जवाब दे सकता है.

  5. उस एपीआई प्रॉक्सी का पता लगाएं जिसके लिए, अनुरोध करें फ़ील्ड का इस्तेमाल करें.

वजह: राऊटर पर टाइम आउट का गलत कॉन्फ़िगरेशन

संक्रमण की जांच

  1. देखें कि क्या 504 गड़बड़ियां इसलिए हुई हैं, क्योंकि राऊटर का समय खत्म हो चुका है तो मैसेज प्रोसेसर जवाब दे सका. ऐसा करने के लिए, यह देखें कि एपीआई मॉनिटरिंग में जवाब देने का समय/राऊटर में अनुरोध करने का समय (दोनों फ़ील्ड एक ही जानकारी को निरूपित करते हैं,लेकिन उन्हें अलग-अलग नामों से पुकारा जाता है) राऊटर/वर्चुअल होस्ट और फ़ील्ड गलत सोर्स, गड़बड़ी का सोर्स पर I/O टाइम आउट कॉन्फ़िगर किया गया एपीआई मॉनिटरिंग या NGINX ऐक्सेस का इस्तेमाल करके, प्रॉक्सी और गलत कोड को - पर सेट किया गया है लॉग देखें, जैसा कि सामान्य विश्लेषण के तरीके में बताया गया है.
  2. देखें कि राऊटर या किसी खास वर्चुअल होस्ट पर, I/O टाइम आउट की वैल्यू कॉन्फ़िगर की गई है या नहीं मैसेज प्रोसेसर या किसी एपीआई प्रॉक्सी पर कॉन्फ़िगर किए गए कॉन्फ़िगरेशन की तुलना में कम.

    ऐसा करने के लिए, इस सेक्शन में दिया गया तरीका अपनाएं.

वर्चुअल होस्ट पर I/O टाइम आउट की पुष्टि करना

Edge यूज़र इंटरफ़ेस (यूआई)

Edge यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके वर्चुअल होस्ट के टाइम आउट की पुष्टि करने के लिए, यह तरीका अपनाएं:

  1. Edge के यूज़र इंटरफ़ेस (यूआई) में लॉगिन करें.
  2. एडमिन > वर्चुअल होस्ट.
  3. कोई ऐसा एनवायरमेंट चुनें जिसमें आपको टाइम आउट की समस्या हो रही हो.
  4. वह वर्चुअल होस्ट चुनें जिसके लिए आपको I/O टाइम आउट वैल्यू की पुष्टि करनी है.
  5. प्रॉपर्टी में जाकर, प्रॉक्सी रीड टाइमआउट वैल्यू को सेकंड में देखें.

    ऊपर दिए गए उदाहरण में, प्रॉक्सी को पढ़ने का टाइम आउट को इस वैल्यू से कॉन्फ़िगर किया गया है: 120. इसका मतलब है कि इस वर्चुअल होस्ट पर कॉन्फ़िगर किया गया I/O टाइम आउट 120 सेकंड है.

मैनेजमेंट एपीआई

नीचे दिए गए मैनेजमेंट एपीआई का इस्तेमाल करके भी प्रॉक्सी रीड टाइम आउट की पुष्टि की जा सकती है:

  1. लागू करें नीचे दिखाए गए तरीके से virtualhost कॉन्फ़िगरेशन पाने के लिए, वर्चुअल होस्ट एपीआई पाएं:

    सार्वजनिक क्लाउड उपयोगकर्ता

    curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUALHOST_NAME -u USERNAME
    

    निजी Cloud उपयोगकर्ता

    curl -v -X GET http://MANAGEMENT_SERVER_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/v/virtualhosts/VIRTUALHOST_NAME -u USERNAME
    

    कहां:

    ORGANIZATION_NAME, संगठन का नाम है

    ENVIRONMENT_NAME एनवायरमेंट का नाम है

    VIRTUALHOST_NAME, वर्चुअल होस्ट का नाम है

  2. proxy_read_timeout प्रॉपर्टी के लिए कॉन्फ़िगर की गई वैल्यू देखें

    वर्चुअल होस्ट की परिभाषा का सैंपल

    {
      "hostAliases": [
        "api.myCompany,com",
      ],
      "interfaces": [],
      "listenOptions": [],
      "name": "secure",
      "port": "443",
      "retryOptions": [],
      "properties": {
        "property": [
          {
            "name": "proxy_read_timeout",
            "value": "120"
          }
        ]
      },
      "sSLInfo": {
        "ciphers": [],
        "clientAuthEnabled": "false",
        "enabled": "true",
        "ignoreValidationErrors": false,
        "keyAlias": "myCompanyKeyAlias",
        "keyStore": "ref://myCompanyKeystoreref",
        "protocols": []
      },
      "useBuiltInFreeTrialCert": false
    }
    

    ऊपर दिए गए उदाहरण में, proxy_read_timeout को 120. इसका मतलब है कि इस वर्चुअल होस्ट पर कॉन्फ़िगर किया गया I/O टाइम आउट 120 है सेकंड.

राऊटर.प्रॉपर्टी फ़ाइल पर I/O टाइम आउट की पुष्टि की जा रही है

  1. राऊटर मशीन में लॉगिन करें.
  2. इसमें proxy_read_timeout प्रॉपर्टी खोजें /opt/nginx/conf.d डायरेक्ट्री में जाकर देखें कि उसे नई वैल्यू के साथ सेट किया गया है या नहीं इस तरह से:
    grep -ri "proxy_read_timeout" /opt/nginx/conf.d
    
  3. किसी वर्चुअल प्रॉपर्टी में, proxy_read_timeout प्रॉपर्टी के लिए सेट की गई वैल्यू देखें होस्ट कॉन्फ़िगरेशन फ़ाइल.

    ग्रेप कमांड से मिले नतीजे का सैंपल

    /opt/nginx/conf.d/0-default.conf:proxy_read_timeout 57;
    /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;
    

    ऊपर दिए गए उदाहरण के आउटपुट में, ध्यान दें कि प्रॉपर्टी proxy_read_timeout में को 0-default.conf में नए मान 57 के साथ सेट किया गया है जो कि डिफ़ॉल्ट वर्चुअल होस्ट के लिए कॉन्फ़िगरेशन फ़ाइल. इससे पता चलता है कि I/O टाइम आउट यह है डिफ़ॉल्ट वर्चुअल होस्ट के लिए राऊटर पर 57 सेकंड पर कॉन्फ़िगर किया गया है. अगर आपके पास एकाधिक वर्चुअल होस्ट, आपको उनमें से प्रत्येक के लिए यह जानकारी दिखाई देगी. कन्वर्ज़न रेट के फ़ायदे पाएं एपीआई बनाने के लिए इस्तेमाल किए गए खास वर्चुअल होस्ट के लिए proxy_read_timeout वे कॉल जो 504 गड़बड़ियों के साथ पूरे नहीं हो सके.

एपीआई प्रॉक्सी में I/O टाइम आउट की पुष्टि की जा रही है

I/O टाइम आउट को यहां देखा जा सकता है:

  • एपीआई प्रॉक्सी का टारगेट एंडपॉइंट
  • एपीआई प्रॉक्सी की सेवाकॉलआउट नीति
एपीआई प्रॉक्सी के टारगेट एंडपॉइंट में I/O टाइम आउट देखें
  1. Edge के यूज़र इंटरफ़ेस (यूआई) में, वह एपीआई प्रॉक्सी चुनें जिसमें आपको I/O देखना है टाइम आउट मान.
  2. वह टारगेट एंडपॉइंट चुनें जिसकी जांच करनी है.
  3. नीचे दिए गए कॉलम में, सही वैल्यू के साथ io.timeout.millis प्रॉपर्टी देखें TargetEndpoint में <HTTPTargetConnection> एलिमेंट कॉन्फ़िगरेशन.

    उदाहरण के लिए, इस कोड में I/O टाइम आउट 120 सेकंड पर सेट है:

    <Properties>
      <Property name="io.timeout.millis">120000</Property>
    </Properties>
    
एपीआई प्रॉक्सी की Serviceकॉलआउट नीति में, I/O टाइम आउट देखें
  1. Edge के यूज़र इंटरफ़ेस (यूआई) में, वह एपीआई प्रॉक्सी चुनें जिसमें आपको नया I/O देखना है सेवाकॉलआउट नीति के लिए टाइम आउट वैल्यू.
  2. वह सेवा कॉलआउट नीति चुनें जिसकी आपको जांच करनी है.
  3. नीचे दिए गए टैग में, सही वैल्यू के साथ <Timeout> एलिमेंट देखें <ServiceCallout> कॉन्फ़िगरेशन.

    उदाहरण के लिए, नीचे दिए गए कोड का I/O टाइम आउट 120 सेकंड होगा:

    <Timeout>120000</Timeout>
    

मैसेज प्रोसेसर पर, I/O टाइम आउट की पुष्टि करना

  1. मैसेज प्रोसेसर मशीन में लॉगिन करें.
  2. इसमें HTTPTransport.io.timeout.millis प्रॉपर्टी खोजें /opt/apigee/edge-message-processor/conf डायरेक्ट्री में इस निर्देश का इस्तेमाल किया जा रहा है:

    grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
    

    आउटपुट का सैंपल

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
    
  3. ऊपर दिए गए उदाहरण में, ध्यान दें कि प्रॉपर्टी HTTPTransport.io.timeout.millis को 55000 मान के साथ सेट कर दिया गया है http.properties. इससे पता चलता है कि I/O टाइम आउट को, मैसेज प्रोसेसर पर 55 सेकंड.

राऊटर और मैसेज प्रोसेसर पर कॉन्फ़िगर किया गया टाइम आउट तय करने के बाद, पुष्टि करें कि राऊटर/वर्चुअल होस्ट को मैसेज प्रोसेसर/एपीआई प्रॉक्सी.

जैसा कि नीचे दी गई टेबल में दिखाया गया है, सभी लेयर पर सेट की गई वैल्यू को नोट कर लें:

राऊटर पर टाइम आउट हो गया (सेकंड) वर्चुअल होस्ट पर टाइम आउट हो गया (सेकंड में) मैसेज प्रोसेसर पर टाइम आउट हो गया (सेकंड में) एपीआई प्रॉक्सी पर टाइम आउट (सेकंड)
57 - 55 120

इस उदाहरण में,

  • 57 सेकंड की डिफ़ॉल्ट वैल्यू, राऊटर पर कॉन्फ़िगर की जाती है.
  • टाइम आउट मान किसी खास वर्चुअल होस्ट पर सेट नहीं है. इसका मतलब है कि यह राऊटर पर कॉन्फ़िगर की गई 57 सेकंड की डिफ़ॉल्ट वैल्यू.
  • मैसेज प्रोसेसर पर, 55 सेकंड की डिफ़ॉल्ट वैल्यू कॉन्फ़िगर की गई है.
  • हालांकि, किसी खास एपीआई प्रॉक्सी पर, 120 सेकंड की वैल्यू कॉन्फ़िगर की जाती है.

ध्यान दें कि ज़्यादा टाइम आउट वैल्यू को सिर्फ़ एपीआई प्रॉक्सी पर कॉन्फ़िगर किया जाता है, लेकिन राऊटर अब भी को 57 सेकंड के साथ कॉन्फ़िगर किया गया है. इसलिए, राऊटर पर संदेश भेजने के समय 57 सेकंड पर समय खत्म हो जाता है प्रोसेसर/बैकएंड अब भी आपके अनुरोध को प्रोसेस कर रहा है. इससे राऊटर फिर से क्लाइंट ऐप्लिकेशन में 504 Gateway Timeout गड़बड़ी.

रिज़ॉल्यूशन

राऊटर और मैसेज पर I/O टाइम आउट सही तरीके से कॉन्फ़िगर करने के लिए, यह तरीका अपनाएं इस समस्या को हल करने के लिए प्रोसेसर.

  1. इससे संदर्भ लें I/O टाइम आउट को कॉन्फ़िगर करने के सबसे सही तरीके, ताकि यह समझा जा सके कि टाइम आउट की कौनसी वैल्यू इस्तेमाल की जा सकती हैं इसे Apigee Edge के ज़रिए, एपीआई अनुरोध फ़्लो में शामिल अलग-अलग कॉम्पोनेंट पर सेट किया जाना चाहिए.
  2. ऊपर दिए गए उदाहरण में, अगर आपको पक्का पता है कि ज़्यादा टाइम आउट की वैल्यू सेट करने की ज़रूरत है क्योंकि बैकएंड सर्वर को लोड होने में ज़्यादा समय लगेगा. इसलिए, आपने टाइम आउट को बढ़ा दिया है का मान 120 सेकंड कर दें, फिर इसके लिए उच्च टाइमआउट मान सेट करें उदाहरण: राऊटर पर 123 seconds. सभी एपीआई प्रॉक्सी पर असर डालने से बचने के लिए समय खत्म होने की नई वैल्यू की वजह से, सिर्फ़ 123 seconds का मान खास वर्चुअल होस्ट, जिसका इस्तेमाल किसी खास एपीआई प्रॉक्सी में किया जाता है.
  3. इसमें दिए गए निर्देशों का पालन करें वर्चुअल होस्ट पर टाइम आउट सेट करने के लिए, राऊटर पर I/O टाइम आउट कॉन्फ़िगर करना.