ㅇ.ㅇ
[DEV] 로그와 메트릭 본문

로그와 메트릭, 실무에서 왜 중요한가?
로그는 개발하면서 자주 들여다보기 때문에 익숙한 한편, 나는 서비스가 아닌 솔루션을 개발하기 때문에 '메트릭'은 많이 만나보지 못했다. 그러다가 작년말쯤 인프런에서 프로메테우스, 그라파나를 실습하는 강의를 보며 메트릭에 대해 알게 되었다.
로그는 서버가 동작할 때 서버의 상태와 동작 정보를 시간 경과에 따라 기록한 결과이며, 시스템의 오류와 문제를 추적하는 데 유용하다. 반면, 메트릭은 시스템의 성능과 상태를 수치화한 통계 데이터로, 시스템의 현재 상태를 쉽게 파악하고 사업 현황을 분석하는 데 활용할 수 있다.
이번 글에서는 이러한 로그와 메트릭에 대해 간략하게 정리해보려고 한다.
로그(logs)란?
로그는 애플리케이션이나 시스템이 동작하는 동안 발생하는 이벤트를 기록한 것이다.
로그 특징
- 이벤트 단위로 발생하며, 시간 순서대로 기록된다.
- 보통 텍스트 형식(JSON, Plain text 등)으로 저장된다.
- 특정 요청의 흐름을 파악하는 데 유용하다.
- 디버깅, 문제 해결, 보안 감사 등에 활용된다.
실무에서 로그 활용법
1) 로그 레벨을 명확히 구분하기
로그는 보통 다음과 같은 레벨을 갖는다:
- DEBUG : 개발 단계에서만 필요한 상세한 정보
- INFO : 일반적인 운영 정보 (e.g., 서비스 시작, 종료, 주요 이벤트)
- WARN : 예상하지 못한 상황이지만 서비스에는 영향이 없는 경우
- ERROR : 장애가 발생했을 때 기록 (e.g., 예외 발생, DB 연결 실패)
- FATAL : 시스템이 정상적으로 작동할 수 없는 치명적인 오류
운영 환경에서는 INFO 이상만 기록하도록 설정하는 경우가 많다. DEBUG 로그를 운영 환경에서 남기면 불필요한 로깅으로 인해 성능 문제가 발생할 수 있기 때문이다.
2) 로그에 포함해야 할 정보
- 타임스탬프 : 언제 발생한 이벤트인지
- 로그 레벨 : INFO, WARN, ERROR 등
- 서비스명/모듈명 : 어떤 서비스에서 발생했는지
- 요청 ID (Trace ID) : 요청을 추적할 수 있는 식별자
- 에러 내용 (예외 스택 트레이스 포함 가능)
{
"timestamp": "2025-02-23T12:34:56Z",
"level": "ERROR",
"service": "test-service",
"traceId": "test123",
"message": "Database connection failed"
}
이렇게 하면, 장애가 발생했을 때 어느 서비스에서 어떤 문제가 있었는지 빠르게 파악할 수 있다.
3. 로깅 프레임워크 사용하기
System.out.println을 사용하면 원하는 수준만 필터링하기 어렵고, 출력시마다 대기시간이 발생하기 때문에 성능적으로 비효율적이다. 따라서, LogBack 같은 로깅 프레임워크를 사용하여 로그 관리를 체계적으로 운영하는 것이 바람직하다.
메트릭(metrics)이란?
메트릭은 시스템의 성능과 상태를 정량적으로 나타내는 데이터이다. 로그와 달리, 이벤트 단위가 아니라 시간 단위로 집계된 통계 데이터라고 생각하면 된다.
메트릭의 특징
- 수치 데이터(숫자)로 저장된다.
- 특정 주기(1초, 1분, 5분 등)마다 측정된다.
- 시계열(time-series) 데이터로 분석할 수 있다.
- 대시보드나 모니터링 툴을 통해 실시간 확인이 가능하다.
실무에서 메트릭 활용법
1) 수집할 주요 메트릭
- 시스템 메트릭 : CPU 사용량, 메모리 사용량, 디스크 I/O, 네트워크 트래픽
- 애플리케이션 메트릭 : 요청 수, 응답 속도, 에러율
- 비즈니스 메트릭 : DAU(Daily Active Users), Retention, 결제 완료 건수
특히 운영 중인 서비스에서는 응답 속도(latency), 에러율(error rate), 트래픽(throughput) 같은 지표를 적극적으로 모니터링해야 한다.
2. 메트릭 수집 및 시각화 도구
메트릭을 효과적으로 활용하려면 모니터링 시스템과 연동해야 한다. 보통 Spring Boot Actuator로 메트릭을 생성하고, Prometheus에서 수집하여 Grafana로 시각화하는 방식을 많이 사용하는 것 같다.
조만간 프로메테우스나 그라파나 사용법도 정리해서 올려보고 싶다.
'Today I Learned' 카테고리의 다른 글
[DEV] SSO (0) | 2025.03.02 |
---|---|
[Linux] Linux에서 사용되는 대표적인 방화벽 종류 (0) | 2025.02.27 |
[Tool] SDKMAN 설치 및 사용법 (0) | 2025.02.12 |
[Tomcat] Tomcat > bin 디렉터리의 주요 파일 설명 (0) | 2025.02.11 |
[Tool] Stirling-PDF 설치 (0) | 2025.02.09 |