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

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

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

안티패턴

아래 코드에서는 JavaScript 정책httpClient 객체가 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 흐름에 이 정책을 정의하면 로깅 활동과 요청/응답 처리를 분리하여 지연 시간을 피하는 데 도움이 됩니다.
  • JavaScript를 통해 로깅해야 하는 특정 요구사항이나 이유가 있는 경우 (위에서 언급한 Post Client 흐름 옵션 아님) 이를 비동기식으로 수행해야 합니다. 즉, httpClient 객체를 사용하는 경우 자바스크립트가 waitForComplete를 구현하지 않도록 해야 합니다.

추가 자료