본문 바로가기

데이터베이스/ELK

Elastic APM

1. APM

APM은 Application Performance Monitoring의 약어로, Application에 대한 성능 정보 및 발생한 에러 정보 그리고 Application이 동작중인 서버의 기본적인 Metric 정보를 수집할 수 있는 기능을 지원한다.

또한, MicroService 환경에서 서비스를 구성하는 여러 Application 간의 Request를 하나의 Trace로 묶어서 추적할 수 있는 분산 Tracing(distribute tracing)에 대한 기능도 지원한다.

APM은 위와 같이 수집된 여러 데이터를 바탕으로 하여 Application에 지연이 발생하였을때, 지연에 대한 병목 구간을 찾아 낼 수 있는 모니터링 서비스 이다.

 

 

2. APM 시스템 아키텍처

Elastic APM은 데이터를 수집 하기 위한 APM Agent수집된 데이터의 가공을 위한 APM Server로 구성된다.


APM Server를 통해 수집된 데이터는 최종적으로 Elasticsearch에 적제되어 Kibana의 APM UI를 이용하여 조회 가능하다.

  • APM Agent
    • 실시간으로 Performance 및 error 데이터를 수집 하여 APM Server로 전달
    • APM 서버 연동 실패시 데이터 저장을 위한 memory buffer가 존재 함
  • APM Server
    • APM Agent에서 수집된 데이터에 대한 유효성 체크
    • 수집된 데이터를 Elasticsearch의 Document 포멧으로 변환
  • Elasticsearch
    • APM 데이터에 대한 저장, 검색, 분석을 지원
    • 성능 데이터에 대한 집계 기능 제공
  • Kibana
    • APM UI에서 데이터 필터링 및 Service, Trace, Trasaction, Error, Metric에 대한 Overview 및 상세 기능 제공
    • Dashboard/Visualization을 이용하여 사용자가 원하는 형태로 데이터 가시화 가능
    • APM Agent Configuration, Machine Learning 통합(일부 License 필요) 기능 지원

 

 

3. Elastic APM Agent 지원 종류

엘라스틱은 다양한 언어의 Agent를 지원한다.

본인이 프로젝트에서 적용할 예정의 자바와 파이썬은 당연히 지원하고, 자바스크립트 RUM을 추가적으로 지원해서 프론트 영역까지도 모니터링이 가능하도록 지원해준다.

 

 

4. APM 데이터 모델

APM에서 사용되는 성능 데이터는 Transaction, Span, Error, Metric, Metadata와 같은 데이터 모델로 관리 됩니다.

 

아래의 그림은 데이터 모델 중 Transacion, Span의 관계를 좀 더 이해하는데 도움을 주는 그림이다.

 

1. Transaction

  • Application내에서 측정되는 최상위 작업 (ex. Server의 Request, Batch Job, Background Job 등)
  • 데이터 구성
    • Event Timestamp
    • ID, type, name
    • Event가 생성된 환경에 대한 데이터

 

2. Span

  • 실행을 추적하기 위한 논리 작업 단위
  • 실행되는 Code의 시작 및 소요시간 정보가 있음
  • span 사이의 부모/자식 관계를 가질 수 있음
  • 데이터 구성
    • transaction.id, parent.id
    • start time, duration
    • name, type, stacktrace

 

3. Error

  • Application에서 발생한 Error Exception정보 및 로그
  • 데이터 구성
    • Error 발생위치
    • Stacktrace 정보
      • Error Exception
      • Error log
    • transaction.id
    • Error Event가 생성된 환경에 대한 데이터

 

4. Metric

  • Agent Host에 대한 CPU, Memory 등의 기본 Metric 정보를 자동으로 수집
  • JAVA의 JVM Metric이나 Go의 런타임 Metric도 수집 가능

 

5. Metadata

  • Event에 대한 부가적인 정보

 

 

 

 

 

 

 

 

[참고]

각 데이터 모델에 대한 자세한 정보

https://saramin.github.io/2020-03-24-elastic-apm-1/