압축 회전 로그에서 장애 시간대 오류 집계하기 리눅스 학습›로그 분석·쉬움

추천
북마크
질문
AI 튜터 0
root@Learnix - bash
세션 연결 준비 중
문항 난이도 2
실습 서버를 준비하고 있습니다. 문제를 먼저 읽어 두세요.
</> 문제

결제 앱 payapp 의 로그는 /var/log/payapp 아래에서 회전(rotate)되며 오래된 것은 gzip 으로 압축되어 있습니다. 2026-09-23 새벽 장애 건으로 감사 요청이 들어와, 압축본을 포함한 전체 로그에서 장애 시간대(02:00:00~03:59:59)의 실패 이벤트만 추려 리포트를 만들고 매일 자동 재생성되도록 등록해야 합니다. 원본 로그는 증거이므로 손대면 안 됩니다.

로그 행 형식은 `2026-09-23T02:05:11+09:00 payapp[2390]: ERROR code=E502 user=kimjh msg="gateway timeout"` 처럼 시각, 프로세스, 레벨(INFO/WARN/ERROR/FATAL), code=, user=, msg= 순서입니다. 레벨은 세 번째 토큰이며 msg 본문에도 ERROR 같은 단어가 나올 수 있으므로 레벨 필드로 판별해야 합니다.

- 압축 로그는 풀어서 덮어쓰지 말고 gzip -dc/zcat 처럼 스트림으로 읽을 것(원본 md5 가 검사됨).
- systemd 는 PID1 이 아니므로 systemctl start/enable 은 동작하지 않는다. 주기 실행은 /etc/cron.d 파일로만 등록한다.
- 외부 네트워크는 사용할 수 없다.
- 리포트 파일은 요구된 내용 외 헤더/여분 행을 넣지 않는다.

✓ 요구 사항

1. /root/report/incident_lines.log 에 압축본(.gz)을 포함한 모든 로그에서 2026-09-23 02:00:00~03:59:59 사이의 ERROR/FATAL 레벨 행만 모아 시간 오름차순으로 저장한다(다른 레벨의 행이나 시간대 밖의 행이 섞이면 안 됨).
2. /root/report/code_count.txt 에 위 행들의 에러코드(code=E###)별 건수를 '코드 건수' 형식(공백 1칸 구분)으로 건수 내림차순, 같은 건수는 코드 사전순으로 저장한다(예: E999 7).
3. /root/report/top_user.txt 에 위 행들에서 가장 많이 실패한 사용자명(user= 값) 한 개만 저장한다.
4. /usr/local/bin/logscan.sh 를 실행 가능(실행권한)한 상태로 만들고, /etc/cron.d/logscan 에 매일 04:10 에 root 권한으로 해당 스크립트를 실행하는 항목을 등록한다.
5. /var/log/payapp 의 원본 로그 4개(app.log, app.log.1, app.log.2.gz, app.log.3.gz)는 내용·압축 상태가 전혀 변경되지 않아야 한다.

≡ 로그 분석 관련 실습 문제
리눅스 학습 문제 전체 보기
미제출
-