Loki 初體驗

Lemon丶發表於2020-12-27

Loki 是什麼

Loki 是 Grafana Lab開發的一套日誌系統,使用Go語言實現。根據官方的介紹, Loki,高可用性,多租戶的日誌聚合系統,受到Prometheus的啟發。它的設計非常經濟高效且易於操作,因為它不會為日誌內容編制索引,而是為每個日誌流編制一組標籤。如果用一句話介紹的話,就是 Like Prometheus, but for logs

Loki 能做什麼

  • 日誌採集。loki-stack中提供promtail,專為loki定製的日誌採集元件
  • 日誌壓縮儲存
  • 使用和prometheus相同的標籤。根據日誌後設資料和標籤對日誌進行分組和索引。
  • 使用Grafana展示Loki中的日誌,也可以使用API和CLI來查詢日誌。

Loki 和 ELK 對比

  • 輕量。 loki 使用go實現,並且除儲存(也是可選的)外不依賴其他的中介軟體
  • 儲存成本低。 由於loki只對後設資料和標籤進行索引,對日誌文字進行壓縮儲存,儲存成本是遠低於ES
  • 檢索能力低於ES。 loki 不會對文字日誌進行分詞和倒排索引,所以只能使用標籤去匹配查詢日誌塊,然後可以對搜尋的日誌塊在記憶體進行grep
  • 日誌分析能力。loki 可以提供相容promethues的範圍向量查詢,如對查詢的日誌進行計數,kibana 則可以對任意文字進行查詢分析。

Loki 架構


Loki 三個核心的元件

  • Distributor 是日誌接收器,負責接收promtail的日誌並轉發到Ingester,在Distributor還會對日誌進行校驗,並且使用一致性Hash來保證chuck在Ingester上面的一致性。
  • Ingester接受日誌流並構建資料塊,其操作通常是壓縮和追加日誌。每個Ingester 的生命週期有PENDINGJOININGACTIVELEAVING 和 UNHEALTHY 五種狀態。處於JOININGACTIVE狀態的Ingester可以接受寫請求,處於ACTIVELEAVING狀態時可以接受讀請求。Ingester 將收到的日誌流在記憶體中打包成 chunks ,並定期同步到儲存後端。由於儲存的資料型別不同,Loki 的資料塊和索引可以使用不同的儲存。
  • Querier 用來查詢日誌,可以直接從 Ingester 和後端儲存中查詢資料。當客戶端給定時間區間和標籤選擇器之後,Querier 就會查詢索引來確定所有匹配 chunk ,然後對選中的日誌進行 grep並返回查詢結果。查詢時,Querier先訪問所有Ingester用於獲取其記憶體資料,只有當記憶體中沒有符合條件的資料時,才會向儲存後端發起同樣的查詢請求。對於每個查詢,單個 Querier 會 grep 所有相關的日誌。目前 Cortex 中已經實現了並行查詢,該功能可以擴充套件到 Loki,通過分散式的 grep 加速查詢。此外,由於副本因子的存在,Querier可能會接收到重複的資料,所以其內建了去重的功能,對擁有同樣時間戳、標籤組和訊息內容的日誌進行去重處理。

Loki的索引儲存可以是cassandra/bigtable/dynamodb,而chuncks可以是各種物件儲存,Querier和Distributor都是無狀態的元件。對於Ingester他雖然是有狀態的但是,當新的節點加入或者減少,整節點間的chunk會重新分配,已適應新的雜湊環。
在生產環境中,Distributor、Ingester、Querier需要部署為不同的程式,同時Loki也提供了單程式模式來讓使用者可以快速嘗試。

Loki 是否適合我們的場景

  1. 個人認為Loki是一個Pod日誌索引而不是日誌分析系統,更多的場景應該是面向kubernetes的運維團隊,而不是業務團隊。
  2. Loki 和 我們當前提供容器日誌場景比較相似,但我們今天沒有提供把日誌分塊壓縮到OSS等廉價儲存的能力,對於日誌備份來說是我們缺失的。同時我們也沒有提供分散式查詢和grep日誌流的能力。
  3. 當前Loki架構中沒有MQ等日誌緩衝元件(loki使用的是hash環和多副本來保證日誌一致性),對於大規模生產使用還需要進行更多的測試。

Loki 功能截圖

Loki 日誌檢索

Loki 日誌Grep

參考:
https://blog.csdn.net/linkthaha/article/details/100575651
https://github.com/grafana/loki
https://grafana.com/docs/loki/latest/

寫在最後

我的個人公眾號”竹韻悠揚“開通也有一段時間了,因為自己的”懶惰“一直沒有寫過文章,今年開始決定把我在技術道路中的一些感悟和好玩的技術分享給大家,如果你對上面的文字感興趣,那就訂閱一下吧 ~