Monitoring

Loki란?

Somaz 2024. 9. 26. 09:10
728x90
반응형

Overview

Loki에 대해서 알아본다.

출처 : https://grafana.com/oss/loki/

 


Loki란?

Loki는 Grafana에서 개발한 Log Aggreation System으로, 주로 클라우드 네이티브 환경에서 로그를 수집, 저장, 조회하는데 사용된다.

로그 데이터를 구조화하지 않고 저장하며, 강력한 쿼리 언어를 통해 이 로그들을 효과적으로 필터링하고 조회할 수 있다. Loki는 특히 높은 확장성과 효율성을 지니고 있어, 대규모 분산 시스템 환경에서 유용하게 사용된다.

 


 

Loki 특징

  1. 다양한 클라이언트를 사용하여 모든 소스에서 모든 형식으로 로그를 전송할 수 있으므로 시작하기가 정말 쉽다.
  2. 객체 스토리지에 대한 100% 지속성으로 페타바이트 규모, 높은 처리량, 비용 효율적이고 내구성이 뛰어난 스토리지를 확보할 수 있다.
  3. 로그 라인에서 메트릭 구축 및 알림 생성할 수 있다.
  4. 수집 로그 형식 지정 요구 사항이 없으므로 더 많은 유연성과 쿼리 시 형식 지정 옵션을 사용할 수 있다.
  5. 로그를 실시간으로 추적하여 시스템에 들어오는 로그를 확인하고, 특정 시간 이후 로그를 업데이트하고, 특정 날짜의 로그를 확인하는 등의 작업을 수행한다.
  6. 프로메테우스, 그라파나, 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의 작동방식

 

  1. 설치 및 구성
    • Promtail은 Kubernetes 클러스터 내 각 노드에 대해 DaemonSet으로 배포되는 것이 일반적입니다. 이는 각 노드에서 실행되는 모든 컨테이너의 로그를 캡처할 수 있도록 한다.
    • Promtail의 설정 파일에는 로그 파일의 위치, 수집 규칙, 라벨링, Loki 서버의 URL 등이 포함된다.
  2. 로그 발견 및 수집
    • Promtail은 설정에 명시된 경로에서 로그 파일을 자동으로 찾는다.
    • Kubernetes에서는 주로 `/var/log/pods/` 아래에 위치한 컨테이너 로그 파일들을 추적한다.
    • 로그 파일이 발견되면, Promtail은 이 파일들을 tailing 하여 새로운 로그 라인이 추가될 때마다 이를 읽는다.
  3. 메타데이터와 라벨링
    • 로그 데이터와 함께, Promtail은 Kubernetes API 서버로부터 메타데이터를 추출하여 각 로그 라인에 라벨(예: 파드 이름, 네임스페이스, 노드 이름 등)을 추가한다. 이 라벨들은 Loki에서 로그를 쿼리할 때 매우 유용하다.
    • 사용자는 필요에 따라 추가적인 라벨 또는 필터를 설정하여 특정 로그만을 수집하도록 구성할 수 있다.
  4. Loki로 로그 전송
    • 수집된 로그는 구성된 Loki 서버로 전송된다. Loki는 이 로그를 인덱싱하고 저장소에 저장하여, 나중에 Grafana 등의 도구를 통해 검색 및 시각화가 가능하게 한다.
  5. 확장성 및 신뢰성
    • Promtail은 네트워크 문제나 Loki 서버의 장애가 발생해도 로그 데이터를 잃지 않도록 로컬 버퍼링을 지원한다. Loki 서버가 다시 사용 가능해지면, 버퍼에 저장된 로그가 전송된다.

 

 

 


Reference

https://grafana.com/docs/loki/latest/send-data/promtail/

https://grafana.com/oss/loki/

728x90
반응형

'Monitoring' 카테고리의 다른 글

Prometheus 와 Thanos 설치 및 구성  (0) 2024.09.19
Prometheus와 Thanos란?  (2) 2024.09.12
Fluent Bit (With Loki)  (4) 2024.03.08