一.系統(tǒng)架構(gòu)
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-482235.html
二.組成部分
?Loki 的日志堆棧由 3 個(gè)組件組成:-
promtail
:用于采集日志、并給每條日志流打標(biāo)簽,每個(gè)節(jié)點(diǎn)部署,k8s部署模式下使用daemonset管理。? -
用于存儲(chǔ)采集的日志, 并根據(jù)標(biāo)簽查詢(xún)?nèi)罩玖?。單?jié)點(diǎn)部署,一般和監(jiān)控組件部署在同一節(jié)點(diǎn)。?loki:
- Grafana:提供界面,實(shí)現(xiàn)日志的可視化查詢(xún)。安裝監(jiān)控組件會(huì)默認(rèn)部署grafana,與監(jiān)控組件共用grafana。
源碼地址:https://github.com/grafana/loki
三.promtail日志收集原理
默認(rèn)情況下,容器日志會(huì)存儲(chǔ)在?/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 ...
每個(gè)文件夾對(duì)應(yīng)一個(gè) Pod,Pod 下級(jí)目錄為容器名,再下級(jí)即為容器日志。
$ 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
只是對(duì) /data/docker/containers/***/***.log
文件的軟鏈接,本質(zhì)上還是 Docker 維護(hù)日志, k8s 對(duì)其引用而已。-
log
:日志內(nèi)容 -
stream
:stderr(異常輸出)、stdout(正常輸出) -
time
:時(shí)間
? 注意:/data/docker/containers
?并非 docker 默認(rèn)的數(shù)據(jù)存儲(chǔ)路徑,是通過(guò)?/etc/docker/daemon.json
?配置的。
? 注意:上述提到?/var/log/pods
?下的日志只是對(duì)?/data/docker/containers
?下日志的軟鏈接,所以?Promtail
?部署時(shí)需要同時(shí)掛載這兩個(gè)目錄。
?四.Loki
? Loki是一個(gè)水平可擴(kuò)展,高可用,多租戶(hù)的日志聚合系統(tǒng)。Loki只會(huì)對(duì)日志元數(shù)據(jù)標(biāo)簽進(jìn)行索引,而不會(huì)對(duì)原始的日志數(shù)據(jù)進(jìn)行全文檢索,收集的日志數(shù)據(jù)本身會(huì)被壓縮,并以chunks(塊)的形式存放在存儲(chǔ)中。
4.1.組件
1.Distributor(分配器)
? 日志寫(xiě)入第一站,一旦分配器接收到日志數(shù)據(jù),他就會(huì)把日志分成若干批次,并將它們并行的傳送到采集器。
分配器采用gRPC與采集器進(jìn)行通信,它們是無(wú)狀態(tài)的,所以我們需要根據(jù)實(shí)際狀況進(jìn)行擴(kuò)縮容。
2.Ingester(采集器)
采集器負(fù)責(zé)將日志數(shù)據(jù)寫(xiě)入存儲(chǔ)。
3.Querier(查詢(xún)器)
查詢(xún)服務(wù)器,負(fù)載處理LOGQL查詢(xún)語(yǔ)句。
4.Chunk(塊)存儲(chǔ)
塊存儲(chǔ)是Loki的長(zhǎng)期數(shù)據(jù)存儲(chǔ),旨在支持交互式查詢(xún)和持續(xù)寫(xiě)入,無(wú)需后臺(tái)維護(hù)任務(wù)。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-482235.html
?
到了這里,關(guān)于Loki 日志收集系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!