개요
Loki
는 여러 구성 요소 마이크로서비스로 구축되었으며 수평으로 확장 가능한 분산 시스템으로 실행되도록 설계되었습니다. Loki
의 독특한 디자인은 전체 분산 시스템의 코드를 단일 바이너리 파일 또는 Docker 이미지로 컴파일합니다. 단일 바이너리 파일의 동작은 -target
커맨드 라인 플래그로 제어되며 세 가지 운영 모드 중 하나를 정의합니다.
Monolithic mode
- 가장 간단한 모드인
Monolithic mode
는 -target=all
플래그로 동작합니다. 이는 가장 기본적인 모드로 별도로 설정할 필요가 없습니다. Loki
의 마이크로서비스 모든 구성들을 하나의 프로세스 내에서 단일 바이너리 파일 또는 도커 이미지로 실행합니다.
Monolithic mode
는 Loki
를 빠르게 시작하여 실험해볼 때 유용하며, 하루에 약 100GB까지의 작은 읽기/쓰기 볼륨에 적합합니다. Monolithic mode
배포를 더 많은 인스턴스로 수평 확장하기 위해 공유 객체 저장소를 사용하고, 모든 인스턴스 간에 상태를 공유하도록 ring 섹션을 구성할 수 있습니다.
- 두 개의 Loki 인스턴스를 실행하고
memberlist_config
구성과 공유 객체 저장소를 사용하여 고가용성을 구성할 수 있습니다. 모든 Loki 인스턴스로 트래픽을 라운드 로빈 방식으로 라우팅합니다. 쿼리 병렬화는 인스턴스의 수와 정의된 쿼리 병렬성에 따라 제한됩니다.
Simple scalable deployment mode
- 만약 로그 볼륨이 하루에 몇 백 기가바이트를 초과하거나 읽기와 쓰기 관련 문제를 분리하려면,
Loki
는 simple scalable deployment mode
를 제공합니다. 이 배포 모드는 하루에 수 테라바이트 이상의 로그까지 확장 가능합니다. 매우 큰 Loki
설치의 경우 마이크로서비스 모드 접근 방식을 고려해야 합니다.
- 이 모드에서 Loki의 마이크로서비스 구성 요소는 두 가지 대상(
-target
)으로 묶입니다. -target=read
및 -target=write
. BoltDB 컴팩터 서비스는 읽기 대상의 일부로 실행됩니다.
- 읽기와 쓰기 경로를 분리하는 것에는 다음과 같은 이점이 있습니다:
- 전용 노드를 제공하여 쓰기 경로의 더 높은 가용성
- 요구에 따라 쿼리 성능을 추가/제거할 수 있는 독립적으로 확장 가능한 읽기 경로
- 간단한 확장 가능한 배포 모드는
Loki
앞단에 로드 밸런서가 필요합니다. 이 로드 밸런서는 /loki/api/v1/push
트래픽을 쓰기 노드로 보내며, 다른 모든 요청은 읽기 노드로 전송됩니다. 트래픽은 라운드 로빈 방식으로 전송되어야 합니다.
- Loki의 간단한 확장 가능한 배포 모드는 하루에 수 테라바이트 이상의 로그까지 확장 가능합니다.
Microservices mode
Microservices mode
에서는 Loki의 구성 요소를 개별 프로세스로 인스턴스화합니다. 각 프로세스는 대상(target)을 지정하여 호출됩니다. 각 대상은 다음과 같습니다.
- 인제스터(ingester)
- 디스트리뷰터(distributor)
- 쿼리 프론트엔드(query-frontend)
- 쿼리 스케줄러(query-scheduler)
- 쿼리어(querier)
- 인덱스 게이트웨이(index-gateway)
- 룰러(ruler)
- 컴팩터(compactor)
- 개별 마이크로서비스로 구성 요소를 실행하면 마이크로서비스의 수를 늘림으로써 확장할 수 있습니다. 사용자가 정의한 클러스터를 통해 개별 구성 요소를 더 잘 관찰할 수 있습니다.
Microservices mode
는 가장 효율적인 Loki 설치 방법입니다. 그러나 설정 및 유지 관리가 가장 복잡합니다.
Microservices mode
는 매우 큰 Loki 클러스터나 확장 및 클러스터 운영에 대해 더 많은 제어가 필요한 클러스터에 권장됩니다.