Loki — 로그를 색인하지 않는 로그 저장소 · 설계 결정 · 실습
라벨 하나로 비용이 30배 된다
목표
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:3100setsid 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개
- Loki 를 띄우고 한 줄 넣는다
- 라벨 조합 하나가 스트림 하나
- 내용은 색인되지 않는다
- 카디널리티를 일부러 터뜨린다
- 같은 정보를 내용에 둔다
- 내용에서 값을 꺼내 쓴다
- 라벨에 넣어도 되는 것을 가른다
- 세 가지를 정리한다