登入 Kubernetes:EFK 與 PLG

登入 Kubernetes:EFK 與 PLG

隨著分散式系統複雜性的增加,監控已成為不斷增長的雲端解決方案的一個非常重要的組成部分。 有必要了解他們的行為。 我們需要可擴展的工具來收集所有服務的數據,並為專家提供具有效能分析、錯誤演示、可用性和日誌功能的單一介面。

這些相同的工具必須高效且富有成效。 在本文中,我們將介紹兩種流行的技術堆疊:EFK (Elasticsearch) 和 PLG (Loki),並研究它們的架構和差異。

EFK堆疊

您可能已經聽說過非常流行的 ELK 或 EFK。 該堆疊由幾個不同的部分組成:Elasticsearch(物件儲存)、Logstash 或 FluentD(日誌收集和聚合)以及用於視覺化的 Kibana。

典型的工作流程如下圖所示:

登入 Kubernetes:EFK 與 PLG

Elasticsearch — 具有搜尋和即時分析功能的分散式物件儲存。 針對日誌等半結構化資料的優秀解決方案。 資訊保存為 JSON 文檔,即時索引並分佈在叢集節點上。 使用倒排索引,包含用於全文搜尋的所有唯一單字和關聯文檔,而該索引又基於 Apache Lucene 搜尋引擎。

流利D 是一個資料收集器,在收集和使用資料時統一資料。 它嘗試盡可能地以 JSON 形式組織資料。 它的架構是可擴展的,有更多 數百種不同的擴展,社區支持,適合所有場合。

Kibana - Elasticsearch 的資料視覺化工具,具有各種附加功能,例如時間序列分析、圖形分析、機器學習等。

Elasticsearch架構

Elasticsearch 叢集資料分佈在其所有節點上儲存。 叢集由多個節點組成,以提高可用性和彈性。 任何節點都可以執行叢集的所有角色,但在大規模橫向擴展部署中,節點通常被指派單獨的任務。

叢集節點類型:

  • 主節點-管理集群,至少需要三個,其中一個永遠處於活動狀態;
  • 資料節點 - 儲存索引資料並用它執行各種任務;
  • 攝取節點 - 在索引之前組織用於轉換資料的管道;
  • 協調節點-路由請求、減少搜尋處理階段、協調海量索引;
  • 警報節點-啟動警報任務;
  • 機器學習節點 - 處理機器學習任務。

下圖展示了資料如何跨節點儲存和複製,以實現更高的資料可用性。

登入 Kubernetes:EFK 與 PLG

每個副本的資料都儲存在倒排索引中,下圖顯示了這是如何發生的:

登入 Kubernetes:EFK 與 PLG

安裝

詳情可查看 這裡,我將使用舵圖:

$ helm install efk-stack stable/elastic-stack --set logstash.enabled=false --set fluentd.enabled=true --set fluentd-elastics

PLG堆疊

如果您找不到這個縮寫詞,請不要感到驚訝,因為它更廣為人知的名字是 Grafana Loki。 無論如何,該堆疊越來越受歡迎,因為它使用了經過驗證的技術解決方案。 您可能已經聽說過 Grafana,一種流行的視覺化工具。 它的創建者受到 Prometheus 的啟發,開發了 Loki,一個水平可擴展的高效能日誌聚合系統。 Loki 僅索引元數據,而不是期刊本身,這是一種易於使用且經濟高效的技術解決方案。

普羅姆泰爾 - 用於將日誌從作業系統傳送到 Loki 叢集的代理程式。 格拉法納 是一個基於 Loki 數據的視覺化工具。

登入 Kubernetes:EFK 與 PLG

Loki 的建置原理與 Prometheus 相同,因此非常適合儲存和分析 Kubernetes 日誌。

洛基架構

Loki 可以作為單一進程或多個進程運行,從而允許水平擴展。

登入 Kubernetes:EFK 與 PLG

它還可以作為整體應用程式或微服務工作。 作為單一進程運行對於本地開發或小型監控非常有用。 對於工業實施和可擴展的工作負載,建議使用微服務選項。 寫入和讀取資料的路徑是分開的,因此可以根據需要進行微調和縮放。

我們先來看看日誌收集系統的架構,不做詳細介紹:

登入 Kubernetes:EFK 與 PLG

這是描述(微服務架構):

登入 Kubernetes:EFK 與 PLG

成分:

