리눅스 기초 · 텍스트 처리 파이프라인 · 실습
로그에서 답 뽑아내기
목표
로그 파일 하나에서 질문을 명령으로 옮기는 훈련을 합니다. /opt/lab/data/app.log 는 IP 날짜 메서드 경로 상태코드 [ERROR] 형식이며 480줄입니다.
왜 중요한가
장애 상황에서 필요한 건 로그 뷰어가 아니라 질문을 파이프라인으로 옮기는 능력입니다. "무엇이 가장 많은가"라는 질문은 거의 항상 sort | uniq -c | sort -rn | head 라는 하나의 관용구로 답할 수 있습니다. uniq -c 가 인접한 중복만 세기 때문에 앞의 sort 가 필수라는 점, 파이프로 이어진 명령들은 각각 별도 프로세스에서 동시에 흘러가기 때문에 거대한 파일도 메모리에 올리지 않고 처리된다는 점 - 이 두 가지가 이 관용구가 빠른 이유입니다.
단계
1. ERROR 가 들어간 줄의 개수를 /root/error_count.txt 에 숫자만 적으세요.
2. 가장 많이 등장한 IP 하나를 /root/top_ip.txt 에 적으세요.
3. 상태코드가 500 인 줄만 그대로 /root/five_hundreds.txt 에 저장하세요.
4. 등장하는 고유 경로(4번째 필드) 목록을 /root/paths.txt 에 한 줄에 하나씩 저장하세요.
5. 상태코드별 개수를 코드 개수 형식으로, 코드 오름차순 3줄로 /root/status_counts.txt 에 저장하세요.
6. 요청 수 상위 3개 경로를 경로 개수 형식으로, 개수 내림차순 3줄로 /root/top3_paths.txt 에 저장하세요.
7. 200 이 아닌 응답의 비율을 소수점 첫째 자리까지, % 기호 없이 /root/error_rate.txt 에 적으세요.
8. /root/report.txt 에 다음 세 줄을 이 순서로 만드세요.
total=<전체 줄 수>errors=<200 이 아닌 줄 수>top_path=<가장 많이 요청된 경로>
참고
awk '{print $4}' 파일로 4번째 필드만 뽑을 수 있습니다.- 비율은
awk '{t++; if ($5 != 200) e++} END {printf "%.1f\n", e*100/t}'처럼 END 블록에서 계산합니다. - 흔한 실수 1:
uniq -c앞에sort를 빼먹으면 인접한 것만 세서 결과가 엉뚱해집니다. - 흔한 실수 2: 3번에서
grep 500을 쓰면 IP 나 다른 필드에 500 이 든 줄까지 걸립니다. 필드를 지정하세요.
단계 8개
- ERROR 줄 세기
- 가장 많이 요청한 IP
- 500 응답만 뽑기
- 고유 경로 목록
- 상태코드별 집계
- 요청 많은 경로 TOP 3
- 오류율 계산
- 요약 리포트 만들기