目錄
一、簡介
二、架構圖
三、組件介紹
Distributor(分發器)
Ingester(存儲器)
Querier(查詢器)
Query Frontend(查詢前端)
Index Gateway(索引網關)
Compactor(壓縮器)
Table Manager(表管理器)
Ruler(規則引擎)
四、各組件協作流程
五、優勢
一、簡介
? ?Loki 是一個用于日志聚合和查詢的系統,廣泛用于 Kubernetes 和微服務架構中。Loki 的微服務模式將其核心功能拆分為多個獨立的組件,每個組件專注于特定的任務。以下是 Loki 微服務模式下主要組件的功能和作用介紹:
二、架構圖
三、組件介紹
Distributor(分發器)
功能:
-
接收日志數據(通常通過
push
協議或Promtail
)。 -
將日志數據分發到 Ingester 組件進行存儲和處理。
-
通過 hash-ring 算法,根據日志流的標簽(labels)計算分區,并將數據路由到正確的 Ingester。
作用:
-
作為日志數據的入口,負責任務分配和路由。
-
提供高可用性和水平擴展能力,允許多個 Distributor 節點同時運行。
Ingester(存儲器)
功能:
-
接收 Distributor 分發的日志數據。
-
將日志數據暫時存儲在內存中,并以分片的形式寫入持久化存儲(如對象存儲)。
-
處理讀取請求并提供實時日志查詢能力。
作用:
-
實現日志的實時存儲和處理。
-
確保高吞吐量和低延遲的寫入性能。
-
負責將日志數據以批次的形式寫入持久存儲。
Querier(查詢器)
功能:
-
處理來自用戶的查詢請求(通過 Loki API 或 Grafana)。
-
從 Ingester 和持久化存儲中讀取日志數據。
-
對日志數據進行過濾、聚合和返回。
作用:
-
提供強大的查詢功能(使用 LogQL)。
-
同時支持實時日志查詢(從 Ingester 獲取)和歷史日志查詢(從對象存儲獲取)。
Query Frontend(查詢前端)
功能:
-
接收用戶的查詢請求,并將其分解為多個小查詢任務。
-
對查詢任務進行緩存以提高性能。
-
將查詢任務分發到 Querier。
作用:
-
優化查詢性能,尤其是復雜和大范圍查詢。
-
提供請求分片、聚合以及緩存能力,減少 Querier 的工作負載。
Index Gateway(索引網關)
功能:
-
管理和寫入日志的索引數據到后端存儲(如對象存儲、Cassandra)。
-
提供索引的讀取能力,幫助快速定位日志。
作用:
-
實現高效的日志索引存儲和管理。
-
減少日志查詢的延遲,通過索引快速找到日志所在的存儲位置。
Compactor(壓縮器)
功能:
-
定期從對象存儲中讀取分片的日志數據。
-
對分片日志數據進行合并、去重和優化。
-
寫入優化后的數據回對象存儲。
作用:
-
優化日志數據的存儲格式,降低存儲成本。
-
提升查詢效率,通過壓縮和去重減少查詢的數據量。
Table Manager(表管理器)
功能:
-
為存儲后端(如 DynamoDB、Bigtable)管理表的生命周期。
-
創建、刪除和更新索引表。
作用:
-
提供后端存儲的表管理能力。
-
確保索引表結構與 Loki 的存儲需求匹配。
Ruler(規則引擎)
功能:
-
基于日志數據定義和執行規則。
-
觸發警報規則或生成預聚合的日志查詢結果。
作用:
-
提供告警功能:允許基于日志數據的實時或周期性告警。
-
支持基于 LogQL 的規則評估。
四、各組件協作流程
-
日志接入:
-
Distributor 接收日志數據,并通過標簽分片分發給對應的 Ingester。
-
-
數據存儲:
-
Ingester 將日志數據暫存內存,并定期將其寫入對象存儲。
-
Index Gateway 管理日志索引,方便快速查詢。
-
-
數據查詢:
-
用戶通過 Loki 或 Grafana 發起查詢請求。
-
Query Frontend 接收請求并優化分片后發送給 Querier。
-
Querier 從 Ingester(實時數據)或對象存儲(歷史數據)中讀取日志并返回結果。
-
-
優化與維護:
-
Compactor 對存儲中的日志數據進行合并和優化。
-
Ruler 定期評估規則并觸發告警。
-
五、優勢
-
模塊化:每個組件獨立運行,可單獨擴展。
-
高可用:各組件支持水平擴展,提供更高的吞吐量和容錯能力。
-
靈活性:可以根據需求調整組件的資源和部署策略。