distributor
서비스는 클라이언트로부터 들어오는 로그 스트림을 처리하는 역할을 담당합니다. 이는 로그 데이터의 write path
에서 첫 번째 단계입니다. distributor
가 스트림 세트를 받으면 각 스트림을 정확성과 설정된 테넌트(또는 글로벌) 제한 내에 있는지 확인하여 유효성을 검사합니다. 유효한 청크는 배치로 분할되어 여러 ingester
에 병렬로 전송됩니다.distributor
앞에 로드 밸런서를 배치하는 것이 중요합니다.distributor
는 상태를 유지하지 않는(stateless) 컴포넌트입니다. 이로 인해 가장 중요한 쓰기 경로의 구성 요소인 ingester
에서 가능한 많은 작업을 확장하고 오프로드(offload)하는 것이 쉽습니다. 이렇게 유효성 검사 작업을 독립적으로 확장할 수 있음으로써 Loki
는 ingester
를 과부하로부터 보호할 수 있습니다(악의적이든 아니든). distributor
는 문 앞의 보안요원처럼 모두가 적절히 차려입고 초대장을 갖고 있는지 확인합니다. 이것은 또한 복제 요인에 따라 쓰기를 확산(fan-out)하는 것도 가능하게 합니다.distributor
가 수신하는 데이터를 변형하는 유일한 방법은 라벨을 정규화하는 것입니다.Loki
는 라벨을 결정적으로 캐시하고 해싱할 수 있게 됩니다.distributor
는 테넌트당 최대 비트레이트에 따라 들어오는 로그를 속도 제한할 수 있습니다. 이는 테넌트당 한계를 확인하고 현재 디스트리뷰터 수로 나누어 계산합니다. 이를 통해 클러스터 레벨에서 테넌트별 속도 제한을 지정할 수 있으며, 디스트리뷰터 수를 확장 또는 축소함에 따라 테넌트당 제한도 조정할 수 있게 됩니다.<aside>
💡 distributor
는 내부적으로 링(ring) 구성 요소를 사용하여 자신을 피어로 등록하고 활성 디스트리뷰터의 총 수를 얻습니다. 이는 ingester
가 링에서 사용하는 "키"와는 다르며, distributor
자체의 링 구성에서 가져옵니다.
</aside>
distributor
가 모든 유효성 검사 작업을 완료하면 데이터를 쓰기를 책임지는 ingester
컴포넌트로 전달합니다.distributor
는 replication_factor
만큼의 데이터를 ingester
에게 전달합니다. (기본값: 3입니다)