LFCS — 리눅스 재단 시스템 관리자 · 필수 명령과 텍스트 처리 · 실습
로그를 가공하고 집계하기
목표
직접 만든 로그를 grep·sed·awk·cut·tr·sort·uniq 로 가공하고, jq 와 yq 로 구조화된 데이터에서 값을 뽑아낸다.
왜 중요한가
LFCS 의 텍스트 처리 문제는 "정답 한 줄을 아는가" 가 아니라 필드 단위로 사고하는가를 본다. 줄 전체를 정규식으로 훑으면 바이트 수 컬럼의 500 같은 것까지 걸린다. 그래서 상태 코드는 네 번째 필드라는 구조를 먼저 잡고, 그 위에 도구를 얹어야 한다. 집계도 마찬가지다 — sort | uniq -c | sort -rn 은 관용구지만, 왜 앞에서 한 번 정렬해야 하는지(uniq 는 인접한 중복만 지운다) 를 모르면 상황이 조금만 바뀌어도 무너진다. 마지막 두 단계는 요즘 운영 현실이다. 설정은 대부분 JSON 이나 YAML 이고, 값 하나를 꺼내려고 파이썬을 켜는 대신 jq 와 yq 로 끝내는 손이 필요하다.
단계
1. /root/lfcs-text/access.log 를 아래 12줄 그대로 만드세요. 필드는 공백 하나로 구분하며 <IP> <메서드> <경로> <상태코드> <바이트> 입니다.
10.0.0.117 GET /api/users 200 51210.0.0.118 POST /api/users 201 12810.0.0.117 GET /api/orders 500 6410.0.0.120 GET /healthz 200 1210.0.0.117 GET /api/users 200 51210.0.0.116 DELETE /api/users 403 9610.0.0.118 GET /api/orders 500 6410.0.0.117 POST /api/orders 201 25610.0.0.120 GET /healthz 200 1210.0.0.117 GET /api/users 404 3210.0.0.115 GET /api/orders 200 102410.0.0.118 GET /healthz 200 122. 상태 코드가 5 로 시작하는 줄만 원본 순서 그대로 /root/lfcs-text/errors.txt 에 담으세요.
3. IP 별 바이트 합계를 /root/lfcs-text/bytes_by_ip.txt 에 <IP> <합계> 형식으로, 합계 내림차순으로 적으세요.
4. 가장 많이 등장한 IP 를 /root/lfcs-text/top_ip.txt 에 <횟수> <IP> 한 줄로 적으세요.
5. 두 번째 필드(HTTP 메서드)를 뽑아 소문자로 바꾸고 중복을 없앤 뒤 사전순으로 정렬해 /root/lfcs-text/methods.txt 에 적으세요.
6. access.log 를 /root/lfcs-text/access-v2.log 로 복사한 뒤, 그 사본에서 경로의 /api/ 를 /v2/api/ 로 바꾸세요. 편집 전 내용은 /root/lfcs-text/access-v2.log.bak 으로 남아야 하고 access.log 원본은 그대로여야 합니다.
7. /root/lfcs-text/services.json 을 아래 내용으로 만들고, tier 가 backend 인 서비스의 replicas 합계를 /root/lfcs-text/jq_out.txt 에 숫자 하나로 적으세요.
{ "cluster": "homelab", "services": [ {"name": "api", "replicas": 3, "tier": "backend"}, {"name": "web", "replicas": 5, "tier": "frontend"}, {"name": "worker", "replicas": 2, "tier": "backend"} ]}8. /root/lfcs-text/deploy.yaml 을 아래 내용으로 만들고, /root/lfcs-text/yq_out.txt 에 replicas=<값> 과 image=<값> 두 줄을 적으세요.
apiVersion: apps/v1kind: Deploymentmetadata: name: lfcs-web namespace: lfcsspec: replicas: 4 template: spec: containers: - name: web image: nginx:1.27참고
awk는 필드를$1,$2처럼 번호로 가리킵니다. 합계는 연관 배열에 모으면 한 번에 끝납니다.sort -k2,2nr는 두 번째 필드를 숫자 기준 내림차순으로 정렬합니다.uniq는 인접한 중복만 처리합니다. 반드시 앞에서 정렬하세요.- 흔한 실수: 치환 대상에 슬래시가 들어가면 구분자를
#등으로 바꾸는 편이 안전합니다.
단계 8개
- 분석할 로그 파일 만들기
- 5xx 응답만 추려 내기
- IP 별 바이트 합계
- 가장 많이 등장한 IP
- 메서드 목록 정규화
- 원본을 지키며 치환하기
- JSON 집계
- YAML 값 추출