新聞中心
隨著分布式系統(tǒng)復(fù)雜性的不斷增加和云原生解決方案的不斷增長,監(jiān)控和可觀察性成為了解系統(tǒng)行為的一個非常重要的方面。這就需要可擴展的工具來收集所有服務(wù)的數(shù)據(jù),并為開發(fā)人員提供性能、錯誤、日志和組件可用性的統(tǒng)一視圖。這些工具還需要具有成本效益和高性能。在本文中,我們將介紹兩種流行的日志記錄堆?!狤FK (Elasticsearch) 和 PLG (Loki),并了解它們的架構(gòu)和差異。

什么是 EFK 堆棧?
你可能聽說過非常流行的 ELK 或 EFK 堆棧。它是一組監(jiān)控工具——Elastic search(對象存儲)、Logstash 或 FluentD(日志路由和聚合)以及用于可視化的 Kibana。
典型的工作流程如下:
Elasticsearch是一個實時、分布式對象存儲、搜索和分析引擎。它擅長對日志等半結(jié)構(gòu)化數(shù)據(jù)進行索引。信息被序列化為 JSON 文檔并實時索引并分布在集群中的節(jié)點上。Elasticsearch 使用倒排索引列出所有唯一單詞及其相關(guān)文檔進行全文搜索,該索引基于 Apache Lucene 搜索引擎庫。
FluentD是一個數(shù)據(jù)收集器,它將數(shù)據(jù)收集和消費統(tǒng)一起來,以便更好地使用。FluentD 嘗試盡可能將數(shù)據(jù)構(gòu)造為 JSON,具有插件架構(gòu),并受到數(shù)百個社區(qū)提供的插件支持。
Kibana是 Elasticsearch 數(shù)據(jù)的可視化引擎,具有時間序列分析、機器學(xué)習(xí)、圖形和位置分析等功能。
Elasticsearch架構(gòu)
通常在 Elasticsearch 集群中,數(shù)據(jù)存儲在跨節(jié)點的分片中。集群由許多節(jié)點組成,以提高可用性和彈性。任何節(jié)點都能夠執(zhí)行所有角色,但在大規(guī)模部署中,節(jié)點可以被分配特定的職責。
集群中有以下類型的節(jié)點:
- 主節(jié)點 – 控制集群,至少需要 3 個,其中一個始終處于活動狀態(tài)
- 數(shù)據(jù)節(jié)點 – 保存索引數(shù)據(jù)并執(zhí)行與數(shù)據(jù)相關(guān)的任務(wù)
- 攝取節(jié)點 – 用于攝取管道,在索引之前轉(zhuǎn)換和豐富數(shù)據(jù)
- 協(xié)調(diào)節(jié)點 – 路由請求、處理搜索縮減階段、協(xié)調(diào)批量索引
- 警報節(jié)點 – 運行警報作業(yè)
- 機器學(xué)習(xí)節(jié)點 – 運行機器學(xué)習(xí)作業(yè)
下圖顯示了數(shù)據(jù)如何存儲在主分片和副本分片中,并以跨節(jié)點分散負載并提高數(shù)據(jù)可用性。
每個分片中的數(shù)據(jù)都存儲在倒排索引中。下圖顯示了數(shù)據(jù)如何存儲在倒排索引中。
什么是 PLG(Promtail、Loki 和 Grafana)?
如果你沒有找到這個縮寫詞,請不要感到驚訝,它通常被稱為 Grafana Loki。Grafana實驗室設(shè)計了Loki,這是一個受Prometheus啟發(fā)的水平可擴展、高可用、多租戶日志聚合系統(tǒng)。它僅索引元數(shù)據(jù),不索引日志內(nèi)容。這種設(shè)計決策使其非常具有成本效益且易于操作。
Promtail是一個將日志從本地系統(tǒng)發(fā)送到 Loki 集群的代理。
Grafana是一種可視化工具,它使用來自 Loki 數(shù)據(jù)源的數(shù)據(jù)。
Loki基于Prometheus相同的設(shè)計原理構(gòu)建,因此非常適合存儲和分析日志。
Loki 架構(gòu)
Loki 可以在單進程模式或多進程模式下運行,提供獨立的水平可擴展性。單進程模型有利于本地開發(fā)和小型監(jiān)控設(shè)置。對于生產(chǎn)和可擴展的工作負載,建議使用微服務(wù)模型。Loki 中的寫入路徑和讀取路徑是解耦的,因此它具有高度可調(diào)性,并且可以根據(jù)需要獨立擴展。
下面是 Loki(微服務(wù)模型)的架構(gòu):
組件:
Promtail – 這是安裝在節(jié)點上的代理(作為 Daemonset),它從作業(yè)中提取日志并與 Kubernetes API 服務(wù)器通信以獲取元數(shù)據(jù)并使用此信息來標記日志。然后它將日志轉(zhuǎn)發(fā)到 Loki 中央服務(wù)。代理支持與 Prometheus 相同的標簽規(guī)則,以確保元數(shù)據(jù)匹配。
Distributor– Promtail將日志發(fā)送到分發(fā)器,該分發(fā)器充當緩沖區(qū)。為了處理數(shù)百萬條寫入,它將流入的日志批量處理,并在數(shù)據(jù)到達時按塊進行壓縮。存在多個攝取者(ingesters),屬于每個流的日志將在同一塊中的所有相關(guān)條目中進入相同的攝取者。這是通過使用攝取者環(huán)和一致性哈希來完成的。為了提供彈性和冗余性,它會進行n(默認為3)倍的復(fù)制。
Ingester – 當塊進入時,它們被壓縮并附加日志。一旦塊填滿,該塊就會刷新到數(shù)據(jù)庫。元數(shù)據(jù)進入索引,日志塊數(shù)據(jù)進入塊(通常是對象存儲)。日志刷完后,Ingester會創(chuàng)建一個新塊并向其中添加新條目。
下面是一個示例儀表板,顯示來自 Prometheus 的 ETCD 指標數(shù)據(jù)和 Loki 的 ETCD Pod 日志數(shù)據(jù)。
EFK (Elasticsearch) 與 PLG (Loki) 技術(shù)棧的比較:
查詢語言
Elasticsearch 使用 Query DSL 和 Lucene 查詢語言提供全文搜索功能。它是一個成熟強大的搜索引擎,擁有廣泛的運營商支持。它可以搜索內(nèi)容并使用相關(guān)性分數(shù)對其進行排序。另一方面,Loki 使用的是 LogQL,它使用日志標簽來過濾和選擇日志數(shù)據(jù)。Loki 可以使用一些運算符和算術(shù),但它不像 Elastic Search 那樣成熟。
可擴展性
兩者都是水平可擴展的,但 Loki 由于其解耦的讀寫路徑以及使用基于微服務(wù)的架構(gòu)而具有更多優(yōu)勢。它可以根據(jù)具體需求進行定制,并可用于處理大量日志數(shù)據(jù)。
多租戶
在共享集群中擁有多個租戶是降低運營成本的常見主題。這兩種技術(shù)都提供了托管多個租戶的方法。使用elasticsearch,有多種方法可以將租戶分開——每個租戶一個索引、基于租戶的路由、使用唯一的租戶字段以及使用搜索過濾器。
在 Loki 中,通過在 HTTP 標頭請求中使用 X-Scope-OrgId支持多租戶 。
成本
Loki 是一種極具成本效益的解決方案,因為它的設(shè)計決策是避免對實際日志數(shù)據(jù)建立索引。僅對元數(shù)據(jù)建立索引,因此可以節(jié)省存儲 和內(nèi)存(緩存)。與 Elasticsearch 集群所需的塊存儲相比,對象存儲更便宜。
結(jié)論
由于元數(shù)據(jù)發(fā)現(xiàn)機制,Loki 技術(shù)棧在 Kubernetes 生態(tài)系統(tǒng)中非常有用??梢暂p松地將 grafana 中基于時間序列的數(shù)據(jù)與日志關(guān)聯(lián)起來,以實現(xiàn)可觀察性。
當涉及成本和長時間存儲日志時,Loki 是云原生解決方案日志記錄的絕佳選擇。
因此,不妨考慮一下 PLG 。
分享標題:從ELK/EFK到PLG,是時候換個日志框架了
URL分享:http://fisionsoft.com.cn/article/djccggp.html


咨詢
建站咨詢
