504 Délai avant expiration de la passerelle – Délai d'inactivité de la lecture cible

Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Il n'existe pas de documentation Apigee Edge équivalente pour ce sujet.

Symptôme

Ce problème apparaît en tant qu'erreur Gateway Timeout avec l'état HTTP 504.

Message d'erreur

Vous pouvez rencontrer cette erreur dans API Monitoring, Debug ou d'autres outils. Le motif TARGET_READ_TIMEOUT indique que l'environnement d'exécution Apigee n'a pas reçu de réponse en temps opportun de la cible lors de l'exécution d'une requête.

La valeur par défaut du délai avant expiration de la lecture (io.timeout.millis) est de 55 secondes. Ce qui signifie que si la cible ne répond pas au bout de 55 secondes, Apigee génère l'erreur suivante :

{"fault":{"faultstring":"Gateway Timeout",
  "detail":{"errorcode":"messaging.adaptors.http.flow.GatewayTimeout",
  "reason":"TARGET_READ_TIMEOUT"}}}

Causes possibles :

Cause Description Instructions de dépannage applicables
Cible lente La cible ne produit pas de réponse en temps opportun. Apigee X et Apigee hybrid
Problème de connectivité de TargetServer Il existe un problème de connectivité générale avec la cible lorsque <LoadBalancer> est configuré sur le TargetEndpoint. Apigee X et Apigee hybrid

Cause : cible lente

Diagnostic

Vous pouvez diagnostiquer un problème de cible lent à l'aide de l'outil Debug d'Apigee :

  1. Créez une session de débogage pour votre proxy d'API.
  2. Dans la session de débogage, envoyez une requête et inspectez le résultat de débogage.

Comme vous pouvez le voir dans l'exemple ci-dessus, la requête cible a dépassé 55 secondes, ce qui correspond au délai avant expiration cible par défaut. Le délai avant expiration est configurable. Si vous avez modifié le délai avant expiration, la durée de la requête cible correspond au délai avant expiration que vous avez défini. Par exemple, si votre délai avant expiration est de 10 secondes, dans ce scénario, la requête cible expire au bout de 10 secondes. Un comportement de "cible lent" indique clairement que la cible ne répond pas à une requête à temps.

Solution

Apigee vous recommande d'éviter d'utiliser des cibles lentes. Par exemple, si la latence cible normale est de 50 ms et que vous rencontrez une latence de 55 000 ms, vous devrez peut-être déterminer s'il existe un problème avec la cible.

Si vous devez augmenter le délai avant expiration, procédez comme suit :

  1. Sélectionnez l'onglet Développer dans l'éditeur de proxy.
  2. Dans le volet de navigation, sélectionnez le point de terminaison cible concerné.
  3. Dans l'éditeur XML, recherchez l'élément XML HTTPTargetConnection :

  4. Ajoutez la propriété io.timeout.millis sous l'élément <HTTPTargetConnection> et spécifiez la nouvelle limite de temps en millisecondes, par exemple :
    <HTTPTargetConnection>
      <URL>https://my-very-slow-target.example.com</URL>
      <Properties>
        <Property name="io.timeout.millis">120000</Property>
      </Properties>
    </HTTPTargetConnection>

    Dans l'exemple ci-dessus, le délai avant expiration est augmenté à 120 secondes. Notez que la limite maximale est de 300 secondes. Pour en savoir plus, consultez la documentation de référence sur les propriétés des points de terminaison.

  5. Enregistrez la nouvelle révision et déployez le proxy.

Si le problème persiste, consultez la page Vous devez collecter des informations de diagnostic ci-dessous.

Cause : problème de connectivité du TargetServer

Diagnostic

Apigee ne révèle pas la cause exacte d'un problème de connectivité lorsque vous configurez la propriété de point de terminaison <LoadBalancer>. Vous pouvez toutefois déduire la cause d'un problème de connectivité à partir du temps écoulé de la requête cible. En tant que méthode de débogage, vous pouvez essayer de supprimer complètement l'élément <LoadBalancer> et d'atteindre la cible directement dans le proxy.

Pour diagnostiquer le problème, utilisez l'outil Debug.

  1. Créez une session de débogage pour votre proxy d'API.
  2. Dans la session de débogage, envoyez une requête et inspectez le résultat de débogage.

Dans l'exemple ci-dessus, le délai avant expiration a pris neuf secondes. Comme il ne s'agit pas de 55 secondes, vous savez que la cause de l'erreur n'est pas que le délai avant expiration a été dépassé en raison d'une cible lente. Par défaut, Apigee relance une connexion deux fois de plus si l'élément <LoadBalancer> est utilisé sur point de terminaison cible. Étant donné que vous savez que la connexion a été tentée trois fois au total et que le délai avant expiration par défaut pour une erreur de connexion est de trois secondes (connect.timeout.millis), vous pouvez supposer qu'il s'agit d'un problème de connectivité.

Solution

Si le problème est confirmé comme étant un délai d'expiration de connexion, consultez la section Erreur "Service indisponible" du service 503 d'appairage de VPC avec TARGET_CONNECT_TIMEOUT.

Pour tout autre problème, supprimez l'élément <LoadBalancer> pour déboguer et afficher le code d'erreur exact, puis recherchez le code dans le catalogue d'erreurs.

Vous devez collecter des informations de diagnostic

Si le problème persiste, même après avoir suivi les instructions ci-dessus, rassemblez les informations de diagnostic suivantes, puis contactez l'assistance Google Cloud :

  1. ID du projet et nom de l'organisation Apigee
  2. Noms des proxys et environnement
  3. Période concernée par le problème
  4. Fréquence du problème
  5. Nom d'hôte cible
  6. Session de débogage présentant le problème