10分鐘學會使用 Loki 日誌聚合系統

語言: CN / TW / HK

Loki 是一個由Grafana Labs 開發的開源日誌聚合系統,旨在為雲原生架構提供高效的日誌處理解決方案。

Loki 通過使用類似 Prometheus 的標籤索引機制來儲存和查詢日誌資料,這使得它能夠快速地進行分散式查詢和聚合,而不需要將所有資料都從儲存中載入到記憶體中。Loki還使用了壓縮和切割日誌資料的方法來減少儲存空間的佔用,從而更好地適應雲原生環境下的高速增長的日誌資料量。

Loki的架構由以下幾個主要元件組成:

Promtail: 負責採集應用程式和系統的日誌資料,並將其傳送到 Loki 的叢集中。

Loki: 負責儲存日誌資料,提供 HTTP API 的日誌查詢,以及資料過濾和篩選。

Grafana: 負責 UI 展示日誌資料。

Loki vs ELK

Loki 和 ELK(Elasticsearch, Logstash, Kibana)都是常用的日誌處理系統,它們各自具有一些優點。下面是 Loki 相對於 ELK 的幾個優點:

  • 儲存效率更高:Loki 使用了壓縮和切割日誌資料的方法來減少儲存空間的佔用,相比之下,ELK 需要維護一個大的索引,需要更多的儲存空間。

  • 查詢速度更快:Loki 使用類似 Prometheus 的標籤索引機制儲存和查詢日誌資料,這使得它能夠快速地進行分散式查詢和聚合,而不需要將所有資料都從儲存中載入到記憶體中。而ELK需要將資料從儲存中載入到記憶體中進行查詢,查詢速度相對較慢。

  • 部署和管理更容易:Loki 是一個輕量級的日誌聚合系統,相比之下,ELK 需要部署和管理多個元件,需要更多的資源和人力成本。

安裝和配置 Loki

前提

參閱 Rainbond 快速安裝 文件進行安裝。

安裝 Loki

Loki 應用已釋出到開源應用商店,可通過開源應用商店一鍵安裝。

平臺管理 -> 應用市場 -> 開源應用商店 中搜索 Loki 並安裝。

安裝完成後,該應用內包含 Loki Grafana 元件:

同時還有 k8s資源,其中包括 promtailDaemonset 以及 SA 等資源。

配置 Loki

進入應用內 -> k8s資源,修改 ConfigMap promtail-configurl 部分,URL 通過 Loki 的 元件內 -> 埠 -> 訪問地址 獲取,如下:

apiVersion: v1
data:
  promtail.yaml: |
    clients:
    - url: http://gre4f2a2:3100/loki/api/v1/push # Changed
......

進入應用內 -> k8s資源,修改 ClusterRoleBinding promtail-clusterrolebindingnamespace 部分為當前應用的名稱空間。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: promtail-clusterrolebinding
......
subjects:
- kind: ServiceAccount
  name: promtail-serviceaccount
  namespace: dev # Changed

如果使用的容器執行時是 Containerd 需要修改 promtail-daemonset 資源,如果容器執行時是 Docker 則不用修改。

......
volumeMounts:
- mountPath: /var/lib/containers # Changed
  name: varlibdockercontainers
  readOnly: true
......
volumes:
- hostPath:
    path: /var/lib/containers # Changed
    type: ""
  name: varlibdockercontainers

修改後更新 Loki Grafana 元件,應用內 -> 更新即可。

使用 Loki

訪問 Grafana,應用內點選訪問按鈕即可通過 Rainbond 預設提供的域名訪問 Grafana

進入 Explore 內通過 Labels 篩選 POD 日誌,選擇 namespace pod Labels,會自動生成查詢表示式,點選 Show logs 即可檢視日誌。

查詢表示式

除了通過 Grafana 介面選擇 Labels 之外,還可以手動寫查詢表示式,比如:

{container="rbd-api",namespace="rbd-system",pod="rbd-api-5fdd795546-j5679"}

目前支援以下標籤匹配運算子:

  • = 等於
  • != 不等於
  • =~ 正則匹配
  • !~ 正則不匹配

例如:

{namespace=~"dev|rbd-system"}

最後

總之,Loki是一個輕量級、高效的日誌聚合系統,它在處理雲原生環境下大規模日誌資料方面表現出色。Loki 相比於 ELK具有儲存效率更高、查詢速度更快、部署和管理更容易。結合 Rainbond 一起使用,使我們的應用和日誌管理都非常簡單。