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
반응형