Antimodèle: consigner les données dans les serveurs tiers à l'aide de la règle JavaScript

Vous consultez la documentation d'Apigee Edge.
Consultez la documentation Apigee X.
en savoir plus

La journalisation est l'un des moyens efficaces de déboguer les problèmes. Les informations sur la requête API, telles que les en-têtes, les paramètres de formulaire, les paramètres de requête, les variables dynamiques, etc., peuvent toutes être enregistrées pour référence ultérieure. Les informations peuvent être enregistrées localement sur les processeurs de messages (Apigee Edge pour Private Cloud uniquement) ou sur des serveurs tiers tels que Sumo Logic, Splunk ou Loggly.

Antimodèle

Dans le code ci-dessous, l'objet httpClient d'une règle JavaScript est utilisé pour consigner les données sur un serveur Sumo Logic. Cela signifie que le processus de journalisation a lieu lors du traitement de la requête/réponse. Cette approche est contre-productive, car elle allonge le temps de traitement, augmentant ainsi les latences globales.

LogData_JS:

<!-- /antipatterns/examples/1-4.xml -->
<Javascript async="false" continueOnError="false" enabled="true" timelimit="2000" name="LogData_JS">
  <DisplayName>LogData_JS</DisplayName>
  <ResourceURL>jsc://LogData.js</ResourceURL>
</Javascript>

LogData.js:

<!-- /antipatterns/examples/1-5.xml -->
var sumoLogicURL = "...";
httpClient.send(sumoLogicURL);
waitForComplete();

Le problème ici est l'appel à waitForComplete(), qui suspend les opérations de l'appelant jusqu'à la fin du processus de journalisation. Un modèle valide consiste à rendre cet appel asynchrone en éliminant cet appel.

Impact

  • L'exécution du code de journalisation via la règle JavaScript augmente la latence de la requête API.
  • Les requêtes simultanées peuvent stresser les ressources du processeur de messages et, par conséquent, nuire au traitement des autres requêtes.

Bonnes pratiques

  • Utilisez la règle MessageLogging pour transférer/consigner des données vers des serveurs de journaux ou vers des services tiers de gestion des journaux tels que Sumo Logic, Splunk, Loggly, etc.
  • Le principal avantage de la stratégie de journalisation des messages est qu'elle peut être définie dans le flux post-client, qui est exécuté une fois la réponse renvoyée à l'application cliente à l'origine de la demande.
  • La définition de cette règle dans le flux post-client permet de séparer l'activité de journalisation et le traitement des requêtes/réponses, ce qui permet d'éviter les latences.
  • Si vous avez une exigence spécifique ou une raison particulière d'effectuer la journalisation via JavaScript (et non via l'option de flux post-client mentionnée ci-dessus), vous devez l'effectuer de manière asynchrone. En d'autres termes, si vous utilisez un objet httpClient, vous devez vous assurer que le JavaScript n'implémente PAS waitForComplete.

Complément d'informations