LabHub
배우기 러닝패스 코스

Loki — 로그를 색인하지 않는 로그 저장소 · 넣은 줄이 곧바로 보이지 않는 이유 · 실습

두 시간치를 복구해 넣었는데 화면에는 아무것도 없었다

LabHub 에서 이어서 보기

목표

과거 타임스탬프로 넣은 줄이 접수는 되는데 보이지 않는 현상을 파드의 진짜 Loki 에서 재현하고, 그 경계를 정하는 설정을 서버에서 직접 확인한 뒤 플러시로 되살립니다.

왜 중요한가

Loki 의 쓰기와 읽기는 서로 다른 길을 간다. 들어온 줄은 인제스터의 열린 청크에 쌓이고, 청크가 닫혀야 저장소로 올라간다. 질의는 저장소에 묻되 최근 구간이면 인제스터에도 묻는데, 그 '최근' 의 범위가 query_ingesters_within(기본 3시간)이다. 그래서 복구 작업으로 뒤늦게 밀어 넣은 과거 자료는 두 길 사이의 틈에 빠진다 — 저장소에는 아직 없고 인제스터에는 있지만 아무도 묻지 않는다. 이 구조를 모르면 'push 가 거짓말을 한다' 로 결론 내리고 엉뚱한 곳을 고치게 된다.

단계

1. /root/lk-chunks 에서 Loki 를 띄우고 date +%s/root/lk-chunks/anchor.txt 에 적은 뒤 python3 /opt/lab/d5/gen.py chunks "$(cat anchor.txt)" 로 자료를 넣으세요. 이 자료는 기준 시각에서 30분 안쪽에 있습니다. {app="fresh"} 를 한 시간 구간으로 질의해 줄 수를 세고, 저장소 디렉터리 /tmp/lokidata/chunks 아래의 파일 수도 세어 /root/lk-chunks/01-boot.txtlines=<정수>chunk_files=<정수> 두 줄로 적으세요.
2. python3 /opt/lab/d5/gen.py chunks-old "$(cat anchor.txt)" 로 기준 시각에서 다섯 시간 전 자료를 넣으세요. 그리고 그 시각 앞뒤 한 시간 구간으로 {app="aged"} 를 질의해 줄 수를 세고, /root/lk-chunks/02-aged.txt 에 두 줄로 적으세요 — push_code=<HTTP 상태 코드>lines=<정수>.
3. 새 스트림 네 개에 한 줄씩 넣어 보이는지 확인하세요 — 기준 시각에서 1·2·4·5시간 전이고 라벨은 {"app":"b1h"}·b2h·b4h·b5h 입니다. 결과를 /root/lk-chunks/boundary.tsv 에 머리글 없이 네 줄, 탭으로 나눈 두 칸 <시간><탭><yes|no> 로 적습니다(시간은 1·2·4·5). 그리고 이 경계를 정하는 설정을 서버의 /config 에서 찾아 /root/lk-chunks/03-param.txtparam=<설정 이름>value=<기본값 그대로> 두 줄로 적으세요.
4. 플러시 전후를 한 파일에 기록하세요. 먼저 {app="aged"} 줄 수와 /tmp/lokidata/chunks 의 파일 수를 재고, curl -XPOST http://localhost:3100/flush 를 부른 뒤 같은 두 숫자를 다시 잽니다. /root/lk-chunks/04-flush.txt 에 네 줄로 적으세요 — aged_before=, chunks_before=, aged_after=, chunks_after=.
5. 서버의 /config 에서 열린 청크가 닫히는 조건을 정하는 세 설정을 찾아 /root/lk-chunks/chunkparams.tsv 에 머리글 없이 세 줄, 탭으로 나눈 두 칸 <설정이름><탭><값> 으로 적으세요. 순서는 chunk_idle_period, chunk_target_size, max_chunk_age 이고 값은 서버가 찍어 준 그대로입니다.
6. 플러시가 끝난 지금 색인에 어떤 스트림이 있는지 series API 로 확인해 /root/lk-chunks/06-series.txt 에 두 줄로 적으세요 — streams=<정수>apps=<app 라벨 값들을 쉼표로, 사전순>. 조회 구간은 기준 시각에서 과거 일곱 시간으로 주세요. 8단계에서 만들 revive 스트림은 세지 않습니다(이 단계에서는 아직 없습니다).
7. /root/lk-chunks/runbook.txt 에 네 줄을 적으세요. 각 줄은 1. 부터 4. 로 시작하고, 각 줄에는 실제로 칠 수 있는 확인 명령이나 확인할 값이 하나씩 들어가야 합니다. 주제는 "과거 구간의 로그가 비어 보인다" 는 신고를 받았을 때의 점검 순서입니다. 네 줄을 합쳐 공백을 뺀 글자가 120자 이상이어야 합니다.
8. 본문에 revive-check 라는 낱말이 든 줄 하나를 라벨 {"app":"revive"} 로 기준 시각에서 여섯 시간 전에 넣고, 질의로 보이게 만든 뒤 그 줄의 본문을 /root/lk-chunks/08-revive.txt 에 한 줄로 적으세요. 본문의 나머지 내용은 자유입니다.

참고

단계 8개

  1. 최근 자료는 넣자마자 보인다
  2. 다섯 시간 전 자료는 204 를 받고도 안 보인다
  3. 경계가 어디인지 실측하고 설정에서 확인한다
  4. 강제로 플러시하면 같은 질의가 답한다
  5. 청크는 언제 닫히나 — 세 손잡이를 찾는다
  6. 색인에는 무엇이 남았나
  7. 응용 ① — 같은 신고를 받았을 때의 점검 순서
  8. 응용 ② — 여섯 시간 전 줄 하나를 보이게 만든다