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

<ph type="x-smartling-placeholder"></ph> Vous consultez la documentation Apigee Edge.
Accédez à la page Documentation sur Apigee X.
En savoir plus

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

Antimodèle

Dans le code ci-dessous, l'objet httpClient d'une stratégie JavaScript est utilisé pour consigner les données dans un Serveur Sumo Logic. Cela signifie que le processus de journalisation a effectivement lieu pendant le traitement des requêtes et réponses. Cette approche est contre-productive, car elle augmente le temps de traitement ce qui augmente 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 coupable ici est l'appel à waitForComplete(), qui suspend l'appel de l'appelant des opérations jusqu'à la fin du processus de journalisation. Un modèle valide consiste à rendre cette fonction en éliminant cet appel.

Impact

  • L'exécution du code de journalisation par le biais de la règle JavaScript augmente la latence de l'API. requête.
  • Les requêtes simultanées peuvent solliciter les ressources du processeur de messages et, par conséquent, n'affectera pas le traitement d'autres demandes.

Bonne pratique

  • Utilisez la règle MessageLogging pour transférer/journaliser les données vers les serveurs de journaux ou les journaux tiers. services de gestion tels que Sumo Logic, Splunk, Loggly, etc.
  • Le principal avantage de la règle de journalisation des messages est qu'elle peut être définie Le flux client, qui est exécuté une fois que la réponse est renvoyée à l'application cliente à l'origine de la demande
  • Définir cette règle dans le flux Post-Client permet de séparer l'activité de journalisation et traiter les requêtes/réponses, ce qui permet d'éviter les latences.
  • S'il y a une exigence spécifique ou une raison d'effectuer la journalisation via JavaScript (pas le Post l'option de flux client mentionnée ci-dessus), elle doit être effectuée de manière asynchrone. Autrement dit, si vous utilisez un objet httpClient, vous devez vous assurer que le code JavaScript waitForComplete ne doit PAS être implémenté.

Documentation complémentaire