로그로 원인 찾기 · 로그 읽는 법 · 실습
접근 로그에서 사고 시각 찾기
목표
1269줄짜리 접근 로그에서 사고 시각과 원인 경로를 10분 안에 찾아내고, 급증 폭을 평시값과 비교해 숫자로 말할 수 있게 됩니다.
왜 중요한가
"오류가 103건 있습니다" 는 정보가 아닙니다. 평소가 5건이었으면 심각하고 120건이었으면 개선된 것입니다. 그래서 로그 분석은 원인 찾기가 아니라 기준선 만들기에서 시작하고, 낯선 고객사에는 기준선 문서가 없으므로 같은 로그 안에서 만들어야 합니다. 사고 구간을 제외한 나머지가 곧 평시값입니다.
그리고 4xx 와 5xx 를 반드시 나눠 봅니다. 4xx 는 클라이언트가 잘못 보낸 것이고 5xx 는 서버가 망가진 것이라, 두 숫자가 같이 움직이는지 따로 움직이는지가 원인의 방향을 알려 줍니다. 배포 후 4xx 만 늘었다면 API 계약이 바뀐 것이고, 5xx 만 늘었다면 내부가 깨진 것입니다.
/opt/data/web.log 의 형식은 공백으로 구분된 다섯 필드입니다.
10.9.4.21 04:52:15 GET /api/pay 200IP 시각 메서드 경로 상태코드단계
1. /root/incident 디렉터리를 만드세요.
2. 상태 코드가 500 인 요청의 총 개수를 /root/incident/total_500.txt 에 적으세요.
3. 상태 코드가 404 인 요청의 총 개수를 /root/incident/total_404.txt 에 적으세요.
4. 500 이 가장 많이 발생한 분을 HH:MM 형태로 /root/incident/peak_minute.txt 에 적으세요.
5. 500 이 가장 많이 발생한 경로를 /root/incident/endpoint.txt 에 적으세요.
6. 그 피크 1분 안에서 발생한 500 의 개수를 /root/incident/peak_count.txt 에 적으세요.
7. 피크 분을 제외한 나머지 시간대의 500 개수를 /root/incident/baseline.txt 에 적으세요.
8. 위 네 값이 모두 들어간 요약을 /root/incident/summary.txt 에 쓰세요.
참고
awk '$5==500' /opt/data/web.log | wc -l- 분 단위 집계:
awk '$5==500 {print substr($2,1,5)}' /opt/data/web.log | sort | uniq -c | sort -rn | head - 경로 분포:
awk '$5==500 {print $4}' /opt/data/web.log | sort | uniq -c | sort -rn - 흔한 실수 1: 4번에서
HH:MM:SS전체를 적는 것. 초 단위로 자르면 분포가 흩어져 피크가 안 보입니다. - 흔한 실수 2: 7번에서 전체 로그 줄 수를 빼는 것. 빼야 할 것은 피크 분의 500 건수입니다.
단계 8개
- 작업 디렉터리 만들기
- 500 총량 세기
- 404 총량 세기
- 사고 시각 찾기
- 원인 경로 찾기
- 피크 분의 오류 수 세기
- 평시 오류량 구하기
- 분석 요약 만들기