본문 바로가기
모티터링도구

matric / trace micrometer, OTLP 라이브러리 설명

by 아이티.파머 2025. 9. 3.
728x90

서버에서 트레이싱과 메트릭 수집을 하기 위해서는 micromiter를 사용하여 cpu, 메모리 http 요청(count) 에대한 매트리글 수집하고, otpl 라이브러리를 사용하여 grabal MDC tracd id , span id 등을 생성하고 관리 할 수. 있다.

matric 수집

micrometer-registry-otlp

  • 메트릭 전송도구로 OTLP 프로토콜을 사용한다.
  • cpu, 메모리, http요청수 응답시간 등의 수치데이터를
  • Prometheus 대신 otlp로 메트릭을 보내고 싶을때 사용한다.

micrometer-registry-prometheus

  • 메트릭 전송도구로 Prometheus 포멧이다.
  • 위와 동일한 메트릭 수치데이터를 Prometheus 엔드포인트 (/actuator/prometheus)로 노출한다.
  • micrometer-registry-oltp와 같은 역할이나 다른 프로토콜을 사용한다.

실제 데이터 수집은 우리가 아는것처럼 spring boot의 actuator을 사용하여 메트릭을 수집한다.

  implementation 'org.springframework.boot:spring-boot-starter-actuator'

Actuator가 자동으로 수집하는 메트릭:

  • system.cpu.usage - CPU 사용률
  • jvm.memory.used - JVM 메모리 사용량
  • http.server.requests - HTTP 요청 수/응답시간
  • jvm.gc.pause - GC 시간
  • 기타 50+ 메트릭
// 방법 1) Otlp 방식 Push
implementation 'org.springframework.boot:spring-boot-starter-actuator'
runtimeOnly 'io.micrometer:micrometer-registry-otlp'        // 메트릭 전송 전용 (CPU, 메모리, HTTP 요청 수 등) 직접전송

// 방법 2) Prometheus 방식 Pull
implementation 'org.springframework.boot:spring-boot-starter-actuator'
runtimeOnly 'io.micrometer:micrometer-registry-prometheus'    // 메트릭 전송 전용 (CPU, 메모리, HTTP 요청 수 등) Prometheus 서버에서 등록 하여 가져가야함

그림으로보면 다음과같이 registry 모듈을 micrometer-registry-olpt를 사용하느냐 혹은 micrometer-registry-prometheus를 사용하느냐에 따라 push 혹은 prometheus가 직접 수동으로 pull 해가는 두가지 방식으로 사용 가능 합니다.

 

 

비교정리 표

Registry 전송방식 엔드포인트 동작
otlp push(직접전송) 없음 자동으로 otlp 서버로 전송
prometheus pull(수동수집) /actuator/prometheus prometheus server에 등록하여 endpoint를 호출하고 데이터를 직접 수집해가야함

 

otlp예제

#application.yaml 예제 
management:
  otlp:
    metrics:
      export:
        url: http://localhost:4318/v1/metrics  # 직접 전송
        step: 10s  # 10초마다 전송

Trace 수집

메트릭 수집은 cpu, 메모리, http 호출카운트 및 응답속도 등에 대한 지표라면, Trace 데이터는 log에서 발생된 추적 내용을 담고 있다.

MDC (Mapped Diagnostic Context) 기반으로 현재 실해중이 쓰레드에대한 메타정보를 맵형태로 저장하고 관리하는 매커니즘으로 분산추적 기술에 쓰인다.

[그림1]

[그림2]

 

그림1그림2 를 비교하면 추적관련 데이터인 TraceId와 Span Id 차이가 있다. 일반적인 로컬개발 환경에서의 로그 추적은 쉽게 가능하지만, 운영 환경에서는 수많은 사용자가 로그를 발생시킴으로 어느 사용자의 Log가 남아있는지 확인 하기 어렵다. 이처럼 Trace Id를 기록함으로 Thread의 로그가 뒤썩여 있더라도 특정 액션의 로그를 추적하여 관찰 할수있다.

opentelemetry-exporter-otlp

  • 트레이스 전송 전용 도구
  • 요청흐름, 스팬정보 분산 추적데이터를 전송하는 역활

micrometer-tracing-bridge-otel

  • 트레이스 생성/기록 브릿지
  • Micrometer 트레이싱 SDK를 Open Telemetry SDK로 변환하는 역활
  • 데이터를 전송하지 않으며, 단순히 트레이스 데이터만 생성한다.

추적 데이터는 tracing bridge가 생성하고 생성된 데이터를 전송하는 역활은 exporter-otlp가 담당한다.

implementation 'io.opentelemetry:opentelemetry-exporter-otlp' // 트레이스 전송 전용 (요청 흐름, 스팬 정보 등)
implementation 'io.micrometer:micrometer-tracing-bridge-otel' // Tracing-Log 연동

application.yaml 예제

management:
  otlp:
    tracing:
      endpoint: http://localhost:4318/v1/traces  # HTTP endpoint
      export:
        enabled: true
  tracing:
    sampling:
      probability: 1.0. # 샘플링 기준 0 ~ 1.0 사이로 1에 가까울수로 모두 수집

grafana tempo 로본 trace 로그 샘플

Console 로그에서 발생된 Trace Id를 grafana tempo 의 검색 상에서 확인 할 수 있습니다.

'모티터링도구' 카테고리의 다른 글

loki logback appender 란?  (0) 2025.09.10
opentelemetry logback appender  (2) 2025.09.03
zipkin , jaeger, grafana tempo 특징  (2) 2025.07.30
Observability & Open Telemetry 전파전략  (2) 2025.07.30
Observability & Opentelemetry  (3) 2025.07.30