왜 에러 로그를 잘 설계하고 분석해야 하는가?

2025. 3. 27. 10:33·Why?
728x90

1. 에러 로그, 단순한 출력 이상이어야 한다.

에러 로그는 단순한 콘솔 출력이 아니다.

복잡한 데이터 파이프라인 환경에서는, 작은 에러 하나가 수십 개의 다운스트림 작업에 영향을 줄 수 있다.

로그는 곧 진단 도구이자, 미래의 나 또는 동료를 위한 트러블슈팅 가이드다.


2. 로그 레벨 (Log Level) 에 대한 이해

로그는 발생한 이벤트의 심각도에 따라 레벨을 구분한다.

이래는 일반적인 로그 레벨이다

레벨 설명
DEBUG 개발 및 디버깅 용도. 상세한 내부 상태를 출력
INFO 정상적인 실행 흐름에 대한 정보
WARNING 문제가 될 수 있는 상황. 시스템은 계속 동작함
ERROR 오류 발생. 기능 일부가 실패했으나 서비스는 유지
CRITICAL  시슽엠 전체에 영향을 줄 수 있는 치명적인 오류

 

정확한 로그 레벨 구분은 추후 분석 시 중요도에 따른 필터링에 큰 도움이 된다.


3. 잘 설계된 에러 로그란?

에러 로그는 다음 정보를 포함해야한다

  • 타임스탬프 (UTC 권장)
  • 에러 레벨 및 에러 코드
  • Pipline / Job ID, Request ID
  • Context 정보 (사용자 ID, 파일 경로 등)
  • 에러  메시지 및 Stack Trace

4. 예시 : ETL 파이프라인 로그 포맷

이건 단순한 예시이며 상황에 따라 달라질 수 있습니다.

{
	"timestamp": "2025-03-14T03:10:57Z",
    "level": "ERROR",
    "pipeline_id": "user-daily-etl",
    "job_id": "step-transform-03",
    "request_id": "req-12345xyz",
    "error_code": "TRANSFORM_FAILED",
    "message": "KeyError: 'user_id' not found in source data" ,
    "context": {
    	"source": "s3://raw-data/user/2025/03/14.csv",
        "row_number": 15420
    }
}

 

5. 로그 분석을 통한 에러 원인 파악 방법

데이터를 효율적으로 분석하고, 문제를 신속하게 해결하기 위해서는 로그 데이터에 대한 체계적인 분석이 필요합니다.

 

  • 패턴 분석
    • 에러 로그를 통해 특정 패턴을 찾아낼 수 있습니다. 예를 들어, 특정 시간대에 반복적으로 발생하는 오류나, 특정 데이터셋에서만 발생하는 오류를 찾아낼 수 있습니다. 이를 통해 문제의 원인을 좁혀갈 수 있습니다. 예를 들어, 특정 데이터가 잘못 입력되거나, 데이터 처리 중 특정 단계에서 오류가 발생하는 경우가 있을 수 있습니다.
  • 패턴 분석 쿼리 (BigQuery 예시)
SELECT
  error_code,
  COUNT(*) AS error_count,
  FORMAT_TIMESTAMP('%Y-%m-%d %H:00', timestamp) AS hour_bucket
FROM
  `project.dataset.etl_logs`
WHERE
  level = 'ERROR'
GROUP BY
  error_code, hour_bucket
ORDER BY
  hour_bucket DESC, error_count DESC
  
-- 특정 시간대에 어떤 에러가 집중적으로 발생했는지 확인 가능

 

 

  • 사용자 ID별 에러 집중 여부 확인
SELECT
  context.user_id,
  COUNT(*) AS error_count
FROM
  `project.dataset.etl_logs`
WHERE
  level = 'ERROR'
  AND timestamp BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) AND CURRENT_TIMESTAMP()
GROUP BY
  context.user_id
ORDER BY
  error_count DESC
LIMIT 10

 

 

추가적으로 Grafana 대시보드를 활용해서 

  • 에러 발생 시간대 추이 (Time Series)
  • 에러 코드별 분표 (Bar Chart)
  • 에러 레벨 비율 (Pie Chart)
  • Job 별 실패 건수 (Table + Link)

Grafana는 Elasticsearch, Loki, BigQuery 등 다양한 데이터 소스와 연동할 수 있어 실시간 에러 모니터링에 적합하다고 생각합니다.


6. 잘못된 로그 설계의 부작용

  • "NullPointerException" 같은 메시지만 남아 원인 추적 불가
  • 개인정보가 로그에 그대로 노출되어 보안 위반
  • 너무 많은 로그로 인해 스토리지 과다 사용 및 분석 어려움

🟢 로그 수집 정책, 마스킹 정책, 로깅 기준은 반드시 명확히 해야 한다.


7. 결론: 로그는 데이터 품질의 거울

데이터 엔지니어에게 있어 로그는 단순 출력이 아니라
데이터 품질을 보장하고 문제를 추적할 수 있는 핵심 무기다.

잘 설계된 로그는 빠른 대응, 정확한 진단, 신뢰성 높은 서비스를 만든다.
지금 우리가 작성하는 로그는 결국 미래의 나 자신에게 보내는 친절한 문서임을 잊지 말자.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Why?' 카테고리의 다른 글

왜 Top-K 문제는 중요할까?  (0) 2025.04.17
왜 '데이터 모델링'에서 '정규화(Normalization)'를 과도하게 적용하면 성능이 저하될 수 있는가?  (0) 2025.04.09
A/B TEST 진행 시 대조군과 실험군의 비율을 비슷하게 맞추는 이유는?  (0) 2023.08.23
seed()는 왜 지정할까?  (0) 2023.08.23
왜 제너레이터는 메모리 사용을 효과적으로 사용할까?  (0) 2023.05.15
'Why?' 카테고리의 다른 글
  • 왜 Top-K 문제는 중요할까?
  • 왜 '데이터 모델링'에서 '정규화(Normalization)'를 과도하게 적용하면 성능이 저하될 수 있는가?
  • A/B TEST 진행 시 대조군과 실험군의 비율을 비슷하게 맞추는 이유는?
  • seed()는 왜 지정할까?
Balang
Balang
음악 전공생의 개발일지
  • Balang
    Balang
    Balang
  • 전체
    오늘
    어제
  • 반응형
    • All Post (152) N
      • python (46) N
        • selenium (4)
        • algorithm (10) N
        • Django (6)
        • Pandas | Numpy (22)
      • SQL (9)
      • Data Engineer (31) N
      • Data Scientist (3)
      • Data Analysis (11) N
      • Computer Science (35)
      • Why? (15)
      • 마음가짐 (2)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Balang
왜 에러 로그를 잘 설계하고 분석해야 하는가?
상단으로

티스토리툴바