Monitoring

[Grafana] Grafana & Loki는 무엇인가요?

worldcenter 2024. 12. 30. 15:36

 

Grafana & Loki는 무엇인가?

Grafana Loki는 오픈 소스 로그 수집 시스템으로 로그를 수집, 저장 및 조회하는 기능을 제공합니다. Grafana Loki는 로그를 압축하여 청크(chunks) 단위로 저장하며, 파일 시스템이나 AWS S3와 같은 백엔드 스토리지에 저장합니다.

 

청크는 로그 볼륨에 따라 로그 항목이 포함된 압축 파일입니다. 청크 크기가 제한에 도달하면 새로운 청크에 로그를 저장합니다. 청크가 저장될 때마다 각 청크에 대한 인덱스를 생성합니다. 이 인덱스는 로그의 내용이 아니라 청크의 타임스탬프, 레이블, 청크의 위치만 포함합니다.

 

로그의 기본 보존 기간은 24시간이며, 최소 1시간에서 최대 30일까지 확장할 수 있습니다. Loki는 수평 확장이 가능하며 자체 쿼리 언어인 LogQL을 제공합니다.

 

 

Grafana & Loki Architecture

다음 다이어그램은 Grafana Loki 아키텍처와 로그 수집 워크플로우를 보여줍니다.

 

1. Promtail(에이전트)은 file, container, pod, application, system journals 등 다양한 소스에서 로그를 수집합니다. 사용 가능한 모든 로그를 수집한 후, 로그를 필터링하고 압축하여 저장 공간을 절약합니다.

 

2. 로그가 압축된 후, Promtail은 로그에 라벨을 부여하고 이를 Loki로 전송합니다.

 

3. Loki는 Promtail로부터 로그를 수신한 후, 모든 로그를 청크(chunk)로 저장합니다. 청크는 여러 로그 메시지를 단일 파일로 모아 저장 공간을 절약하고 효율적인 검색을 가능하게 합니다.

 

4. Loki는 청크에 라벨과 타임스탬프를 부여합니다. 청크가 저장될 때마다 각 청크에 대한 인덱스를 생성하며, 이 인덱스에는 청크의 타임스탬프, 라벨, 위치 정보가 포함됩니다.

 

5. Loki는 LogQL 쿼리 언어를 사용하여 로그를 조회합니다. LogQL을 통해 사용자는 선택한 라벨과 값에 따라 로그를 필터링, 집계 및 분석할 수 있습니다.

 

6. Grafana는 대시보드를 통해 로그를 확인할 수도 있고 LogCLI를 통해서도 로그를 쿼리하고 조회할 수 있습니다.

 

 

Grafana & Loki  구성요소

Grafana Loki는 promtail, distributor, ingester, querier, ruler, query frontend, Grafana로 이루어져 있습니다.

 

Promtail

Loki의 중요한 구성 요소로, 로그 수집 에이전트 역할을 합니다. 시스템에서 모든 로그를 수집하고, 라벨을 부여한 후 이를 Loki로 전송합니다. Loki는 로컬 로그 파일과 System Journal에서 로그를 수집합니다.

로그를 수집하려는 모든 시스템에 Promtail을 설치해야 하며, Kubernetes에서 Loki를 사용하는 경우에는 각 노드에 Promtail을 데몬셋으로 배포해야 합니다.

 

Distributor

stateless 컴포넌트로, Promtail과 같은 로그 에이전트로부터 수신한 로그를 처리하고 검증한 후, 이를 Ingester로 분배하는 역할을 합니다. Distributor가 로그를 수신하면, 먼저 로그가 구성에 맞는지 검증합니다. 예를 들어, 유효한 라벨이 있는지, 타임스탬프가 너무 오래되지 않았는지, 로그 길이가 적당한지 등을 확인합니다.

검증이 완료되면, Distributor는 일관된 해싱(consistent hashing) 방식에 따라 로그를 모든 Ingester에 고르게 분배하여, 모든 사용 가능한 Ingester에 균등하게 분배하도록 합니다.

 

