1. Micrometer 소개
- Micrometer는 JVM 기반 애플리케이션을 위한 메트릭 계측 라이브러리입니다.
- 가장 인기 있는 모니터링 시스템들의 계측 클라이언트들에 대한 간단한 파사드(facade)를 제공하여, 벤더 종속 없이 JVM 기반 애플리케이션 코드에 계측을 추가할 수 있게 해줍니다.
- 메트릭 수집 작업에 최소한의 오버헤드만 추가하면서 메트릭의 이식성을 최대화하도록 설계되었습니다.
1.1 의존성
micrometer-core
모듈은 최소한의 의존성만을 갖습니다.- 일시 중지 감지(pause detection) 기능 사용 시 LatencyUtils 의존성이 필요합니다.
- 클라이언트 측 백분위수 사용 시 HdrHistogram이 필요합니다.
2. 주요 특징
2.1 일반적 특징
- 벤더 중립적인 메트릭 파사드
- 다양한 모니터링 시스템 지원 (Prometheus, Graphite, DataDog 등)
- 차원 기반의 메트릭 수집
- 풍부한 메트릭 타입 제공
2.2 지원하는 모니터링 시스템
- Micrometer는 크게 세 부분으로 구성됩니다.
- 계측 SPI가 포함된 코어 모듈(모든 모니터링 시스템에 공통적인 인터페이스)
- 다양한 모니터링 시스템용 구현체가 포함된 모듈들(각각을 레지스트리라고 함)
- 테스트 킷
- 이러한 구조 덕분에 이러한 구조 덕분에 개발자는 코어 모듈의 API만 사용하면 되고, 실제로 어떤 모니터링 시스템을 사용할지는 나중에 선택할 수 있습니다.
SPI(Service Provider Interface)
SPI(Service Provider Interface)는 서비스 제공자가 구현하고자 하는 인터페이스를 정의한 API의 집합입니다. 쉽게 말하면, 특정 서비스를 구현할 때 지켜야 하는 규약이나 약속을 의미합니다. Micrometer의 경우를 예로 들면:
Micrometer는 메트릭을 수집하는 인터페이스(SPI)를 정의합니다. 각 모니터링 시스템(Prometheus, Graphite 등)은 이 인터페이스를 구현합니다. 덕분에 개발자는 하나의 API만 사용하면 되고, 여러 모니터링 시스템을 쉽게 바꿔가며 사용할 수 있습니다.
차원성(Dimensionality)
메트릭 이름에 태그 키/값 쌍을 추가할 수 있는지에 대한 특성입니다.
차원적 시스템:
- 태그 키/값 쌍으로 메트릭을 풍부하게 만들 수 있음
- 지원 시스템: AppOptics, Atlas, Azure Monitor, Cloudwatch, Datadog, Datadog StatsD, Dynatrace, Elastic, Humio, Influx, KairosDB, New Relic, Prometheus, SignalFx, Sysdig StatsD, Telegraf StatsD, Wavefront
계층적 시스템:
- 단순한 평면 메트릭 이름만 지원
- Micrometer는 태그 키/값 쌍을 평면화하여 이름에 추가
- 지원 시스템: Graphite, Ganglia, JMX, Etsy StatsD
비율 집계(Rate Aggregation)
지정된 시간 간격 동안의 샘플 집합 집계 방식에 대한 특성입니다.
클라이언트 측 집계:
- 애플리케이션에서 이산 샘플(예: 카운트)을 비율로 변환하여 전송
- 지원 시스템: AppOptics, Atlas, Azure Monitor, Datadog, Dynatrace, Elastic, Graphite, Ganglia, Humio, Influx, JMX, Kairos, New Relic, 모든 StatsD 변종들, SignalFx
서버 측 집계:
- 누적 값을 서버에서 집계
- 지원 시스템: Prometheus, Wavefront