딥 다이브에서 그라파나와 프로메테우스를 사용하는 것을 간단하게 배웠다. 배우면서 생각보다 설정을 할게 없다는 것에 놀라면서 강사님이 계속 말씀하시는 Metrics이 뭐지? 라는 생각이 들었고 궁금증이 생겨서 용어를 정리하게 되었다.
Log, Metrics, Tracing에 대해서 자료를 찾는데 읽어도 이해가 안되는 글이 많았다. 어떻게 쓸지 고민하던 중 BetterStack에 있는 기술 글을 번역하면서 이해를 했기에 기록으로 남긴다.
로그(logs)란 소프트웨어 애플리케이션, 시스템, 또는 네트워크 내에서 발생하는 다양한 이벤트를 시간 순서대로 기록한 이력입니다. 로그는 활동, 오류, 사고 등의 포괄적인 타임라인을 제공하므로 무슨 일이 언제 일어났는지, 종종 왜 일어났는지를 이해하는 데 도움이 됩니다.
또한 로그는 시스템 내 개별 이벤트에 대해 가장 많은 세부 정보를 제공합니다. 이는 원하는 만큼의 컨텍스트를 선택적으로 기록할 수 있기 때문입니다. 하지만 과도한 로그 기록은 리소스를 많이 소모하고 애플리케이션 성능을 저하시킬 수 있기 때문에 단점이 되기도 합니다... --BetterStack--
로그는 소프트웨에서 일어난 일은 시간 순서대로 기록한 이력이다. 비구조화 형식으로도 있지만 요즘은 구조화된 형식으로 저장한다. 로그는 종류도 여러가지가 있다. Debug, Error, Audit, Application, Security 등이 존재한다. (참고로 필자는 보통 SLF4j를 사용하는데, SLF4j에도 여러 종류 로그가 있지만, 보통 debug, info, error 이렇게 3개만 사용했다.)
측정지표(Metrics)은 다양한 이벤트에서 발생한 수치 데이터를 시간에 따라 집계하는 데 중점을 둡니다. 이는 리소스 소비를 최소화하기 위해 세부적인 컨텍스트를 일부러 생략하는 방식입니다. 예를 들어 메트릭에는 다음과 같은 5개 항목들이 포함될 수 있습니다. (훨씬 더 많은 항목들이 존재합니다. 그 중에 5개만을 가져왔습니다. )
1) 처리된 HTTP 요청 수
2) 요청 처리에 소요된 총 시간
3) 동시에 처리 중인 요청 수
4) 발생한 오류 수
5) CPU, 메모리, 디스크 사용량메트릭에서 컨텍스트가 완전히 배제되지는 않으며, 특정 속성을 기준으로 메트릭을 구분하는 것이 유용합니다. 하지만 이는 카디널리티(cardinality) 문제를 고려해야 합니다... --BetterStack--
Metrics를 한국어로 번역하면 "측정지표" 번역된다. 하지만 이 뜻이 IT에서 맞는 표현인지는 모르겠다. 거의 다 메트릭스라고 불러서 정확하지 않다. 하지만 "측정지표"라고 생각하면 이해가 더 쉽기 때문에 필자는 이렇게 외우면서 이해했다.
딥다이브에서 Grafana를 사용했다. Grafana는 데이지표를 보여줬는데 보통 cpu, heap, I/O 사용량을 보여줬다. 강사님은 Metrics를 보여준다라고 하면서 얘기했지만 와닿지 못했다. 하지만 한국어로 번역해서 들으면 좀 더 쉽게 이해가 되었다.


트레이싱(Tracing)은 모든 이벤트를 전부 추적하는 것이 아니라, 선택적으로 특정 이벤트나 트랜잭션만 추적하는 방식입니다. 예를 들어, 특정 함수들을 통과하는 100번째 요청마다 추적하는 방식이 사용될 수 있습니다. 이렇게 선택된 이벤트들은 함수 실행 경로와 실행 시간이 기록되며, 이를 통해 프로그램의 운영 효율성이나 지연(Latency) 원인을 파악할 수 있습니다.
일부 트레이싱 방식은 단순히 특정 시점의 상태를 포착하는 수준을 넘어서, 대상 함수에서 호출되는 모든 하위 함수들을 꼼꼼히 추적하고 타이밍을 측정하기도 합니다.
예를 들어, 일부 사용자 HTTP 요청을 샘플링하여, 해당 요청이 데이터베이스, 캐시 등 하위 시스템과 상호작용에 소요되는 시간을 분석할 수 있습니다. 이로써 캐시 히트(hit) 또는 미스(miss)와 같은 상황이 전체 성능에 어떤 영향을 미치는지 파악할 수 있습니다. --BetterStack--
| 항목 | Logs | Metrics | Tracing |
|---|---|---|---|
| 목적 | 이벤트 기록 | 상태 모니터링 | 요청 흐름 추적 |
| 데이터 형태 | 텍스트 | 숫자 (시계열) | 구조화된 트리 (Trace/Span) |
| 시간 순서 | 있음 | 있음 | 있음 |
| 사용 용도 | 디버깅, 에러 분석 | 모니터링, 알람 | 병목 분석, 요청 추적 |
| 도구 예시 | ELK Stack, Fluentd | Prometheus, Grafana | Jaeger, Zipkin, OpenTelemetry |