Why?

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

Balang 2025. 3. 27. 10:33
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
반응형