LabHub

LFCS — 리눅스 재단 시스템 관리자 · 필수 명령과 텍스트 처리 · 실습

로그를 가공하고 집계하기

LabHub 에서 이어서 보기

목표

직접 만든 로그를 grep·sed·awk·cut·tr·sort·uniq 로 가공하고, jq 와 yq 로 구조화된 데이터에서 값을 뽑아낸다.

왜 중요한가

LFCS 의 텍스트 처리 문제는 "정답 한 줄을 아는가" 가 아니라 필드 단위로 사고하는가를 본다. 줄 전체를 정규식으로 훑으면 바이트 수 컬럼의 500 같은 것까지 걸린다. 그래서 상태 코드는 네 번째 필드라는 구조를 먼저 잡고, 그 위에 도구를 얹어야 한다. 집계도 마찬가지다 — sort | uniq -c | sort -rn 은 관용구지만, 왜 앞에서 한 번 정렬해야 하는지(uniq 는 인접한 중복만 지운다) 를 모르면 상황이 조금만 바뀌어도 무너진다. 마지막 두 단계는 요즘 운영 현실이다. 설정은 대부분 JSON 이나 YAML 이고, 값 하나를 꺼내려고 파이썬을 켜는 대신 jqyq 로 끝내는 손이 필요하다.

단계

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 12

2. 상태 코드가 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 을 아래 내용으로 만들고, tierbackend 인 서비스의 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.txtreplicas=<값>image=<값> 두 줄을 적으세요.

apiVersion: apps/v1kind: Deploymentmetadata:  name: lfcs-web  namespace: lfcsspec:  replicas: 4  template:    spec:      containers:        - name: web          image: nginx:1.27

참고

단계 8개

  1. 분석할 로그 파일 만들기
  2. 5xx 응답만 추려 내기
  3. IP 별 바이트 합계
  4. 가장 많이 등장한 IP
  5. 메서드 목록 정규화
  6. 원본을 지키며 치환하기
  7. JSON 집계
  8. YAML 값 추출