웹 애플리케이션 액세스 연동¶
APM은 DDTrace, Zipkin, Skywalking, Jaeger, Opentelemetry 수집기를 통해 웹 애플리케이션의 프런트엔드에서 백엔드까지의 전체 요청 데이터를 추적할 수 있습니다.
프런트엔드의 RUM 데이터와 백엔드에 주입된 trace_id를 사용하여 호출 스택을 빠르게 찾을 수 있습니다.
전제 조건¶
- 해당 웹 애플리케이션 대상 서버에 DDTrace, Skywalking, Opentelemetry, Jaeger, Zipkin를 구성합니다.
- 프런트엔드와 백엔드가 분리된 프런트엔드 애플리케이션(크로스 오리진 조건이 있는 경우)의 경우 대상 서버에서 추적을 허용할 프런트엔드 요청의 응답 헤더에 대해 Header 화이트리스트를 설정해야 합니다.
각 APM 도구에 따라 Access-Control-Allow-Headers 요청 헤더의 Key는 다음과 같습니다.
- ddtrace:
x-datadog-parent-id,x-datadog-origin,x-datadog-sampling-priority,x-datadog-trace-id - skywalking:
sw8 - jaeger:
uber-trace-id - zipkin:
X-B3-TraceId,X-B3-SpanId,X-B3-ParentSpanId,X-B3-Sampled,X-B3-Flags - zipkin_single_header:
b3 - w3c_traceparent:
traceparent - opentelemetry: 이 유형은
zipkin_single_header,w3c_traceparent,zipkin,jaeger세 가지 유형의 구성 방식을 지원하며, RUM SDK에서 구성된 traceType 클래스에 따라 해당 헤더를 추가합니다.
Python 예시:
app = Flask(__name__)
api = Api(app)
@app.after_request
def after_request(response):
...
response.headers.add('Access-Control-Allow-Headers', 'x-datadog-parent-id,x-datadog-sampled,x-datadog-sampling-priority,x-datadog-trace-id')
....
return response
....
참고
대상 서버는 HTTP 서비스를 사용해야 합니다.
프런트엔드 RUM 설정 단계¶
- 프런트엔드 애플리케이션에 RUM SDK를 도입합니다.
- 초기화 구성에
allowedTracingOrigins매개변수를 추가하여 추적이 허용되는 프런트엔드 요청 origin의 화이트리스트를 구성합니다. 문자열 배열 또는 정규식일 수 있습니다. (origin의 정의:<scheme> "://" <hostname> [ ":" <port> ])
예시:
import { datafluxRum } from '@cloudcare/browser-rum'
datafluxRum.init({
applicationId: '<DATAFLUX_APPLICATION_ID>',
datakitOrigin: '<DATAKIT ORIGIN>',
traceType: 'ddtrace', // ddtrace, zipkin, skywalking_v3, jaeger, zipkin_single_header, w3c_traceparent
... // 기타 구성
allowedTracingOrigins: ["https://api.example.com", /https:\/\/.*\.my-api-domain\.com/]
})