Loki 개요
이 문서는 Grafana Loki 공식 문서의 Loki overview 페이지 (opens in a new tab)를 번역한 것입니다.
Loki는 프로메테우스(Prometheus) (opens in a new tab)에서 영감을 받은 수평적으로 확장 가능하고, 고가용성을 지원하는 멀티 테넌트 로그 집계 시스템입니다. Loki는 메트릭 대신 로그에 중점을 두고, 풀(pull) 방식 대신 푸시(push) 방식을 통해 로그를 수집한다는 점에서 프로메테우스와 다릅니다.
Loki는 매우 비용 효율적이고 확장성이 뛰어나도록 설계되었습니다. 다른 로깅 시스템과 달리, Loki는 로그의 내용을 인덱싱하지 않고, 각 로그 스트림에 대한 레이블 세트로 메타데이터만 인덱싱합니다.
로그 스트림은 동일한 레이블을 공유하는 로그의 집합입니다. 레이블은 Loki가 데이터 저장소 내에서 로그 스트림을 찾는 데 도움이 되므로, 양질의 레이블 세트를 갖는 것이 효율적인 쿼리 실행의 핵심입니다.
로그 데이터는 압축되어 Amazon Simple Storage Service (S3)나 Google Cloud Storage (GCS)와 같은 객체 저장소에 청크(chunks) 단위로 저장되거나, 개발 또는 개념 증명(PoC) 단계에서는 파일 시스템에 저장될 수도 있습니다. 작은 인덱스와 고도로 압축된 청크는 Loki의 운영을 단순화하고 비용을 크게 절감합니다.

