Azure API Management 계측 (Instrumenting Azure API Management)
Datadog APM은 Azure API Management를 통과해 백엔드 서비스로 들어오는 요청에 대해 **유추 스팬(inferred spans)**을 생성해 엔드투엔드 트레이스, 서비스 맵, 샘플링을 지원해요.
출처: 문서
본문
Datadog APM은 Azure API Management를 통과해 백엔드 서비스로 들어오는 요청에 대해 유추 스팬을 생성할 수 있어요. 이 스팬은 API Management 게이트웨이를 기반으로 엔드투엔드 트레이스, 서비스 맵, 샘플링을 지원해요.
Azure API Management의 유추 스팬은 .NET, JavaScript(Node.js), Python, Java에서만 지원돼요. 다른 런타임(예: Go 또는 PHP)은 다른 게이트웨이에 대한 유추 스팬을 지원하더라도 Azure API Management 유추 스팬을 생성하지 않아요.
사전 요구 사항
- 애플리케이션 설정에
DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED=true가 설정되어 있어야 해요. - 백엔드가 아래 표의 지원되는 런타임, 최소 트레이서 버전, 웹 프레임워크를 사용해야 해요.
지원되는 런타임 및 웹 프레임워크
| 런타임 | Datadog 트레이서 | 최소 트레이서 버전 | 프레임워크 |
|---|---|---|---|
| Node.js | dd-trace-js |
v5.87.0+ | express, fastify, hapi, koa, microgateway-core, next, paperplane, restify, router, apollo |
| Python | dd-trace-py |
v4.6.0+ | aiohttp, asgi, bottle, cherrypy, django, djangorestframework, falcon, fastapi, flask, molten, pyramid, sanic, starlette, tornado, wsgi |
| .NET | dd-trace-dotnet |
v3.39.0+ | ASP.NET, ASP.NET Core |
| Java | dd-trace-java |
v1.64.0 | Servlet, Spring Web MVC, Spring WebFlux, Netty, Jetty, Tomcat, Undertow, Vert.x Web, Akka HTTP, Play, Ratpack, Grizzly, Liberty, Restlet, Synapse, Spray, Apache CXF, Axway API Gateway, Azure Functions |
설정
유추 스팬을 생성하려면 Azure API Management가 백엔드 서비스에 다음 헤더를 전달해야 해요:
| 헤더 | 값 |
|---|---|
x-dd-proxy |
azure-apim |
x-dd-proxy-request-time-ms |
Unix 밀리초 단위의 요청 타임스탬프 |
x-dd-proxy-httpmethod |
HTTP 메서드 (예: context.Operation.Method) |
x-dd-proxy-path |
URL 템플릿 (예: context.Operation.UrlTemplate) |
x-dd-proxy-region |
배포 리전 (예: context.Deployment.Region) |
x-dd-proxy-domain-name |
요청 호스트 (예: context.Request.OriginalUrl.Host) |
인바운드 정책
이 헤더가 백엔드로의 요청에 설정되도록 Azure API Management의 API 인바운드 섹션에 다음 정책을 추가해요:
<set-header name="x-dd-proxy" exists-action="override">
<value>azure-apim</value>
</set-header>
<set-header name="x-dd-proxy-request-time-ms" exists-action="override">
<value>@(new DateTimeOffset(context.Timestamp).ToUnixTimeMilliseconds().ToString())</value>
</set-header>
<set-header name="x-dd-proxy-httpmethod" exists-action="override">
<value>@(context.Operation.Method)</value>
</set-header>
<set-header name="x-dd-proxy-path" exists-action="override">
<value>@(context.Operation.UrlTemplate)</value>
</set-header>
<set-header name="x-dd-proxy-region" exists-action="override">
<value>@(context.Deployment.Region)</value>
</set-header>
<set-header name="x-dd-proxy-domain-name" exists-action="override">
<value>@(context.Request.OriginalUrl.Host)</value>
</set-header>
이 정책은 Azure 포털의 API Management > API > Design → Inbound processing → Code view에서 API 레벨에 추가하거나(Azure API Management 정책 설정 또는 편집), Azure API Management REST API를 사용하거나, API 정의에 정책으로 추가할 수 있어요.
샘플링 규칙 업데이트
Azure API Management 트레이싱을 사용할 때도 헤드 기반 샘플링이 적용돼요. 유추 스팬이 새 트레이스 루트가 되므로, 서비스 값이 Datadog에 표시되는 API Management 서비스 이름과 일치하도록 규칙을 업데이트해요.
예를 들어 원래 샘플링 규칙이 다음과 같다면:
DD_TRACE_SAMPLING_RULES='[{"service":"my-backend","sample_rate":0.5}]'
service 값이 Datadog에 표시되는 API Management API 이름과 일치하도록 규칙을 업데이트하거나, service 키를 제거해 규칙을 모든 루트 스팬에 적용해요:
DD_TRACE_SAMPLING_RULES='[{"service":"my-azure-apim-api","sample_rate":0.5}]'
또는 모든 루트 스팬에 적용:
DD_TRACE_SAMPLING_RULES='[{"sample_rate":0.5}]'