1.日志系統介紹
日志系統:
GLA、ELK、數倉
?志處理流程:采集 ==> 存儲 ==> 檢索 ==> 可視化
日志系統工作流程:


日志平臺的目的:統一聚合分散的日志
日志平臺搭建方案:

ELK:ElasticSearch:存儲日志(日志內容進行分詞,日志所有數據都可以被檢索)
Loki:輕量級日志聚合平臺

LAG工作邏輯:
注:檢索日志時向Loki發送查詢請求,Loki從MinIo中讀取日志
2.Loki
2.1 介紹
Loki 是?個可?平擴展、?可?性、多租戶?志聚合系統,其靈感來?Prometheus。Loki 與 Prometheus 的不同之處在于,它專注于?志?不是指標,并通過推送?不是拉取來收集?志。
Loki 的設計?常經濟?效,并且具有?度可擴展性。與其他?志系統不同,Loki不會對?志內容進?索引,?只會對?志的元數據進?索引,將其作為每個?志流的?組標簽。
?志流是?組共享相同標簽的?志。標簽幫助Loki在您的數據存儲中找到?志流,因此擁有?組?質量的標簽是?效查詢執?的關鍵。
然后,?志數據被壓縮并以塊的形式存儲在對象存儲中,如亞?遜簡單存儲服務(S3)或?歌云存儲(GCS),甚?為了開發或概念驗證,存儲在?件系統上。?索引和?度壓縮的塊簡化了操作,顯著降低了Loki的成本。
2.2 日志結構
Loki數據存儲格式:
index:索引;存儲Loki標簽,如?志級別、來源、分組
chunk:塊;存儲?志條?本身

Agent:
代理或客戶端,例如Grafana Alloy或Promtail,隨Loki?起分發。代理抓取?志,通過添加標簽將?志轉換為流,并通過HTTP API將流推送到Loki。
Loki主服務器:
負責攝取和存儲?志以及處理查詢。它可以部署在三種不同的配置中,有關更
多信息,請參閱部署模式。
Grafana:
?于查詢和顯示?志數據。您還可以使?LogCLI或直接使?Loki API從命令? 查詢?志。
3.系統架構
3.1 Loki架構:



寫流程:
1. distributor 接收帶有流和?志?的HTTP POST請求。
2. distributor 會 hash 計算請求中包含的每個流,決定發給 ?致性 hash 環 中的哪個 ingester
3. distributor 把每個流 發給合適處理它的 ingester 和其副本
4. ingester 接收帶有?志?的流,并為流的數據創建?個塊或附加到現有塊。每個租戶和每個標
簽集,塊都是唯?的
5. ingester 回復寫操作結果
6. distributor 等待?多數 ingester 確認寫?完成。
7. distributor 在收到?少法定數量的確認寫?時響應成功(2xx狀態碼)。或者在寫?操作失敗
時響應錯誤(4xx或5xx狀態碼)。
讀流程:
1. 查詢前端(query frontend) 接受到 攜帶 LogQL 的 HTTP GET 請求
2. 查詢前端 將查詢拆分為?查詢并將它們傳遞給查詢調度程序(query scheduler)。
3. querier (查詢器)從調度程序(scheduler)中提取?查詢。
4. querier 將查詢傳遞給 所有保存數據的 ingester。
5. ingester 返回與查詢匹配的 記憶數據(如果有)。
6. 如果 ingester 沒有返回或返回的數據不?,querier 會延遲從后備存儲加載數據并對其運?查
詢。
7. querier 遍歷所有接收到的數據并進?重復數據刪除,將?查詢的結果返回到查詢前端。
8. 查詢前端 等待 查詢的所有?查詢完成 并由 querier 返回。
9. 查詢前端將兩個結果合并為最終結果并將其返回給客戶端。
3.2 Alloy架構

Grafana Alloy是?個多功能的可觀測性收集器,可以攝取各種格式的?志并將其 發送到Loki。我們推薦Alloy作為向Loki發送?志的主要?法,因為它為構建?度可擴展和可靠的可觀測性流?線提供了更強?和特征豐富的解決?案。
4.系統部署實踐
創建項目目錄,在項目目錄下下載默認配置文件:
# 1、準備?錄
mkdir evaluate-loki
cd evaluate-loki
# 2、下載默認配置?件
wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-s
tarted/loki-config.yaml -O loki-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-s
tarted/alloy-local-config.yaml -O alloy-local-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-s
tarted/docker-compose.yaml -O docker-compose.yaml
dockercompose文件執行效果架構:
執行docker compose up -d 啟動服務
Alloy日志收集:
5.Grafana
添加Loki數據源:
查看?志:可以使?LogCli或者Grafana可視化界?查看?志
1. 使? Grafana 查詢 Loki 數據源的數據
a. 訪問Grafana:http://101.126.16.42:3000/
b. 已經整合了Loki數據源
c. 點擊 Explore 查看
d. 使?Code模式,編寫 LogQL 查詢
查詢示例:
標簽檢索:
# 查看 container 標簽值 為 evaluate-loki-flog-1 的?志
{container="evaluate-loki-flog-1"}
{container="evaluate-loki-grafana-1"}
包含值:
# 查看 container 標簽值 為 evaluate-loki-flog-1 ,且 json 格式中 status字段值為4
04
{container="evaluate-loki-flog-1"} | json | status=`404`
計算:
sum by(container) (rate({container="evaluate-loki-flog-1"} | json | status=
`404` [$__auto]))
其他:
{container="evaluate-loki-flog-1"}
{container="evaluate-loki-flog-1"} |= "GET"
{container="evaluate-loki-flog-1"} |= "POST"
{container="evaluate-loki-flog-1"} | json | status="401"
{container="evaluate-loki-flog-1"} != "401"
更多:https://grafana.com/docs/loki/latest/query/query_examples/