普羅姆泰爾 — 安裝在節點上的代理程式(作為一組服務),它從任務中刪除日誌並存取 Kubernetes API 以取得標記日誌的元資料。 然後它將日誌傳送到主 Loki 服務。 元資料映射支援與 Prometheus 相同的標記規則。

分銷商 — 充當緩衝區的服務分配器。 為了處理數百萬筆記錄,它會打包傳入的數據,並在資料到達時將其壓縮為區塊。 多個資料接收器同時運行,但屬於一個傳入資料流的日誌應僅出現在其中一個資料接收器的所有區塊中。 這被組織成一個接收器環和順序散列。 為了實現容錯和冗餘,需要執行 n 次(如果未配置,則執行 3 次)。

攝取者 — 服務接收者。 資料塊到達時經過壓縮並添加了日誌。 一旦區塊的大小足夠,該區塊就會刷新到資料庫。 元資料進入索引,日誌區塊中的資料進入區塊(通常是物件儲存)。 重置後,接收器會建立一個新區塊,其中將新增條目。

登入 Kubernetes:EFK 與 PLG

Index 指數 - 資料庫、DynamoDB、Cassandra、Google BigTable 等。

切塊 — 壓縮形式的日誌區塊,通常儲存在物件儲存中,例如 S3。

查詢者 - 完成所有骯髒工作的閱讀路徑。 它查看時間範圍和時間戳,然後查看索引以查找匹配項。 接下來,它讀取資料區塊並過濾它們以獲得結果。

現在讓我們看看一切都在起作用。

安裝

在 Kubernetes 中安裝最簡單的方法是使用 helm。 我們假設您已經安裝並配置了它(還有第三個版本! 約譯員)

新增儲存庫並安裝堆疊。

$ helm repo add loki https://grafana.github.io/loki/charts
$ helm repo update
$ helm upgrade --install loki loki/loki-stack --set grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=false,prometheus.server.persistentVolume.enabled=false

下面是一個範例儀表板,顯示來自 Prometheus 的 Etcd 指標資料和來自 Loki 的 Etcd pod 日誌資料。

登入 Kubernetes:EFK 與 PLG

現在讓我們討論這兩個系統的架構,並比較它們的功能。

對照

查詢語言

Elasticsearch使用Query DSL和Lucene查詢語言來提供全文搜尋功能。 它是一個成熟、強大的搜尋引擎,擁有廣泛的運營商支援。 有了它,您可以按上下文搜尋並按相關性排序。

環的另一邊是 LogQL,用於 Loki,PromQL(Prometheus 查詢語言)的後繼者。 它使用日誌標籤來過濾和選擇日誌資料。 可以使用描述的一些運算符和算術 這裡,但在能力上落後於Elastic語言。

由於 Loki 中的查詢與標籤相關聯,因此它們很容易與指標相關聯,因此更容易組織操作監控。

可擴展性

兩個堆疊都可以水平擴展,但 Loki 使其變得更容易,因為它具有獨立的讀寫路徑和微服務架構。 Loki 可以根據您的需求進行定制,並且可以用於非常大量的日誌資料。

多租戶

叢集多租戶是 OPEX 縮寫中的一個常見主題,兩個堆疊都提供多租戶。 Elasticsearch 有幾個 方式 客戶端分離:每個客戶端的單獨索引、基於客戶端的路由、唯一的客戶端欄位、搜尋過濾器。 洛基有 支持 採用 HTTP X-Scope-OrgID 標頭的形式。

成本

Loki 非常經濟高效,因為它不索引數據,只索引元數據。 這樣就達到了 節省儲存空間 和記憶體(快取),因為物件儲存比 Elasticsearch 叢集中使用的區塊儲存便宜。

結論

EFK 堆疊可用於多種用途,為分析、視覺化和查詢提供最大的靈活性和功能豐富的 Kibana 介面。 它可以透過機器學習能力進一步增強。

Loki 堆疊因其元資料發現機製而在 Kubernetes 生態系統中非常有用。 您可以根據 Grafana 和日誌中的時間序列輕鬆關聯資料以進行監控。

在成本和長期日誌儲存方面,Loki 是雲端解決方案的絕佳切入點。

市場上有更多選擇 - 有些可能更適合您。 例如,GKE 具有 Stackdriver 集成,可提供出色的監控解決方案。 我們沒有將它們納入本文的分析中。

引用:

文章由員工翻譯並為 Habr 準備 斯萊姆培訓中心 — 來自實務專家的密集課程、影片課程和企業培訓(Kubernetes、DevOps、Docker、Ansible、Ceph、SRE、Agile)

來源: www.habr.com

添加評論