모래성 말고 철옹성

[Elasticsearch] Elastic APM 본문

DevOps/Monitoring & Observability

[Elasticsearch] Elastic APM

JDhyeok 2025. 8. 11. 00:26

Elastic APM 이란

  • Elastic 플랫폼 위에 구축된 APM(Application Performance Monitoring) 시스템
  • 소프트웨어 서비스를 실시간으로 모니터링할 수 있게 함
    • 응답 시간에 대한 자세한 성능 정보를 수집
    • 예: 데이터베이스 쿼리, 캐시 호출, HTTP 요청 등
  • 처리되지 않은 오류 및 예외를 자동으로 수집
    • 오류는 주로 stacktrace를 기반으로 그룹화
    • 새로운 오류가 발생했을 때 쉽게 식별하고, 발생 횟수도 파악할 수 있음
  • 호스트 수준의 기본 메트릭과 에이전트 별 메트릭 모니터링도 지원

Elastic APM 의 구성요소

  • Elastic APM 은 네 가지 요소로 구성
    • APM agents
    • Elastic APM integration
    • Elasticsearch
    • Kibana
  • 일반적으로 이 네 가지 구성 요소로 구성된 아키텍처에는 두 가지 방법 존재

Elastic APM 아키텍처

출처: Elasticsearch

  • 서비스단에서 APM 에이전트 실행
  • 데이터를 중앙 APM 통합 시스템으로 전송
  • 서비스는 기술에 맞는 APM 에이전트로 계측
  • Go, Java, Python 등 언어 및 프레임워크에 맞춰 사용
  • Elastic Stack 은 Elastic Cloud 또는 self-managed 방식 둘 다 가능

출처: Elasticsearch

  • 서비스가 있는 서버에서 APM 에이전트 + APM 통합 실행
  • APM 확장(Scale-out)이 필요할 때 사용
  • 중앙 Elastic Agent를 통해 등록 및 관리

Data model

  • Elastic APM 에이전트는 다양한 유형의 이벤트를 수집
  • 이벤트는 아래와 같은 유형
    • Span: 실행된 특정 코드 경로에 대한 정보를 포함
    • Transactions: 서비스나 애플리케이션을 계측하는 Elastic APM 에이전트가 수집한 이벤트를 설명
    • Errors: 예외(exception)나 로그 메시지가 일치하는 오류들을 그룹화
    • Metrics: 기본적인 호스트 수준 및 에이전트 관련 메트릭을 제공

분산 추적 (Distributed Tracing)

  • trace는 공통 루트를 가진 트랜잭션과 스팬의 집합
  • 분산추적 (distributed tracing)은 MSA 전반의 성능을 하나의 뷰에서 분석할 수 있도록 도와줌

분산 추적을 어떻게 가능하게 하는 지?

  • Elastic APM은 모든 요청을 추적할 수 있음
    • 초기 fronted 요청부터 시작하여
    • backend와 쿼리까지 추적
  • 헤더에 트레이스 컨텍스트 추가
traceparent: xxx----            // header

9kdfkqg9qjqkjfb09q4jklrkjqer=   // trace id
ythjk3k4kbnkf                   // parent span id
  • trace id가 요청 간에 전파
  • 동일한 트레이스 ID를 가진 요청은 개별 서비스에서 하나의 트레이스 개요로 연결

실사용자 모니터링(Real User Monitoring, RUM)

  • 웹 브라우저와 같은 클라이언트에서 사용자의 상호작용을 캡처
    • 대표적으로 JavaScript 에이전트
    • APM 통합에서 RUM 엔드포인트를 활성화
  • 애플리케이션에 대한 유용한 인사이트를 제공
    • 클라이언트 측 애플리케이션 내의 성능 문제
    • 서버 측 애플리케이션의 지연 시간
    • 가장 많이 사용되는 브라우저, 디바이스 및 플랫폼 식별 등등

Head-based sampling vs Tail-based sampling

출처: Elasticsearch

  • Head-based sampling
    • 기본적은 Elastic APM 샘플링 방식
    • 트레이스가 시작될 때 무작위 샘플링 결정을 내리고, 이후의 각 서비스는 초기 결정을 그대로 유지
    • 고정 비율 방식은 트래픽이 적은 애플리케이션에서 효율적
    • ex. 전체 트랜잭션의 50%를 기록

출처: Elasticsearch

  • Tail-based sampling
    • APM 통합 설정에서 테일 기반 샘플링(tail-based sampling)을 활성화하여 사용
    • 샘플링 결정은 트레이스가 완료된 후 규칙이나 정책에 따라 이루어짐
    • 대규모 트래픽 애플리케이션에서 더 세밀한 샘플링 제어를 제공
    • ex.성공한 요청의 50%를 기록하고, 실패한 요청은 100% 기록

샘플링 비율

  • 가장 좋은 샘플링 비율은? 정답은 X
  • 샘플링은 데이터 특성, 애플리케이션 처리량, 데이터 보관 정책 등 여러 요인에 따라 상이함
  • 다만, 에이전트를 전체 트랜잭션의 0.1(10%) 정도 기록하도록 설정하는 것이 보통 시작점

 

Reference

https://www.elastic.co/docs/solutions/observability/apm/transaction-sampling

반응형

'DevOps > Monitoring & Observability' 카테고리의 다른 글

[Elasticsearch] Agent 종류와 작동 방식  (0) 2025.08.11
[Elasticsearch] Logs  (2) 2025.08.05
[Elasticsearch] Fleet & Elastic Agent  (1) 2025.08.03
[Elasticsearch] Uptime  (2) 2025.08.03
[Elasticsearch] Observability 란  (1) 2025.08.03
Comments