LFCS — Linux Foundation System Administrator
Shaping and Aggregating Logs
한국어 원문으로 표시합니다.
목표
직접 만든 로그를 grep·sed·awk·cut·tr·sort·uniq 로 가공하고, jq 와 yq 로 구조화된 데이터에서 값을 뽑아낸다.
왜 중요한가
LFCS 의 텍스트 처리 문제는 "정답 한 줄을 아는가" 가 아니라 필드 단위로 사고하는가를 본다. 줄 전체를 정규식으로 훑으면 바이트 수 컬럼의 500 같은 것까지 걸린다. 그래서 상태 코드는 네 번째 필드라는 구조를 먼저 잡고, 그 위에 도구를 얹어야 한다. 집계도 마찬가지다 — sort | uniq -c | sort -rn 은 관용구지만, 왜 앞에서 한 번 정렬해야 하는지(uniq 는 인접한 중복만 지운다) 를 모르면 상황이 조금만 바뀌어도 무너진다. 마지막 두 단계는 요즘 운영 현실이다. 설정은 대부분 JSON 이나 YAML 이고, 값 하나를 꺼내려고 파이썬을 켜는 대신 jq 와 yq 로 끝내는 손이 필요하다.
단계
/root/lfcs-text/access.log를 아래 12줄 그대로 만드세요. 필드는 공백 하나로 구분하며<IP> <메서드> <경로> <상태코드> <바이트>입니다.
10.0.0.117 GET /api/users 200 512
10.0.0.118 POST /api/users 201 128
10.0.0.117 GET /api/orders 500 64
10.0.0.120 GET /healthz 200 12
10.0.0.117 GET /api/users 200 512
10.0.0.116 DELETE /api/users 403 96
10.0.0.118 GET /api/orders 500 64
10.0.0.117 POST /api/orders 201 256
10.0.0.120 GET /healthz 200 12
10.0.0.117 GET /api/users 404 32
10.0.0.115 GET /api/orders 200 1024
10.0.0.118 GET /healthz 200 12
- 상태 코드가 5 로 시작하는 줄만 원본 순서 그대로
/root/lfcs-text/errors.txt에 담으세요. - IP 별 바이트 합계를
/root/lfcs-text/bytes_by_ip.txt에<IP> <합계>형식으로, 합계 내림차순으로 적으세요. - 가장 많이 등장한 IP 를
/root/lfcs-text/top_ip.txt에<횟수> <IP>한 줄로 적으세요. - 두 번째 필드(HTTP 메서드)를 뽑아 소문자로 바꾸고 중복을 없앤 뒤 사전순으로 정렬해
/root/lfcs-text/methods.txt에 적으세요. access.log를/root/lfcs-text/access-v2.log로 복사한 뒤, 그 사본에서 경로의/api/를/v2/api/로 바꾸세요. 편집 전 내용은/root/lfcs-text/access-v2.log.bak으로 남아야 하고access.log원본은 그대로여야 합니다./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"}
]
}
/root/lfcs-text/deploy.yaml을 아래 내용으로 만들고,/root/lfcs-text/yq_out.txt에replicas=<값>과image=<값>두 줄을 적으세요.
apiVersion: apps/v1
kind: Deployment
metadata:
name: lfcs-web
namespace: lfcs
spec:
replicas: 4
template:
spec:
containers:
- name: web
image: nginx:1.27
참고
awk는 필드를$1,$2처럼 번호로 가리킵니다. 합계는 연관 배열에 모으면 한 번에 끝납니다.sort -k2,2nr는 두 번째 필드를 숫자 기준 내림차순으로 정렬합니다.uniq는 인접한 중복만 처리합니다. 반드시 앞에서 정렬하세요.- 흔한 실수: 치환 대상에 슬래시가 들어가면 구분자를
#등으로 바꾸는 편이 안전합니다.
분석할 로그 파일 만들기
/root/lfcs-text/access.log 를 아래 12줄 그대로 만드세요. 필드는 공백 하나로 구분하며 <IP> <메서드> <경로> <상태코드> <바이트> 입니다.
지시문의 12줄을 그대로 만들면 됩니다. 필드 구분은 공백 하나이고 줄 순서도 그대로여야 뒤 단계 결과가 맞습니다.
5xx 응답만 추려 내기
상태 코드가 5 로 시작하는 줄만 원본 순서 그대로 /root/lfcs-text/errors.txt 에 담으세요.
상태 코드는 네 번째 필드입니다. 줄 전체에서 500 을 찾으면 바이트 수에 500 이 들어간 줄까지 걸릴 수 있으니 필드를 지정해 판단하세요.
IP 별 바이트 합계
IP 별 바이트 합계를 /root/lfcs-text/bytes_by_ip.txt 에 <IP> <합계> 형식으로, 합계 내림차순으로 적으세요.
awk 의 연관 배열에 IP 를 키로 두고 다섯 번째 필드를 더해 가면 됩니다. 마지막에 배열을 순회해 출력하고 숫자 기준 내림차순으로 정렬하세요.
가장 많이 등장한 IP
가장 많이 등장한 IP 를 /root/lfcs-text/top_ip.txt 에 <횟수> <IP> 한 줄로 적으세요.
중복을 세려면 먼저 정렬해야 합니다. 개수를 붙여 주는 도구의 출력은 '개수 값' 순서라는 점을 그대로 활용하세요.
메서드 목록 정규화
두 번째 필드(HTTP 메서드)를 뽑아 소문자로 바꾸고 중복을 없앤 뒤 사전순으로 정렬해 /root/lfcs-text/methods.txt 에 적으세요.
필드를 잘라 내는 도구와 글자를 바꾸는 도구를 이어 붙입니다. 중복 제거는 정렬 도구의 옵션으로도 됩니다.
원본을 지키며 치환하기
access.log 를 /root/lfcs-text/access-v2.log 로 복사한 뒤, 그 사본에서 경로의 /api/ 를 /v2/api/ 로 바꾸세요. 편집 전 내용은 /root/lfcs-text/access-v2.log.bak 으로 남아야 하고 access.log 원본은 그대로여야 합니다.
제자리 편집 옵션에 접미사를 붙이면 편집 전 내용이 그 이름으로 남습니다. 치환 구분자는 슬래시 말고 다른 문자로 바꿔도 됩니다.
JSON 집계
/root/lfcs-text/services.json 을 아래 내용으로 만들고, tier 가 backend 인 서비스의 replicas 합계를 /root/lfcs-text/jq_out.txt 에 숫자 하나로 적으세요.
배열을 조건으로 걸러 낸 뒤 원하는 필드만 모아 배열로 만들고, 그 배열을 더하는 함수를 쓰면 한 줄로 끝납니다.
YAML 값 추출
/root/lfcs-text/deploy.yaml 을 아래 내용으로 만들고, /root/lfcs-text/yq_out.txt 에 replicas=<값> 과 image=<값> 두 줄을 적으세요.
경로 표현식은 jq 와 거의 같습니다. 배열 원소는 인덱스로 접근하고, 구현체에 따라 따옴표가 붙어 나올 수 있으니 결과를 눈으로 확인하세요.