Prometheus가 메트릭(Metric) 모니터링의 표준이라면, Loki는 그에 대응하는 로그(Log) 모니터링의 혁신적인 솔루션이다. Grafana Labs에서 개발한 Loki는 “Prometheus-like”한 설계를 바탕으로 로그 인덱싱 비용을 획기적으로 줄이면서도 강력한 검색 기능을 제공한다. 본 글에서는 Loki의 핵심 개념부터 Grafana와의 연동 방법, 그리고 효율적인 로그 조회를 위한 LogQL 기초까지 상세히 다룬다.

목차

  1. Loki의 철학과 아키텍처: 왜 Loki인가?
  2. Loki 설치 및 구성 요소(Promtail) 이해
  3. Grafana에서 Loki 데이터 소스 연결하기
  4. LogQL: 로그 분석을 위한 쿼리 언어 기초
  5. 대시보드 구성 및 메트릭화(Metrics from Logs)
  6. 결론: 메트릭과 로그의 결합 시너지

1. Loki의 철학과 아키텍처: 왜 Loki인가?

기존의 ELK(Elasticsearch, Logstash, Kibana) 스택은 강력하지만, 모든 로그 메시지를 인덱싱하기 때문에 스토리지 비용과 리소스 소모가 막대하다는 단점이 있다. 반면 Loki는 로그 본문 전체를 인덱싱하지 않고, 로그와 연관된 라벨(Label) 세트만을 인덱싱한다.

  • 저비용 고효율: 인덱스 크기가 작아 오브젝트 스토리지(S3 등)를 활용한 저렴한 운영이 가능하다.
  • Prometheus와의 일관성: Prometheus와 동일한 라벨 시스템을 사용하므로, 메트릭에서 확인한 라벨 그대로 로그를 즉시 추적할 수 있다.
  • 클라우드 네이티브: 쿠버네티스 환경에서의 오토스케일링 및 멀티 테넌시 지원이 탁월하다.

2. Loki 설치 및 구성 요소(Promtail) 이해

Loki 시스템을 운영하기 위해서는 로그를 수집하는 ‘에이전트’가 반드시 필요하다. 가장 대표적인 것이 Promtail이다.

  • Loki: 로그를 저장하고 쿼리를 처리하는 중앙 서버.
  • Promtail: 각 서버나 컨테이너에서 로그 파일을 읽어와 라벨을 붙이고 Loki로 전송하는 에이전트.
  • 동작 원리: Promtail이 /var/log/*.log 파일을 감시하다가 새로운 줄이 추가되면 설정된 라벨(예: job, instance)과 함께 Loki API로 푸시한다.

3. Grafana에서 Loki 데이터 소스 연결하기

Loki와 Promtail이 정상적으로 실행 중이라면, 시각화를 위해 Grafana와 연결해야 한다.

  1. 데이터 소스 진입: Grafana 왼쪽 메뉴에서 Connections > Data Sources를 선택한다.
  2. Loki 선택: Add data source 버튼을 누르고 ‘Loki’를 검색하여 선택한다.
  3. URL 설정: Loki 서버의 주소를 입력한다. (예: http://localhost:3100 또는 쿠버네티스 내부 주소)
  4. Save & Test: 하단의 Save & test를 클릭하여 ‘Data source connected’ 메시지가 뜨는지 확인한다.

이제 Explore 메뉴에서 데이터 소스를 Loki로 변경하면 실시간 로그 브라우징이 가능하다.

4. LogQL: 로그 분석을 위한 쿼리 언어 기초

Loki는 PromQL과 매우 유사한 LogQL을 사용한다. 로그를 필터링하고 분석하는 기본 문법은 다음과 같다.

  • 로그 스트림 선택: {job="syslog"} – 특정 라벨의 로그 전체 조회.
  • 텍스트 필터링: {container="nginx"} |= "error" – ‘error’라는 단어가 포함된 로그만 추출.
  • 정규표현식 활용: {app="api"} |~ "status=[45].." – 400번대 또는 500번대 에러 로그 검색.
  • 파싱(Parsing): | json 또는 | logfmt를 사용하면 로그의 구조를 자동으로 파악하여 필드별로 분리해준다.

5. 대시보드 구성 및 메트릭화(Metrics from Logs)

Loki의 진가는 로그를 숫자로 변환하여 그래프로 그릴 때 나타난다. 이를 ‘로그 기반 메트릭’이라 한다.

  • 에러 빈도 시각화: sum(count_over_time({job="mysql"} |= "error" [5m])) 쿼리를 사용하면 5분간 발생한 에러 횟수를 시계열 그래프(Time Series)로 표현할 수 있다.
  • 로그 패널 최적화: Grafana의 Logs 패널을 사용하면 로그의 심각도(Level)에 따라 색상을 입히거나, 특정 단어를 강조(Highlight)하여 가독성을 높일 수 있다.

6. 결론: 메트릭과 로그의 결합 시너지

Loki를 Grafana와 연동하면 모니터링의 ‘관측 가능성(Observability)’이 완성된다. Prometheus 대시보드에서 CPU 사용량이 튀는 지점을 발견했을 때, 클릭 한 번으로 동일한 시간대의 Loki 로그로 전환하여 원인을 파악하는 ‘상관관계 분석’이 가능해지기 때문이다.

초기 설정이 다소 복잡할 수 있으나, 한 번 구축해두면 장애 대응 시간을 획기적으로 단축할 수 있는 만큼 Loki 연동은 현대적 인프라 관리의 필수 코스라 할 수 있다.

댓글 남기기