ログから答えを取り出す
한국어 원문으로 표시합니다.
목표
로그 파일 하나에서 질문을 명령으로 옮기는 훈련을 합니다. /opt/lab/data/app.log 는 IP 날짜 메서드 경로 상태코드 [ERROR] 형식이며 480줄입니다.
왜 중요한가
장애 상황에서 필요한 건 로그 뷰어가 아니라 질문을 파이프라인으로 옮기는 능력입니다. "무엇이 가장 많은가"라는 질문은 거의 항상 sort | uniq -c | sort -rn | head 라는 하나의 관용구로 답할 수 있습니다. uniq -c 가 인접한 중복만 세기 때문에 앞의 sort 가 필수라는 점, 파이프로 이어진 명령들은 각각 별도 프로세스에서 동시에 흘러가기 때문에 거대한 파일도 메모리에 올리지 않고 처리된다는 점 - 이 두 가지가 이 관용구가 빠른 이유입니다.
단계
ERROR가 들어간 줄의 개수를/root/error_count.txt에 숫자만 적으세요.- 가장 많이 등장한 IP 하나를
/root/top_ip.txt에 적으세요. - 상태코드가
500인 줄만 그대로/root/five_hundreds.txt에 저장하세요. - 등장하는 고유 경로(4번째 필드) 목록을
/root/paths.txt에 한 줄에 하나씩 저장하세요. - 상태코드별 개수를
코드 개수형식으로, 코드 오름차순 3줄로/root/status_counts.txt에 저장하세요. - 요청 수 상위 3개 경로를
경로 개수형식으로, 개수 내림차순 3줄로/root/top3_paths.txt에 저장하세요. - 200 이 아닌 응답의 비율을 소수점 첫째 자리까지, % 기호 없이
/root/error_rate.txt에 적으세요. /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 이 든 줄까지 걸립니다. 필드를 지정하세요.
ERROR 줄 세기
ERROR 가 들어간 줄의 개수를 /root/error_count.txt 에 숫자만 적으세요.
고르는 도구와 세는 도구를 파이프로 이으세요. grep 에는 개수만 세는 옵션도 있습니다.
가장 많이 요청한 IP
가장 많이 등장한 IP 하나를 /root/top_ip.txt 에 적으세요.
첫 번째 필드를 뽑아 sort | uniq -c | sort -rn 순으로 이으세요. uniq -c 는 인접한 중복만 셉니다.
500 응답만 뽑기
상태코드가 500 인 줄만 그대로 /root/five_hundreds.txt 에 저장하세요.
상태코드는 5번째 필드입니다. 문자열로 grep 하면 다른 필드에 든 500 까지 걸릴 수 있습니다.
고유 경로 목록
등장하는 고유 경로(4번째 필드) 목록을 /root/paths.txt 에 한 줄에 하나씩 저장하세요.
경로는 4번째 필드입니다. 중복을 제거하는 옵션이 sort 에 이미 있습니다.
상태코드별 집계
상태코드별 개수를 코드 개수 형식으로, 코드 오름차순 3줄로 /root/status_counts.txt 에 저장하세요.
'코드 개수' 형식으로 코드 오름차순 3줄입니다. awk 의 연관 배열과 END 블록을 쓰거나 sort|uniq -c 를 조합하세요.
요청 많은 경로 TOP 3
요청 수 상위 3개 경로를 경로 개수 형식으로, 개수 내림차순 3줄로 /root/top3_paths.txt 에 저장하세요.
'경로 개수' 형식입니다. uniq -c 의 출력은 '개수 값' 순서라 마지막에 순서를 뒤집어야 합니다.
오류율 계산
200 이 아닌 응답의 비율을 소수점 첫째 자리까지, % 기호 없이 /root/error_rate.txt 에 적으세요.
전체 줄 수와 200 이 아닌 줄 수가 모두 필요합니다. awk 의 END 블록에서 한 번에 계산하면 파일을 두 번 읽지 않아도 됩니다.
요약 리포트 만들기
/root/report.txt 에 다음 세 줄을 이 순서로 만드세요.
total=<전체 줄 수>errors=<200 이 아닌 줄 수>top_path=<가장 많이 요청된 경로>
앞 단계에서 구한 값들을 합쳐 세 줄로 만드세요. 형식과 순서가 정확해야 합니다.