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資源
,其中包括 promtail
的 Daemonset
以及 SA
等資源。
配置 Loki
進入應用內 -> k8s資源,修改 ConfigMap promtail-config
的 url
部分,URL 透過 Loki 的 元件內 -> 埠 -> 訪問地址 獲取,如下:
apiVersion: v1
data:
promtail.yaml: |
clients:
- url: http://gre4f2a2:3100/loki/api/v1/push # Changed
......
進入應用內 -> k8s資源,修改 ClusterRoleBinding promtail-clusterrolebinding
的 namespace
部分為當前應用的名稱空間。
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 一起使用,使我們的應用和日誌管理都非常簡單。