APM 용어와 개념 (APM Terms and Concepts)
APM UI는 애플리케이션 성능을 트러블슈팅하고 제품 전반에서 상관 관계를 맺을 수 있는 많은 도구를 제공해, 분산 시스템에서 문제를 찾고 해결할 수 있게 해줘요.
출처: 문서
본문
*스팬(spans)*과 인덱스됨(indexed) 같은 중요한 APM 용어의 추가 정의와 설명은 메인 Glossary를 참고해요.
| 개념 | 설명 |
|---|---|
| Service | 서비스는 현대 마이크로서비스 아키텍처의 구성 요소예요. 넓게 보면 애플리케이션을 구축하기 위해 엔드포인트, 쿼리, 잡을 함께 그룹화한 것이에요. |
| Resource | 리소스는 고객 애플리케이션의 특정 도메인을 나타내요. 전형적으로 계측된 웹 엔드포인트, 데이터베이스 쿼리 또는 백그라운드 잡이에요. |
| Monitors | APM 메트릭 모니터는 일반 메트릭 모니터처럼 동작하지만 APM에 특화된 제어 기능이 있어요. 이 모니터로 서비스 수준에서 hits, errors, 다양한 레이턴시 측정에 대한 알림을 받을 수 있어요. |
| Trace | trace는 애플리케이션이 요청을 처리하는 데 보낸 시간과 이 요청의 상태를 추적하는 데 사용해요. 각 trace는 하나 이상의 스팬으로 구성돼요. |
| Trace Context Propagation | 서비스 간에 trace 식별자를 전달하는 방법으로, Datadog가 개별 스팬을 하나의 완전한 분산 trace로 엮을 수 있게 해줘요. |
| Retention Filters | 보존 필터는 Datadog UI에서 설정하는 태그 기반 제어로, Datadog에서 15일 동안 인덱스할 스팬을 결정해요. |
| Ingestion Controls | 수집 제어는 trace의 최대 100%를 Datadog로 보내 15분 동안 라이브 검색과 분석을 가능하게 해요. |
| Instrumentation | 계측은 애플리케이션에 코드를 추가해 옵저버빌리티 데이터를 캡처하고 보고하는 과정이에요. |
| Baggage | Baggage는 trace, 메트릭, 로그 사이에 키-값 쌍으로 전달되는 컨텍스트 정보예요. |
서비스 (Services)
애플리케이션을 계측한 후 Catalog가 APM 데이터의 주요 랜딩 페이지가 돼요.
서비스는 현대 마이크로서비스 아키텍처의 구성 요소예요. 넓게 보면 인스턴스 확장을 위해 엔드포인트, 쿼리, 잡을 함께 그룹화한 것이에요. 예시:
- URL 엔드포인트 그룹은 API 서비스 아래에 함께 그룹화될 수 있어요.
- 데이터베이스 서비스 하나 안에 함께 그룹화된 DB 쿼리 그룹.
- crond 서비스에 구성된 주기적 잡 그룹.
아래 스크린샷은 이커머스 사이트 빌더를 위한 마이크로서비스 분산 시스템이에요. web-store, ad-server, payment-db, auth-service가 모두 APM에서 서비스로 표현돼요.
모든 서비스는 Catalog에서 찾을 수 있고 Service Map에 시각적으로 나타나요. 각 서비스에는 처리량, 레이턴시, 오류율 같은 trace 메트릭을 보고 조사할 수 있는 자체 Service page가 있어요. 이 메트릭으로 대시보드 위젯을 만들고, 모니터를 만들고, 서비스에 속한 웹 엔드포인트나 데이터베이스 쿼리 같은 모든 리소스의 성능을 볼 수 있어요.
💡 Service page에서 기대했던 HTTP 엔드포인트가 보이지 않나요? APM에서 엔드포인트는 서비스 이름뿐 아니라 trace의 엔트리포인트 스팬의
span.name으로도 서비스에 연결돼요. 예를 들어 위의 web-store 서비스에서web.request가 엔트리포인트 스팬이에요. 자세한 내용은 여기를 참고해요.
리소스 (Resources)
리소스는 고객 애플리케이션의 특정 도메인을 나타내요. 전형적으로 계측된 웹 엔드포인트, 데이터베이스 쿼리 또는 백그라운드 잡이에요. 웹 서비스에서 이 리소스는 정적 스팬 이름 web.request로 그룹화되는 동적 웹 엔드포인트가 될 수 있어요. 데이터베이스 서비스에서는 db.query 스팬 이름을 가진 데이터베이스 쿼리가 될 수 있어요. 예를 들어 web-store 서비스는 체크아웃 처리, 장바구니 업데이트, 항목 추가 등을 다루는 자동 계측된 리소스(웹 엔드포인트)를 가지고 있어요. 리소스 이름은 HTTP 메서드와 HTTP 라우트일 수 있어요(예: GET /productpage 또는 ShoppingCartController#checkout).
각 리소스에는 특정 엔드포인트에 범위가 좁혀진 trace 메트릭이 있는 자체 Resource page가 있어요. Trace 메트릭은 다른 Datadog 메트릭처럼 사용할 수 있어요 — 대시보드로 내보내거나 모니터를 만드는 데 쓸 수 있어요. Resource page는 모든 trace의 스팬에 대한 집계 보기, 요청의 레이턴시 분포, 이 엔드포인트로 보낸 요청을 보여주는 trace를 포함한 스팬 요약 위젯도 보여줘요.
Trace
trace는 애플리케이션이 요청을 처리하는 데 보낸 시간과 이 요청의 상태를 추적하는 데 사용해요. 각 trace는 하나 이상의 스팬으로 구성돼요. 요청 수명 동안 플레임 그래프 보기에서 서비스 간 분산 호출(trace-id는 HTTP 헤더를 통해 주입/추출), 자동 계측 라이브러리, OpenTracing 같은 오픈소스 도구를 사용하는 수동 계측을 볼 수 있어요. Trace View 페이지에서 각 trace는 로그를 trace에 연결, 스팬에 태그 추가, 런타임 메트릭 수집 등 플랫폼의 다른 부분과 연결하는 정보를 수집해요.
trace 컨텍스트 전파 (Trace context propagation)
trace 컨텍스트 전파는 분산 시스템에서 서비스 간에 trace 식별자를 전달하는 방법이에요. Datadog가 다른 서비스의 개별 스팬을 하나의 분산 trace로 엮을 수 있게 해줘요. trace 컨텍스트 전파는 요청이 시스템을 흐르면서 trace ID와 부모 스팬 ID 같은 식별자를 HTTP 헤더에 주입해서 작동해요. 다운스트림 서비스는 이 식별자를 추출하고 trace를 계속해요. 이렇게 해서 Datadog는 여러 서비스를 가로지르는 요청의 전체 경로를 재구성할 수 있어요.
자세한 내용은 애플리케이션 언어별 trace 컨텍스트 전파를 참고해요.
보존 필터 (Retention filters)
UI에서 태그 기반 필터를 설정해 Trace Search and Analytics와 함께 사용할 수 있도록 15일 동안 스팬을 인덱스해요.
수집 제어 (Ingestion controls)
서비스에서 trace의 100%를 Datadog로 보내고, 태그 기반 보존 필터와 결합해 비즈니스에 중요한 trace를 15일 동안 유지해요.
계측 (Instrumentation)
계측은 trace, 메트릭, 로그 같은 옵저버빌리티 데이터를 Datadog에 캡처·보고하도록 애플리케이션에 코드를 추가하는 과정이에요. Datadog는 다양한 프로그래밍 언어와 프레임워크용 계측 라이브러리를 제공해요.
Single Step Instrumentation으로 Datadog Agent를 설치할 때, 또는 코드에 Datadog SDK를 수동 추가할 때 애플리케이션을 자동 계측할 수 있어요.
애플리케이션 코드에 추적 코드를 직접 내장해 커스텀 계측을 사용할 수 있어요. 이렇게 하면 Datadog로 보낼 trace를 프로그래밍 방식으로 만들고, 수정하고, 삭제할 수 있어요.
자세한 내용은 Application Instrumentation을 읽어보세요.
Baggage
Baggage를 사용하면 분산 시스템에서 서비스 경계를 넘어 키-값 쌍(배기지 항목)을 전파할 수 있어요. trace 식별자에 초점을 맞추는 trace 컨텍스트와 달리, baggage는 trace와 함께 비즈니스 데이터와 기타 컨텍스트 정보를 전송할 수 있게 해줘요.
자세한 내용은 애플리케이션 언어별 지원되는 전파 형식을 읽어보세요.