728x90
반응형
Overview
Loki에 대해서 알아본다.
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 서버가 다시 사용 가능해지면, 버퍼에 저장된 로그가 전송된다.
Reference
728x90
반응형
'Monitoring' 카테고리의 다른 글
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 |