Anti-Pattern: Daten mithilfe der JavaScript-Richtlinie auf Drittanbieterservern protokollieren

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Logging ist eine der effizienten Möglichkeiten zum Beheben von Problemen. Die Informationen zur API-Anfrage, z. B. Header, Formularparameter, Abfrageparameter, dynamische Variablen usw., können zur späteren Referenz protokolliert werden. Die Informationen können lokal auf den Message Processorn (nur Apigee Edge für Private Cloud) oder auf Drittanbieterservern wie Sumo Logic, Splunk oder Loggly protokolliert werden.

Anti-Pattern

Im folgenden Code wird das Objekt httpClient in einer JavaScript-Richtlinie verwendet, um die Daten auf einem Sumo Logic-Server zu protokollieren. Das bedeutet, dass der Logging-Prozess während der Verarbeitung von Anfragen/Antworten stattfindet. Dieser Ansatz ist kontraproduktiv, da er die Verarbeitungszeit verlängert und dadurch die Gesamtlatenzen erhöht.

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();

Die Ursache ist der Aufruf von waitForComplete(), durch den die Vorgänge des Aufrufers ausgesetzt werden, bis der Logging-Prozess abgeschlossen ist. Ein gültiges Muster besteht darin, dies asynchron zu machen, indem dieser Aufruf eliminiert wird.

Auswirkungen

  • Die Ausführung des Logging-Codes über die JavaScript-Richtlinie erhöht die Latenz der API-Anfrage.
  • Gleichzeitige Anfragen können die Ressourcen des Message Processor belasten und sich somit nachteilig auf die Verarbeitung anderer Anfragen auswirken.

Best Practices

  • Verwenden Sie die MessageLogging-Richtlinie, um Daten an Logserver oder Logverwaltungsdienste von Drittanbietern wie Sumo Logic, Splunk, Loggly usw. zu übertragen bzw. zu protokollieren.
  • Der größte Vorteil der Nachrichtenprotokollierungsrichtlinie besteht darin, dass sie im Post-Client-Ablauf definiert werden kann, der ausgeführt wird, nachdem die Antwort an die anfordernde Client-App zurückgesendet wurde.
  • Durch die Definition dieser Richtlinie im Post-Client-Ablauf werden die Logging-Aktivitäten und die Anfrage-/Antwortverarbeitung getrennt und so Latenzen vermieden.
  • Wenn es eine bestimmte Anforderung oder einen Grund für die Protokollierung über JavaScript gibt (nicht die oben erwähnte Option für den Post-Client-Ablauf), muss dies asynchron erfolgen. Mit anderen Worten: Wenn du ein httpClient-Objekt verwendest, musst du darauf achten, dass waitForComplete NICHT von JavaScript implementiert wird.

Weitere Informationen