피해야 할 패턴: 자바스크립트 정책을 사용하여 서드 파티 서버에 데이터 로그

Apigee Edge 문서입니다.
Go to the Apigee X documentation.
info

로깅은 문제를 디버깅하는 효율적인 방법 중 하나입니다. 헤더, 양식 매개변수, 쿼리 매개변수, 동적 변수 등과 같은 API 요청에 대한 모든 정보를 로깅하여 나중에 참조할 수 있습니다. 이 정보는 메시지 프로세서 (Apigee Edge for Private Cloud만 해당)에서 로컬로 로깅하거나 Sumo Logic, Splunk 또는 Loggly와 같은 서드 파티 서버에 로깅할 수 있습니다.

안티패턴

아래 코드에서 httpClient 객체는 JavaScript 정책에서 데이터를 Sumo Logic 서버에 로깅하는 데 사용됩니다. 즉, 로깅 프로세스가 실제로 요청/응답 처리 중에 발생합니다. 이 접근 방식은 처리 시간을 추가하여 전반적인 지연 시간을 늘리므로 비생산적입니다.

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

여기서 문제는 로깅 프로세스가 완료될 때까지 호출자의 작업을 일시중지하는 waitForComplete() 호출입니다. 유효한 패턴은 이 호출을 삭제하여 비동기식으로 만드는 것입니다.

영향

  • JavaScript 정책을 통해 로깅 코드를 실행하면 API 요청의 지연 시간이 늘어납니다.
  • 동시 요청은 메시지 프로세서의 리소스에 부담을 줄 수 있으며 결과적으로 다른 요청의 처리에 부정적인 영향을 미칠 수 있습니다.

권장사항

  • MessageLogging 정책을 사용하여 데이터를 로그 서버 또는 서드 파티 로그 관리 서비스(예: Sumo Logic, Splunk, Loggly 등)로 전송/로깅합니다.
  • 메시지 로깅 정책의 가장 큰 장점은 요청 클라이언트 앱에 응답이 다시 전송된 후에 실행되는 Post Client Flow에서 정의할 수 있다는 것입니다.
  • Post Client Flow에서 이 정책을 정의하면 로깅 활동과 요청/응답 처리를 분리하여 지연 시간을 방지할 수 있습니다.
  • JavaScript를 통해 로깅을 수행해야 하는 특정 요구사항 또는 이유가 있는 경우 (위에서 언급한 Post Client Flow 옵션이 아님) 비동기식으로 수행해야 합니다. 즉, httpClient 객체를 사용하는 경우 JavaScript가 않도록 waitForComplete 구현하지 않도록 해야 합니다.

추가 자료