Overview
클라우드 네이티브 환경에서 로그 수집과 관리는 필수적인 요소이다.
하지만 로그는 방대하고 비정형적이며, 기존의 로그 수집 시스템은 스토리지 비용이 많이 들거나,
확장성이 떨어지는 경우가 많다.
Loki는 이러한 문제를 해결하기 위해 Grafana Labs에서 만든 분산 로그 집계 시스템으로,
Prometheus와 유사한 철학을 기반으로 메타데이터 중심의 로그 색인 구조를 채택하고 있다.
복잡한 파싱이나 필터링 없이 라벨(Label) 기반 로그 수집이 가능하며,
Grafana와의 자연스러운 통합 덕분에 메트릭-로그 연계 분석을 쉽게 구현할 수 있다는 점에서
DevOps, SRE 팀의 로그 분석 경험을 획기적으로 개선해주는 도구로 주목받고 있다.
📅 관련 글
2024.03.05 - [Monitoring] - Fluent Bit (With Loki)
2024.09.12 - [Monitoring] - Prometheus와 Thanos란?
2024.09.12 - [Monitoring] - Prometheus 와 Thanos 설치 및 구성
2024.09.12 - [Monitoring] - Loki란?
2024.09.13 - [Monitoring] - Loki와 Promtail 설치
2025.01.13 - [Monitoring] - ELK Stack 구축해보기
Loki란?
Loki는 Grafana에서 개발한 Log Aggreation System으로, 주로 클라우드 네이티브 환경에서 로그를 수집, 저장, 조회하는데 사용된다.
로그 데이터를 구조화하지 않고 저장하며, 강력한 쿼리 언어를 통해 이 로그들을 효과적으로 필터링하고 조회할 수 있다. Loki는 특히 높은 확장성과 효율성을 지니고 있어, 대규모 분산 시스템 환경에서 유용하게 사용된다.
Loki 특징
- 다양한 클라이언트를 사용하여 모든 소스에서 모든 형식으로 로그를 전송할 수 있으므로 시작하기가 정말 쉽다.
- 객체 스토리지에 대한 100% 지속성으로 페타바이트 규모, 높은 처리량, 비용 효율적이고 내구성이 뛰어난 스토리지를 확보할 수 있다.
- 로그 라인에서 메트릭 구축 및 알림 생성할 수 있다.
- 수집 로그 형식 지정 요구 사항이 없으므로 더 많은 유연성과 쿼리 시 형식 지정 옵션을 사용할 수 있다.
- 로그를 실시간으로 추적하여 시스템에 들어오는 로그를 확인하고, 특정 시간 이후 로그를 업데이트하고, 특정 날짜의 로그를 확인하는 등의 작업을 수행한다.
- 프로메테우스, 그라파나, K8과 기본적으로 통합되므로 단일 UI 내에서 메트릭, 로그 및 트레이스 간에 원활하게 이동할 수 있다
Loki 구성요소
- Promtail
- Promtail은 Loki 시스템의 에이전트로, 로그 파일을 수집하고 Loki 서버로 전송하는 역할을 한다.
- Kubernetes 클러스터의 노드에서 로그를 수집하는 주요 방법이며, 파일 또는 표준 출력을 포함하여 다양한 소스에서 로그를 가져올 수 있다.
- Loki Server
- 이 서버는 수집된 로그 데이터를 받아 저장하고 처리한다.
- Loki 서버는 효율적인 저장과 쿼리 실행을 위해 로그 데이터를 인덱싱하지만, 전통적인 로그 시스템과 달리 로그 내용 자체를 인덱싱하지 않고 메타데이터(라벨)만을 인덱싱한다.
- Distributor
- 로그 데이터를 여러 ingester 인스턴스에 분산하여 처리할 수 있도록 해주는 구성요소이다.
- Distributor는 로그 데이터를 받아 해싱 알고리즘을 사용해 해당 데이터를 적절한 ingester로 라우팅한다.
- Ingester
- Ingester는 로그 데이터를 받아 압축 및 저장을 담당한다.
- 로그 데이터를 메모리에 임시 저장하고, 일정 시간이나 크기에 도달하면 스토리지 백엔드(예: 파일 시스템, 클라우드 스토리지 서비스 등)로 플러시한다.
- Querier
- 사용자의 쿼리를 처리하여 필요한 로그 데이터를 검색하는 역할을 한다.
- Querier는 저장된 로그 데이터 뿐만 아니라 현재 ingester에서 처리 중인 실시간 데이터에 대해서도 쿼리를 실행할 수 있다.
- Query Frontend
- 선택적 구성요소로, 복잡한 쿼리 작업을 캐시하고 최적화하여 queriers의 부하를 줄이는 역할을 한다.
- 쿼리 프론트엔드는 쿼리를 배치 처리하고 결과를 캐시하여 빠른 응답을 도울 수 있다.
- Compactor
- 장기 저장 데이터를 보다 효율적으로 관리하기 위해 오래된 데이터를 압축하고 최적화하는 역할을 한다.
- Compactor는 스토리지 비용을 줄이고 쿼리 성능을 향상시키는 데 중요한 역할을 한다.
- Storage Backends
- Loki는 여러 종류의 스토리지 백엔드를 지원하며, 구성에 따라 파일 시스템, Google Cloud Storage, Amazon S3 등을 사용할 수 있다.
Promtail의 작동방식
- 설치 및 구성
- Promtail은 Kubernetes 클러스터 내 각 노드에 대해 DaemonSet으로 배포되는 것이 일반적입니다. 이는 각 노드에서 실행되는 모든 컨테이너의 로그를 캡처할 수 있도록 한다.
- Promtail의 설정 파일에는 로그 파일의 위치, 수집 규칙, 라벨링, Loki 서버의 URL 등이 포함된다.
- 로그 발견 및 수집
- Promtail은 설정에 명시된 경로에서 로그 파일을 자동으로 찾는다.
- Kubernetes에서는 주로 `/var/log/pods/` 아래에 위치한 컨테이너 로그 파일들을 추적한다.
- 로그 파일이 발견되면, Promtail은 이 파일들을 tailing 하여 새로운 로그 라인이 추가될 때마다 이를 읽는다.
- 메타데이터와 라벨링
- 로그 데이터와 함께, Promtail은 Kubernetes API 서버로부터 메타데이터를 추출하여 각 로그 라인에 라벨(예: 파드 이름, 네임스페이스, 노드 이름 등)을 추가한다. 이 라벨들은 Loki에서 로그를 쿼리할 때 매우 유용하다.
- 사용자는 필요에 따라 추가적인 라벨 또는 필터를 설정하여 특정 로그만을 수집하도록 구성할 수 있다.
- Loki로 로그 전송
- 수집된 로그는 구성된 Loki 서버로 전송된다. Loki는 이 로그를 인덱싱하고 저장소에 저장하여, 나중에 Grafana 등의 도구를 통해 검색 및 시각화가 가능하게 한다.
- 확장성 및 신뢰성
- Promtail은 네트워크 문제나 Loki 서버의 장애가 발생해도 로그 데이터를 잃지 않도록 로컬 버퍼링을 지원한다. Loki 서버가 다시 사용 가능해지면, 버퍼에 저장된 로그가 전송된다.
Loki vs Logstash vs Fluentd 비교표
항목 | Loki | Logstash | Fluentd |
주요 용도 | 로그 저장 및 조회 (Grafana 기반 통합 분석) | 로그 수집 + 파싱 + 전달 (ELK Stack의 핵심 구성요소) | 로그 수집 + 필터링 + 전달 (Kubernetes 친화형) |
인덱싱 방식 | 메타데이터(Label) 기반만 인덱싱 | 전체 로그 파싱 후 특정 필드 인덱싱 가능 | 전체 로그 파싱 후 유연한 출력 설정 가능 |
스토리지 구조 | 객체 스토리지 지원 (S3, GCS 등), 내부 압축 저장 | Elasticsearch 연동 (강력한 검색) | 외부 저장소 연동 (Elasticsearch, S3 등 다양함) |
쿼리 성능 | 빠름 (단, 라벨 범위 내에서만 유효) | 매우 강력 (복잡한 검색 가능) | 저장소에 따라 다름 (Fluentd 자체는 저장 X) |
구성 복잡도 | 낮음 (Promtail + Loki로 구성 가능) | 높음 (필터, Grok, output 설정 복잡) | 중간 (다양한 plugin 설정 필요) |
Grafana 통합 | 기본 통합 (1st party) | 가능 (Elasticsearch를 통해) | 가능 (Elasticsearch, Loki 연동으로) |
Kubernetes 친화도 | 매우 높음 (Promtail DaemonSet 배포) | 낮음 (Filebeat 연동 필수) | 매우 높음 (DaemonSet + K8s 메타데이터 자동 수집) |
리소스 사용량 | 적음 (경량화, 인덱스 최소화) | 상대적으로 높음 (파싱, 필터에 CPU 사용 큼) | 중간 (플러그인 수에 따라 차이) |
필터링/전처리 기능 | 제한적 (Promtail config로 일부 가능) | 강력 (Grok, mutate 등) | 강력 (Ruby 기반 plugin 다양) |
Alerting | 가능 (로그 → 메트릭 추출 → Alert 설정) | 별도 Alerting 시스템 필요 | 별도 Alerting 시스템 필요 |
오픈소스 / 상용 | 오픈소스 (Grafana Labs) | 오픈소스 (Elastic) | 오픈소스 (CNCF) |
대표 활용 사례 | Grafana 통합 모니터링, 메트릭/로그 연계 | ELK Stack, 복잡한 로그 분석 | Kubernetes 로그 수집 파이프라인 |
🔚 마무리
Loki는 단순한 로그 수집 도구가 아니다.
- 메트릭과 로그를 하나의 인터페이스(Grafana) 에서 통합 분석할 수 있게 하며,
- Promtail, Fluent Bit, Docker 등 다양한 수집기와의 호환성으로 유연한 구축이 가능하고,
- 확장성 있는 아키텍처 덕분에 대규모 클러스터 환경에서도 안정적으로 동작한다.
특히, 로그를 JSON이나 Elasticsearch처럼 무겁게 인덱싱하지 않기 때문에, 운영비용(스토리지, 인덱싱 부하 등)을 줄이는 동시에, 필요한 시점에 필요한 로그만 쿼리할 수 있다.
로그와 메트릭을 따로 떼어놓지 말고, 함께 다루는 시대이다.
Loki는 그 흐름을 가장 잘 반영한 오픈소스 로그 시스템이라 할 수 있다.
Reference
- Grafana 공식 Loki 문서: https://grafana.com/docs/loki/latest/
- Grafana OSS Loki 소개: https://grafana.com/oss/loki/
- Promtail 설치 및 라벨링 문서: https://grafana.com/docs/loki/latest/send-data/promtail/
- CNCF Loki GitHub: https://github.com/grafana/loki
'Monitoring' 카테고리의 다른 글
ELK Stack 구축해보기 (2) | 2025.01.27 |
---|---|
Loki와 Promtail 설치 (5) | 2024.10.02 |
Prometheus 와 Thanos 설치 및 구성 (0) | 2024.09.19 |
Prometheus와 Thanos란? (4) | 2024.09.12 |
Fluent Bit (With Loki) (4) | 2024.03.08 |