LabHub

Loki — 로그를 색인하지 않는 로그 저장소 · 설계 결정 · 실습

라벨 하나로 비용이 30배 된다

LabHub 에서 이어서 보기

목표

Loki 는 로그 내용을 색인하지 않습니다. 라벨만 색인합니다. 그래서 싸고,
그래서 라벨을 잘못 잡으면 터집니다.

이 실습은 그걸 말로 듣는 대신 직접 터뜨려 봅니다.

시작

cp -r /opt/lab/loki/* . && chmod +x *.shsetsid nohup loki -config.file=loki.yaml > loki.log 2>&1 </dev/null &curl -s localhost:3100/ready       # "ready" 가 될 때까지 20초쯤export LOKI_ADDR=http://localhost:3100

setsid nohup 을 붙이세요. 그냥 & 로 띄우면 셸이 바뀔 때 같이 죽습니다.

도구

| 파일 | 하는 일 |
|---|---|
| push.sh | 로그 한 줄 넣기 — 첫 인자가 라벨 JSON |
| streams.sh | 지금 스트림 개수 (-v 면 조합까지) |
| logcli | LogQL 질의 |

LogQL 은 라벨 선택으로 시작한다

{app="web", level="error"} |= "timeout" | logfmt | status="500"└── 색인으로 좁힌다 ──┘ └── 여기부터는 훑어 읽는다 ──────────┘

앞의 중괄호가 읽을 범위를 정하고, 뒤는 그 범위 안을 읽으며 거릅니다.
범위를 안 좁히면 전부 읽습니다.

단계

1. 띄우고 한 줄 → 01-boot.txt
2. 라벨 조합 = 스트림 → 02-streams.txt
3. 내용은 색인 안 됨 → 03-notindexed.md
4. 카디널리티 폭발 → 04-explode.txt
5. 같은 정보를 내용에 → 05-fix.txt
6. 파서로 꺼내 쓰기 → 06-parser.txt
7. 라벨 판단 기준 → 07-rule.md
8. 정리 → 08-notes.md

참고

4단계와 5단계의 숫자 차이가 이 실습의 전부입니다. 같은 정보를 어디에
두느냐로 스트림이 30개 늘거나 1개 늡니다.

단계 8개

  1. Loki 를 띄우고 한 줄 넣는다
  2. 라벨 조합 하나가 스트림 하나
  3. 내용은 색인되지 않는다
  4. 카디널리티를 일부러 터뜨린다
  5. 같은 정보를 내용에 둔다
  6. 내용에서 값을 꺼내 쓴다
  7. 라벨에 넣어도 되는 것을 가른다
  8. 세 가지를 정리한다