일반적인 Loki 기반 로깅 스택은 3가지 구성 요소로 이루어집니다:
-
에이전트(Agent) - Loki와 함께 배포되는 Grafana Alloy나 Promtail과 같은 에이전트 또는 클라이언트입니다. 에이전트는 로그를 스크레이핑하고, 레이블을 추가하여 로그를 스트림으로 변환한 후, HTTP API를 통해 Loki로 푸시합니다.
-
Loki - 로그 수집 및 저장을 담당하고 쿼리를 처리하는 메인 서버입니다. 세 가지 다른 구성으로 배포될 수 있으며, 자세한 내용은 배포 모드를 참조하세요.
-
Grafana - 로그 데이터를 쿼리하고 표시하기 위한 도구입니다. LogCLI를 사용하거나 Loki API를 직접 사용하여 커맨드 라인에서 로그를 쿼리할 수도 있습니다.
Loki의 특징
-
확장성(Scalability) - Loki는 확장성을 위해 설계되었으며, 라즈베리 파이에서 실행하는 작은 규모부터 하루에 페타바이트(petabytes)를 수집하는 규모까지 확장할 수 있습니다. 가장 일반적인 배포 방식인 "단순 확장 모드(simple scalable mode)"에서 Loki는 요청을 별도의 읽기 및 쓰기 경로로 분리하여 독립적으로 확장할 수 있도록 합니다. 이는 언제든지 워크로드에 맞춰 신속하게 적응할 수 있는 유연한 대규모 설치로 이어집니다. 필요한 경우, 각 Loki 구성 요소를 쿠버네티스 내에서 네이티브하게 실행되도록 설계된 마이크로서비스로 실행할 수도 있습니다.
-
멀티테넌시(Multi-tenancy) - Loki는 여러 테넌트가 단일 Loki 인스턴스를 공유할 수 있도록 합니다. 멀티테넌시를 사용하면 각 테넌트의 데이터와 요청이 다른 테넌트와 완벽하게 격리됩니다. 멀티테넌시는 에이전트에서 테넌트 ID를 할당하여 구성됩니다.
-
서드파티 통합(Third-party integrations) - 여러 서드파티 에이전트(클라이언트)가 플러그인을 통해 Loki를 지원합니다. 이를 통해 기존 관측 가능성 설정을 유지하면서 Loki로 로그를 전송할 수 있습니다.
-
효율적인 스토리지(Efficient storage) - Loki는 로그 데이터를 고도로 압축된 청크로 저장합니다. 마찬가지로, 레이블 세트만 인덱싱하기 때문에 Loki 인덱스는 다른 로그 집계 도구보다 훨씬 작습니다. 유일한 데이터 저장 메커니즘으로 객체 저장소를 활용함으로써 Loki는 기본 객체 저장소의 신뢰성과 안정성을 상속받습니다. 또한 로컬 연결 SSD(Solid State Drives) 및 HDD(Hard Disk Drives)와 같은 다른 저장 메커니즘에 비해 객체 저장소의 비용 효율성과 운영 단순성을 활용합니다. 압축된 청크, 더 작은 인덱스, 저비용 객체 저장소 사용은 Loki 운영 비용을 절감시킵니다.
-
LogQL, Loki 쿼리 언어 - LogQL은 Loki의 쿼리 언어입니다. 프로메테우스 쿼리 언어인 PromQL (opens in a new tab)에 이미 익숙한 사용자는 LogQL이 로그에 대한 쿼리를 생성하는 데 친숙하고 유연하다는 것을 알게 될 것입니다. 이 언어는 또한 로그 데이터로부터 메트릭을 생성하는 것을 용이하게 하며, 이는 단순한 로그 집계를 훨씬 뛰어넘는 강력한 기능입니다.
-
알림(Alerting) - Loki에는 룰러(ruler)라는 구성 요소가 포함되어 있어 로그에 대한 쿼리를 지속적으로 평가하고 결과에 따라 조치를 수행할 수 있습니다. 이를 통해 로그에서 이상 징후나 이벤트를 모니터링할 수 있습니다. Loki는 프로메테우스 Alertmanager (opens in a new tab) 또는 Grafana 내의 알림 관리자(alert manager)와 통합됩니다.
-
Grafana 통합(Grafana integration) - Loki는 Grafana, Mimir, Tempo와 통합되어 완전한 관측 가능성 스택을 제공하며 로그, 메트릭, 트레이스 간의 원활한 상호 연관을 지원합니다.
탐색하기
Loki에 대해 배우기 Loki 아키텍처 및 구성 요소, 다양한 배포 모드, 레이블에 대한 모범 사례에 대해 알아보세요.
Loki 설정하기 Loki를 구성하고 설치하는 방법, 이전 배포에서 마이그레이션하는 방법, Loki 환경을 업그레이드하는 방법에 대한 지침을 확인하세요.
Loki 구성하기 Loki 구성 참조 및 구성 예제를 확인하세요.
Loki로 로그 보내기 Loki로 로그를 보낼 하나 이상의 클라이언트를 선택하세요.
Loki 관리하기 테넌트, 로그 수집, 스토리지, 쿼리 등을 관리하는 방법을 알아보세요.
LogQL로 쿼리하기 PromQL에서 영감을 받은 LogQL은 Grafana Loki의 쿼리 언어입니다. LogQL은 필터링을 위해 레이블과 연산자를 사용합니다.
PromQL vs LogQL
- PromQL (Prometheus Query Language): 시계열 데이터(메트릭)를 쿼리하기 위해 설계되었습니다. 집계, 계산, 예측 등 복잡한 수학적 연산에 강점을 가집니다. 예:
sum(rate(http_requests_total{status="500"}[5m]))
- LogQL (Log Query Language): 로그 데이터를 쿼리하기 위해 설계되었습니다. 메트릭 쿼리와 로그 스트림 필터링의 두 부분으로 구성됩니다. 로그 내용을 필터링(
|= "error"
,|~ "status=\d{3}"
)하거나 로그에서 메트릭을 추출하는 데 중점을 둡니다. 예:sum(rate({app="api"} |= "error" [5m])) by (job)