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
Il est possible que cette erreur s'affiche dans l'API Monitoring, dans Debug ou dans d'autres outils. La raisonTARGET_READ_TIMEOUT
indique que l'environnement d'exécution Apigee n'a pas reçu de réponse rapide 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é du serveur cible | Un problème de connectivité général se produit avec la cible lorsque <LoadBalancer> est configuré sur 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 :
- Créez une session de débogage pour votre proxy d'API.
- Dans la session de débogage, envoyez une requête et inspectez la sortie 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. Ce comportement "cible lente" 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 :
- Sélectionnez l'onglet Développer dans l'éditeur de proxy.
- Dans le volet de navigation, sélectionnez le point de terminaison cible concerné.
- Dans l'éditeur XML, recherchez l'élément XML
HTTPTargetConnection
:
- 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.
- 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.
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>
. Cependant, vous pourrez peut-être déduire la cause d'un problème de connectivité à partir du temps écoulé de la requête cible. Pour déboguer, 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 de débogage.
- Créez une session de débogage pour votre proxy d'API.
- Dans la session de débogage, envoyez une requête et inspectez la sortie 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 d'autres problèmes, supprimez l'élément <LoadBalancer>
pour déboguer et afficher le code d'erreur exact, puis recherchez le code dans le catalogue des 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 :
- ID du projet et nom de l'organisation Apigee
- Noms des proxys et environnement
- Période concernée par le problème
- Fréquence du problème
- Nom d'hôte cible
- Session de débogage présentant le problème