目錄
- 前言
- 1.Loki介紹
- 2.Loki安裝
- 3.promtail安裝
- 4.grafana配置Loki
前言
說起查看日志排查 bug 的方式,早些年的時候我都是直接登陸 linux 服務器直接查看,或者下載下來查看,
隨著微服務的興起,服務被越拆越小,服務部署也是集群部署,可能涉及到的服務器數量就有好幾十臺了,這樣的話一臺臺服務器去登陸查看就感覺非常麻煩了,
后面我嘗試著去尋找別的解決辦法,發現了一個叫 finderweb 的程式員查看日記神器,用了一段時間,感覺也還可以,感興趣的可以訪問如下鏈接,自行安裝嘗試(http://www.finderweb.net/)
再后來,就是用的 elk 了, elk 是一款功能非常強大的日志收集分析統計系統,基于 es ,但是同時也帶來了不小的資源開銷和高成本的維護弊病(elk日志平臺安裝教程在歷史文章中),有點太重了,其實對于中小型的公司來說,對日志系統的要求并不多,開發人員更希望的是直接給我想要查看的服務日志就行,越簡單越好,
聊到這里,阿里云上也有個叫 sls的日志服務,聽說好用,但是要花錢啊,
那么接下來我就來安利一款日志系統的弄潮兒:輕量級日志系統 Loki,不用花錢,只占用很少的服務器資源,而且安裝運維很簡單,
1.Loki介紹
看看 Loki 的官方檔案介紹:

Loki 日志系統的組成架構圖:

**從上圖可以發現有以下三劍客組成:
**
- Loki:主服務器,負責存盤日志和處理查詢,
- Promtail:代理,負責收集日志并將日志資料發送給 Loki,
- Grafana:查詢界面,用于查詢和顯示日志,
Loki 為了降低全文索引資源帶來的開銷,只對標簽進行了索引,查詢的方式是把查詢分解成較小的分片,我們可以理解為多執行緒的 grep 查詢,效率不差的,
**接下來就跟著我安裝實踐一把,喝兩杯水的功夫即可,
**
2.Loki安裝
1.下載安裝包
curl -O -L "http://github.com/grafana/loki/releases/download/v2.2.0/loki-linux-amd64.zip"
2.解壓
unzip loki-linux-amd64.zip
3.賦予可執行權限
chmod a+x loki-linux-amd64
4.下載組態檔
wget https://github.com/grafana/loki/blob/main/cmd/loki/loki-local-config.yaml
//檔案名太長,改個名字
mv loki-local-config.yaml loki.yml
5.編輯loki配置,配置資料保留策略
設定日志資料保留14天
6.啟動Loki
nohup ./loki-linux-amd64 -config.file=loki.yml > /data/loki/logs/loki.log 2>&1 &
//防問一下是否啟動成功
curl http://localhost:3100/metrics
3.promtail安裝
在需要收集日志的服務器上都要安裝promtail
1.下載安裝包
curl -O -L "http://github.com/grafana/loki/releases/download/v2.2.0/promtail-linux-amd64.zip"
2.解壓
unzip promtail-linux-amd64.zip
3.賦予可執行權限
chmod a+x promtail-linux-amd64
4.下載并編輯組態檔
wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml
//檔案名太長,改個名字
mv promtail-local-config.yaml promtail.yml
編輯并修改

5.啟動promtail
nohup ./promtail-linux-amd64 -config.file=promtail.yml > /data/loki/logs/promtail.log 2>&1 &
4.grafana配置Loki
grafana 的安裝可參考歷史文章中的《手把手教你搭建一個監控告警平臺》**
1.在 grafana 上添加 Loki 資料源**



2.到這一步就配置完成了,可以直接查看日志了
這個 job 就是剛剛 promtail.yml 組態檔中定義的 job,直接輸入:{job=“uc-prod-96”} 按時間查詢即可


感興趣的話可以學一下 LogQL 語法,支持各種花里胡哨的過濾查詢方式,
當然我們用的最多的方式應該是以下兩種,已經滿足了我們的日常使用場景:
// 1.例如查詢包含"不高興就喝水"的日志
{job="job"}|= "不高興就喝水"
// 2.支持多個條件過濾
{job="job"} |= "error" != "timeout"
多的方式應該是以下兩種,已經滿足了我們的日常使用場景:**
// 1.例如查詢包含"不高興就喝水"的日志
{job="job"}|= "不高興就喝水"
// 2.支持多個條件過濾
{job="job"} |= "error" != "timeout"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312128.html
標籤:其他
上一篇:Python 小白從零開始 PyQt5 專案實戰(4)基本控制元件
下一篇:一文搞掂十大經典排序演算法