Ingester

Distributor로부터 수신한 로그를 파일 시스템에 저장하고 인덱싱하는 역할을 하며, 주기적으로 S3와 같은 Persistent Storage로 로그를 전송합니다.

Ingester는 구성에 따라 보존 정책(retention policy)을 설정합니다. 이 정책은 자동으로 로그를 삭제하는 기간을 정의합니다. Ingester는 로그를 일정한 구조적 형식으로 저장하기 위해 time-series database를 사용하며, 이를 통해 효율적인 쿼리와 로그의 폐기를 쉽게 처리할 수 있습니다.

 

Ruler

Loki의 모니터링 및 알림 컴포넌트로, 로그 데이터를 기반으로 메트릭을 기록하고 알림을 트리거하는 역할을 합니다. Ruler는 직접적으로 메트릭을 수집하지 않고, 로그 데이터를 메트릭으로 변환하여 처리합니다.

Ruler는 로그를 모니터링하며, 문제가 감지되면 알림을 보내는 기능을 수행합니다. 이 알림은 이메일이나 Slack을 통해 전송됩니다.

 

Querier

LogQL 쿼리 언어를 사용하여 저장소와 Ingester에서 로그를 조회하는 역할을 합니다. Querier는 사용자가 요청한대로 타임스탬프, 라벨 등을 기준으로 로그를 필터링하고 집계합니다.

Querier는 이전 쿼리를 캐시하여 동일한 로그를 반복해서 쿼리하는 것을 방지합니다. 즉, 동일한 타임스탬프, 라벨, 로그 메시지에 대해 쿼리는 한 번만 수행됩니다.

 

Query Frontend

stateless 컴포넌트로, 사용자와 상호작용하며 쿼리 요청을 처리하고 쿼리를 실행하여 Grafana 대시보드를 통해 로그를 시각화 하는 역할을 합니다. Query Frontend는 큰 쿼리를 여러 개의 작은 쿼리로 나누어 동시에 실행합니다. 이를 통해 대용량 쿼리가 단일 쿼리에서 메모리 문제를 일으키는 것을 방지하고, 실행 속도를 빠르게 개선할 수 있습니다.

 

Grafana

로그를 쿼리하고 시각화하며 모니터링하는 데 도움을 주는 오픈 소스 도구입니다. Grafana와 Loki를 통합하여 로그 데이터를 대시보드, 그래프 또는 Grafana에서 제공하는 다른 시각화 형식으로 시각화 할 수 있습니다.

Grafana는 쿼리 언어 LogQL을 사용하여 Loki와 통합되며, Grafana에서 LogQL 쿼리를 작성하여 로그를 필터링하고 쿼리할 수 있습니다.

 

Log Storage

Loki는 로그 데이터를 효율적으로 쿼리하고 수신할 수 있도록 저장합니다. 로그 데이터를 청크(chunk) 단위로 압축하고, 시간을 기준으로 정리하며, 각 청크에 라벨과 타임스탬프를 부여합니다.

그 후, 각 청크에 대해 키-값 쌍 형식으로 인덱스를 생성하여 해당 청크의 로그 항목과 타임스탬프, 라벨을 포함합니다. 예를 들어, 청크의 인덱스를 책의 목차처럼 생각할 수 있습니다. 청크와 인덱스는 다양한 백엔드 객체 스토리지나 파일 시스템에 저장될 수 있습니다.

청크가 저장되면, 데이터에 대한 보존 기간(retention period)을 설정하고, 이 기간에 따라 자동으로 삭제됩니다.

파일 시스템을 저장소로 사용하는 경우, 청크와 인덱스의 기본 저장 경로는 /var/lib/loki/chunks와 /var/lib/loki/index 입니다.

 

 

참조

https://devopscube.com/grafana-loki-architecture/

 

Grafana Loki Architecture: A Comprehensive Guide

In this guide, we are going to learn about Grafana Loki Architecture and its components in detail. In

devopscube.com