Loki

로그를 레이블 기반으로 인덱싱해 저장하는 경량 로그 집계 시스템으로, Grafana Labs가 만들었으며 Grafana와 함께 사용합니다.

핵심 특징

ELK vs PLG 비교

항목ELK (Elasticsearch + Logstash + Kibana)PLG (Promtail + Loki + Grafana)
인덱싱전체 텍스트 인덱싱레이블만 인덱싱
검색 속도빠름상대적으로 느림
저장 비용높음낮음
운영 복잡도높음낮음
메트릭 연동별도 설정 필요Prometheus와 자연스럽게 통합

로그 수집 흐름

Spring Boot 앱
     │ 로그 파일 (stdout / file)
     ▼
  Promtail (로그 에이전트)
     │ 레이블 부착 {app="cslog", env="prod"}
     ▼
   Loki (저장)
     │ LogQL 쿼리
     ▼
  Grafana (시각화)

LogQL 기본 문법

# 레이블 필터 — cslog 앱의 ERROR 로그
{app="cslog"} |= "ERROR"

# 정규식 필터
{app="cslog"} |~ "userId=\\d+"

# 로그 라인 파싱 후 필터
{app="cslog"} | logfmt | level="error"

# 초당 에러 로그 수 (메트릭으로 변환)
rate({app="cslog"} |= "ERROR" [1m])

Docker Compose 설정 예시

services:
  loki:
    image: grafana/loki:latest
    ports:
      - "3100:3100"

  promtail:
    image: grafana/promtail:latest
    volumes:
      - /var/log:/var/log
      - ./promtail-config.yml:/etc/promtail/config.yml

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"

→ Grafana & Loki

CSLOG에서 보기