LabHub
배우기 러닝패스 코스

ログから原因を見つける

散らばったログを因果に束ねる

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

서로 다른 형식의 로그 세 개를 겹쳐, 흩어진 사실들을 하나의 인과로 묶을 수 있게 됩니다.

왜 중요한가

에러 로그부터 보는 것은 자연스럽지만 이야기의 중간부터 읽는 것입니다. 전형적인 열화는 변경 → 일부 요청 지연(경고) → 자원 점유 → 타임아웃(에러) → 알람 순으로 진행되고, 에러 로그만 보면 마지막 두 단계만 보입니다. 그래서 던져야 할 질문은 "언제 에러가 시작됐나" 가 아니라 "언제 정상이 아니게 됐나" 이고, 경고 레벨의 첫 등장 시각이 그 답입니다.

이 실습에서 확인하게 될 또 하나는 평균의 무력함입니다. 전체 평균 지연은 어떤 요청도 대표하지 못하지만, "1000ms 를 넘는 요청이 몇 건인가" 는 즉시 문제를 드러냅니다. 지표를 하나만 뽑아야 한다면 평균이 아니라 임계 초과 건수를 뽑으세요.

로그 세 개

단계

  1. /root/correlate 디렉터리를 만드세요.
  2. app.jsonl 에서 levelerror 인 줄의 개수를 /root/correlate/error_count.txt 에 적으세요.
  3. 에러 메시지가 지목하는 테이블 이름을 /root/correlate/table.txt 에 적으세요.
  4. 전체 latency_ms 의 평균을 정수로 내림해 /root/correlate/avg_latency.txt 에 적으세요.
  5. latency_ms 가 1000 을 초과하는 요청 수를 /root/correlate/slow_count.txt 에 적으세요.
  6. levelwarn 인 가장 이른 줄의 시각을 HH:MM 으로 /root/correlate/first_warn.txt 에 적으세요.
  7. deploy.log 에서 사고 직전에 배포된 payment 서비스 버전을 /root/correlate/version.txt 에 적으세요.
  8. /root/correlate/link.md 에 인과를 정리하세요. 배포 버전, 느려진 테이블, 최초 경고 시각, 에러 시각이 모두 들어가야 합니다.

참고

작업 디렉터리 만들기

/root/correlate 디렉터리를 만드세요.

/root/correlate 아래에 결과를 모읍니다.

에러 로그 수 세기

app.jsonl 에서 levelerror 인 줄의 개수를 /root/correlate/error_count.txt 에 적으세요.

app.jsonl 은 한 줄이 하나의 JSON 입니다. level 필드가 error 인 줄을 세세요.

원인 테이블 알아내기

에러 메시지가 지목하는 테이블 이름을 /root/correlate/table.txt 에 적으세요.

에러 메시지 자체에 답이 들어 있습니다. msg 필드를 한 줄만 제대로 읽어 보세요.

평균 지연 구하기

전체 latency_ms 의 평균을 정수로 내림해 /root/correlate/avg_latency.txt 에 적으세요.

전체 latency_ms 의 평균을 정수로 내림합니다. 이 값이 뒤 단계와 대비됩니다.

느린 요청 수 세기

latency_ms 가 1000 을 초과하는 요청 수를 /root/correlate/slow_count.txt 에 적으세요.

latency_ms 가 1000 을 넘는 요청의 개수입니다. 평균 하나로는 안 보이던 것이 드러납니다.

최초 경고 시각 찾기

levelwarn 인 가장 이른 줄의 시각을 HH:MM 으로 /root/correlate/first_warn.txt 에 적으세요.

level 이 warn 인 줄 중 가장 이른 ts 의 HH:MM 입니다. 에러보다 앞에 있습니다.

직전 배포 버전 찾기

deploy.log 에서 사고 직전에 배포된 payment 서비스 버전을 /root/correlate/version.txt 에 적으세요.

deploy.log 에서 사고 시각 직전에 배포된 payment 서비스의 버전입니다.

인과 정리하기

/root/correlate/link.md 에 인과를 정리하세요. 배포 버전, 느려진 테이블, 최초 경고 시각, 에러 시각이 모두 들어가야 합니다.

배포 버전, 느려진 테이블, 최초 경고 시각, 에러 시각을 하나의 문서로 묶으세요.