본문 바로가기
WIKI 기술 지식 베이스

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}]'

더 알아보기 (Learn more)