Loki 日誌收集系統

一.系統架構

 

二.組成部分

 Loki 的日誌堆棧由 3 個組件組成:
  • promtail用於採集日誌、並給每條日誌流打標籤,每個節點部署,k8s部署模式下使用daemonset管理。 
  • loki:用於存儲採集的日誌, 並根據標籤查詢日誌流。單節點部署,一般和監控組件部署在同一節點。 
  • Grafana:提供界面,實現日誌的可視化查詢。安裝監控組件會默認部署grafana,與監控組件共用grafana。

源碼地址:https://github.com/grafana/loki

三.promtail日誌收集原理

  默認情況下,容器日誌會存儲在 /var/log/pods 路徑下

$ ls /var/log/pods

kube-system_kube-flannel-ds-amd64-9x66j_28e71490-d614-4cd8-9ea7-af23cc7b9bff           
lab_job-employee-cronjob-1615078800-n2rxh_134ce637-c2a7-47b8-896f-348931125acb
kube-system_kube-proxy-lfzmx_90605182-ae56-4085-801e-fc4a83531945
...

  每個文件夾對應一個 Pod,Pod 下級目錄爲容器名,再下級即爲容器日誌。

$ tree kube-system_kube-flannel-ds-amd64-9x66j_28e71490-d614-4cd8-9ea7-af23cc7b9bff/

kube-system_kube-flannel-ds-amd64-9x66j_28e71490-d614-4cd8-9ea7-af23cc7b9bff/
├── install-cni
│   └── 3.log -> /data/docker/containers/6accaa2d6890df8ca05d1f40aaa9b8da69ea0a00a8e4b07a0949cdc067843e37/6accaa2d6890df8ca05d1f40aaa9b8da69ea0a00a8e4b07a0949cdc067843e37-json.log
└── kube-flannel
    ├── 2.log -> /data/docker/containers/9e8eea717cc3efd0804900a53244a32286d9e04767f76d9c8a8cc3701c83ece5/9e8eea717cc3efd0804900a53244a32286d9e04767f76d9c8a8cc3701c83ece5-json.log
    └── 3.log -> /data/docker/containers/06389981d26cbe60328cd5a46af7b003c8d687d1c411704784aa12d4d82672b8/06389981d26cbe60328cd5a46af7b003c8d687d1c411704784aa12d4d82672b8-json.log
  日誌文件 kube-flannel/3.log 只是對 /data/docker/containers/***/***.log 文件的軟鏈接,本質上還是 Docker 維護日誌, k8s 對其引用而已。
  日誌是 JSON 格式的,每一行包含如下三個信息:
  • log:日誌內容
  • stream:stderr(異常輸出)、stdout(正常輸出)
  • time:時間

   注意:/data/docker/containers 並非 docker 默認的數據存儲路徑,是通過 /etc/docker/daemon.json 配置的。

   注意:上述提到 /var/log/pods 下的日誌只是對 /data/docker/containers 下日誌的軟鏈接,所以 Promtail 部署時需要同時掛載這兩個目錄。

 四.Loki

   Loki是一個水平可擴展,高可用,多租戶的日誌聚合系統。Loki只會對日誌元數據標籤進行索引,而不會對原始的日誌數據進行全文檢索,收集的日誌數據本身會被壓縮,並以chunks(塊)的形式存放在存儲中。

4.1.組件

1.Distributor(分配器)

   日誌寫入第一站,一旦分配器接收到日誌數據,他就會把日誌分成若干批次,並將它們並行的傳送到採集器。

  分配器採用gRPC與採集器進行通信,它們是無狀態的,所以我們需要根據實際狀況進行擴縮容。

2.Ingester(採集器)

  採集器負責將日誌數據寫入存儲。

3.Querier(查詢器)

  查詢服務器,負載處理LOGQL查詢語句。

4.Chunk(塊)存儲

  塊存儲是Loki的長期數據存儲,旨在支持交互式查詢和持續寫入,無需後臺維護任務。

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章