서버 로그가 수십만 줄이 되면 눈으로는 못 봅니다. 그런데 grep 몇 가지 패턴만 익혀두면 "오늘 에러가 몇 건인지", "배치가 실제로 돌았는지", "이 시간대만" 같은 걸 몇 초 만에 뽑아낼 수 있습니다. 실무에서 자주 쓰는 grep 패턴을 정리합니다.
1. 개수부터, 그리고 실제 발생분만
로그를 열기 전에 개수부터 셉니다. grep -c는 매칭된 줄 수만 세줘서 "에러 0건인지 수천 건인지"를 1초 만에 알려줍니다. 한 걸음 더 가면, 배치 로그에는 "처리 0건"과 "처리 N건"이 섞여 있는데, 실제로 뭔가 처리된 줄만 봐야 의미가 있습니다. 카운트가 0인 줄은 빼고 1 이상인 줄만 정규식으로 거릅니다.

- grep -c "ERROR" app.log 로 에러 줄 수(0이면 발생 안 함)
- cnt=[0] 은 안 돈 것, grep -E "cnt=[[1-9]" 는 실제 처리된 것
- "돌긴 했는데 대상이 없었다"와 "실제 처리했다"를 구분
2. 날짜·시간으로 좁히기
로그가 여러 날 쌓여 있으면 날짜로 먼저 자릅니다. 로그 줄머리에 찍히는 날짜 문자열을 그대로 grep하면 그날 로그만 남고, 시간까지 붙이면 특정 구간(예: 새벽 배치 시간대)만 뽑을 수 있습니다.

- grep "2026-07-10" app.log 로 그날 로그만
- grep -E "2026-07-10 0[1-3]:" 로 그날 새벽 1~3시만
- 날짜로 좁힌 뒤 파이프로 조건을 더 붙이기
3. 앞뒤 맥락과 조건 조합
에러 한 줄만 보면 원인을 모릅니다. -A는 뒤(after), -B는 앞(before), -C는 양쪽 줄을 같이 보여줘서 스택 트레이스나 직전 상황을 함께 볼 수 있습니다. 여기에 여러 키워드(OR)나 제외 조건을 붙이면 원하는 줄만 정확히 남습니다.

- grep -A 3 "Exception" 으로 에러 뒤 3줄(스택 일부)
- grep -B 2 "실패" 로 실패 직전 2줄(원인 힌트)
- grep -E "ERROR|FATAL" 로 여러 키워드, grep -v "DEBUG" 로 제외
4. 정리: 개수 -> 발생분 -> 시간 -> 맥락
로그 분석은 순서만 잡으면 빠릅니다. 먼저 grep -c로 규모를 재고, 0건을 빼서 실제 발생분만 남기고, 날짜·시간으로 구간을 좁힌 뒤, 마지막에 앞뒤 맥락을 붙여 원인을 봅니다. 수십만 줄이어도 이 순서면 몇 초 안에 필요한 줄에 도착합니다.
- 순서: 개수(-c) -> 발생분(0건 제외) -> 날짜/시간 -> 맥락(-A/-B/-C)
- 파이프로 조건을 겹쳐 좁히면 대부분 해결
- 큰 로그일수록 눈으로 읽지 말고 grep으로 좁히기
여기까지 로그에서 원하는 것만 빠르게 뽑는 grep 패턴(개수·발생분·시간·맥락)에 대해서 작성해봤습니다. 여기까지 읽어주셔서 감사합니다!
'일상' 카테고리의 다른 글
| 규칙 기반 관제에 경량 ML 이상탐지 얹기 (LLM 없이, 내부에서) (0) | 2026.07.10 |
|---|---|
| 여러 서버 배치를 감시하는 관제 대시보드 직접 만들기 (설계 포인트) (0) | 2026.07.10 |
| Antigravity·윈도우 터미널에서 한글이 깨질 때 (CP949 vs UTF-8) (0) | 2026.07.10 |
| python-pptx로 '편집 가능한' PPT 자동 생성하기 (이미지 말고 네이티브 도형으로) (0) | 2026.07.10 |
| 작업은 다 끝났는데 exit code 9로 죽는 faster-whisper (CUDA 종료 크래시 잡기) (0) | 2026.07.10 |