隨著分布式系統復雜性的不斷增加和云原生解決方案的不斷增長,監控和可觀察性成為了解系統行為的一個非常重要的方面。這就需要可擴展的工具來收集所有服務的數據,并為開發人員提供性能、錯誤、日志和組件可用性的統一視圖。這些工具還需要具有成本效益和高性能。在本文中,我們將介紹兩種流行的日志記錄堆棧——EFK (Elasticsearch) 和 PLG (Loki),并了解它們的架構和差異。
你可能聽說過非常流行的 ELK 或 EFK 堆棧。它是一組監控工具——Elastic search(對象存儲)、Logstash 或 FluentD(日志路由和聚合)以及用于可視化的 Kibana。
典型的工作流程如下:
Elasticsearch是一個實時、分布式對象存儲、搜索和分析引擎。它擅長對日志等半結構化數據進行索引。信息被序列化為 JSON 文檔并實時索引并分布在集群中的節點上。Elasticsearch 使用倒排索引列出所有唯一單詞及其相關文檔進行全文搜索,該索引基于 Apache Lucene 搜索引擎庫。
FluentD是一個數據收集器,它將數據收集和消費統一起來,以便更好地使用。FluentD 嘗試盡可能將數據構造為 JSON,具有插件架構,并受到數百個社區提供的插件支持。
Kibana是 Elasticsearch 數據的可視化引擎,具有時間序列分析、機器學習、圖形和位置分析等功能。
通常在 Elasticsearch 集群中,數據存儲在跨節點的分片中。集群由許多節點組成,以提高可用性和彈性。任何節點都能夠執行所有角色,但在大規模部署中,節點可以被分配特定的職責。
集群中有以下類型的節點:
下圖顯示了數據如何存儲在主分片和副本分片中,并以跨節點分散負載并提高數據可用性。
每個分片中的數據都存儲在倒排索引中。下圖顯示了數據如何存儲在倒排索引中。
如果你沒有找到這個縮寫詞,請不要感到驚訝,它通常被稱為 Grafana Loki。Grafana實驗室設計了Loki,這是一個受Prometheus啟發的水平可擴展、高可用、多租戶日志聚合系統。它僅索引元數據,不索引日志內容。這種設計決策使其非常具有成本效益且易于操作。
Promtail是一個將日志從本地系統發送到 Loki 集群的代理。
Grafana是一種可視化工具,它使用來自 Loki 數據源的數據。
Loki基于Prometheus相同的設計原理構建,因此非常適合存儲和分析日志。
Loki 可以在單進程模式或多進程模式下運行,提供獨立的水平可擴展性。單進程模型有利于本地開發和小型監控設置。對于生產和可擴展的工作負載,建議使用微服務模型。Loki 中的寫入路徑和讀取路徑是解耦的,因此它具有高度可調性,并且可以根據需要獨立擴展。
下面是 Loki(微服務模型)的架構:
Promtail – 這是安裝在節點上的代理(作為 Daemonset),它從作業中提取日志并與 Kubernetes API 服務器通信以獲取元數據并使用此信息來標記日志。然后它將日志轉發到 Loki 中央服務。代理支持與 Prometheus 相同的標簽規則,以確保元數據匹配。
Distributor– Promtail將日志發送到分發器,該分發器充當緩沖區。為了處理數百萬條寫入,它將流入的日志批量處理,并在數據到達時按塊進行壓縮。存在多個攝取者(ingesters),屬于每個流的日志將在同一塊中的所有相關條目中進入相同的攝取者。這是通過使用攝取者環和一致性哈希來完成的。為了提供彈性和冗余性,它會進行n(默認為3)倍的復制。
Ingester – 當塊進入時,它們被壓縮并附加日志。一旦塊填滿,該塊就會刷新到數據庫。元數據進入索引,日志塊數據進入塊(通常是對象存儲)。日志刷完后,Ingester會創建一個新塊并向其中添加新條目。
下面是一個示例儀表板,顯示來自 Prometheus 的 ETCD 指標數據和 Loki 的 ETCD Pod 日志數據。
Elasticsearch 使用 Query DSL 和 Lucene 查詢語言提供全文搜索功能。它是一個成熟強大的搜索引擎,擁有廣泛的運營商支持。它可以搜索內容并使用相關性分數對其進行排序。另一方面,Loki 使用的是 LogQL,它使用日志標簽來過濾和選擇日志數據。Loki 可以使用一些運算符和算術,但它不像 Elastic Search 那樣成熟。
兩者都是水平可擴展的,但 Loki 由于其解耦的讀寫路徑以及使用基于微服務的架構而具有更多優勢。它可以根據具體需求進行定制,并可用于處理大量日志數據。
在共享集群中擁有多個租戶是降低運營成本的常見主題。這兩種技術都提供了托管多個租戶的方法。使用elasticsearch,有多種方法可以將租戶分開——每個租戶一個索引、基于租戶的路由、使用唯一的租戶字段以及使用搜索過濾器。
在 Loki 中,通過在 HTTP 標頭請求中使用 X-Scope-OrgId支持多租戶 。
Loki 是一種極具成本效益的解決方案,因為它的設計決策是避免對實際日志數據建立索引。僅對元數據建立索引,因此可以節省存儲 和內存(緩存)。與 Elasticsearch 集群所需的塊存儲相比,對象存儲更便宜。
由于元數據發現機制,Loki 技術棧在 Kubernetes 生態系統中非常有用。可以輕松地將 grafana 中基于時間序列的數據與日志關聯起來,以實現可觀察性。
當涉及成本和長時間存儲日志時,Loki 是云原生解決方案日志記錄的絕佳選擇。
因此,不妨考慮一下 PLG 。
本文鏈接:http://www.tebozhan.com/showinfo-26-12728-0.html從 ELK/EFK 到 PLG,是時候換個日志框架了
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com