Loki

"metric은 Prometheus로 모으는데, 로그는 어디에 모으고 어떻게 찾는가?" 이 페이지는 그 질문에 답한다. Loki는 로그를 저장하고 조회하는 시스템이며, Prometheus와 같은 라벨 모델로 로그를 색인한다.[1] Prometheus가 metric을 담당한다면 Loki는 로그를 담당해 서로를 보완하고, 조회는 Grafana에서 LogQL로 한다.[1:1]

구성 요소와 수집 방향

구성 요소 역할
Loki 로그 저장과 조회. metric처럼 라벨로 색인하고, 로그 내용 자체는 색인하지 않는다
Promtail 로그 수집 에이전트. 파일이나 Docker 로그를 tail해서 Loki로 push한다
Grafana Loki를 데이터소스로 연결해 LogQL로 조회한다

로그에 라벨이 붙는 지점

scrape_configs:
  - job_name: docker
    static_configs:
      - targets: [localhost]
        labels:
          job: docker
          __path__: /var/lib/docker/containers/*/*-json.log
    pipeline_stages:
      - docker: {}               # 도커 JSON 로그 파싱
      - labels:
          container: container_name
          image: image_name

LogQL 기본 쿼리

# 특정 컨테이너 로그
{job="docker", container="leafy_api"}

# ERROR 포함 로그만
{job="docker"} |= "ERROR"

# HTTP 5xx 카운트 (로그 기반)
sum by (container) (
  rate({job="docker"} |= " 5" |~ "HTTP/1.1\" 5[0-9]{2}" [5m])
)

장애 관제 Agent에서의 쓰임

설정 예시의 경계

관련

테스트 질문

출처


  1. Loki.md — "로그 저장/조회 시스템 — Prometheus와 동일한 레이블 모델로 로그를 인덱싱", 구성 요소 표("Loki | 로그 저장 및 조회 (메트릭처럼 라벨 기반 인덱싱, 내용은 비인덱싱)", "Promtail | 로그 수집 에이전트 (파일/도커 로그 tail → Loki push)", "Grafana | Loki 데이터소스 연결 → LogQL로 조회"), "Prometheus가 메트릭을 Pull하는 것과 달리, Promtail이 로그를 Push하는 구조", docker-compose의 grafana/loki:3.1.1·grafana/promtail:3.1.1과 읽기 전용 마운트, Loki 설정의 store: tsdb·schema: v13·alertmanager_url: http://alertmanager:9093, Promtail 설정의 clients URL·docker/syslog scrape_configs·pipeline_stages, LogQL 기본 쿼리 3개, 관련 개념 "Prometheus - 메트릭 수집 (Loki와 상호보완)" ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  2. 01-프로젝트-개요.md — 전체 아키텍처의 "Loki (로그 수집)", 도구 목록 "LokiQueryService (로그 조회)", "Alertmanager에서 웹훅이 오면 에이전트가 자동으로 Prometheus 메트릭, Loki 로그, 과거 유사 사례(RAG)를 조회하고 근본 원인 및 조치를 분석한다." ↩︎