正文共: 2085字

預計閱讀時間: 6分鐘

做過運維的同學都知道,服務的可觀測性是一個非常重要的渠道,能夠讓我們掌控線上服務運行時的狀態。一個好的監控系統,其價值在於一旦出現故障能夠讓我們運維的同學能夠快速收到服務異常的通知以及定位問題。也就是我們常說的告警的兩大衡量指標,即實時性和有效性。

那麼,今天小白請出第一個雲原生裏負責日誌存儲的便是Loki。這裏可能有同學就說了:"我的日誌存儲和分析一直用elasticsearch也可以啊,爲什麼要用Loki"。

別急,等小白慢慢說道說道

  • 首先Loki採用Golang開發,相比ES,Loki它更加輕量也更容易部署;
  • 其次Loki僅索引日誌的元數據部分,日誌部分全部壓縮存儲,這樣在方便操作的同時又節省我們存儲空間
  • Loki採用和Prometheus一樣的標籤建立索引,這意味我們可以通過標籤將metrics和logging監控數據聯動起來

Loki也是由三部分構成,分別是負責採集的Promtail、負責存儲的Loki和負責展示的Grafana。這裏又有同學問了:"我自己有了日誌採集客戶端了,難道還要再加一個Promtail嗎?"。其實不然,Loki的日誌收集有四種方法,除了Promtail外,還可以使用 FluentdFluent BitDocker Driver 方式。

今天,小白的實踐就是利用Grafana給Loki日誌添加告警功能

假設小白認爲大家已經使用上Loki並在Grafana上查詢日誌了。那麼小白就在自己的環境內操作一次通過將內核OOM的故障告警出來的實踐來向大家展示。

1.通過標籤定位到需要查看的服務,並通過關鍵字過濾出想要查看的日誌內容

image.png

2.小白想看下過去一段時間內,服務器上出現OOM的趨勢

image.png

可以看到,這裏小白的服務器每過段時間都會出現零零散散的OOM實踐,那麼運維的同學就要問了:"這麼多OOM怎麼辦,Grafana好像沒地方可以配置Loki告警啊",小白先按下不表,讓我們先來看看Prometheus和Loki的查詢接口:

Prometheus的查詢接口

# 及時查詢
$ curl 'http://localhost:9090/api/v1/query?query=up&time=2015-07-01T20:10:51.781Z'
# 範圍查詢
$ curl 'http://localhost:9090/api/v1/query_range?query=up&start=2015-07-01T20:10:30.781Z&end=2015-07-01T20:11:00.781Z&step=15s'

Loli的查詢接口

# 及時查詢
$ curl -G -s  "http://localhost:3100/loki/api/v1/query" --data-urlencode 'query=sum(rate({job="varlogs"}[10m])) by (level)'
# 範圍查詢
$ curl -G -s  "http://localhost:3100/loki/api/v1/query_range" --data-urlencode 'query=sum(rate({job="varlogs"}[10m])) by (level)' --data-urlencode 'step=300'

小白先問大家有沒有發現點奇怪的東西呢,沒錯眼尖的同學可能看出來Prometheus和Loki在查詢的URL上幾乎一樣,並且參數基本是兼容的。那麼我們可不可以將Grafana的上Loki數據源改成類Prometheus的格式呢?

答案是當然可以,事實上在Github上我們也可以找到相關的問題 #1422#1222

得益於prometheus和loki是一個開發團隊出品,我們只需簡單的配置一步,在數據源中添加一個Prometheus類型,並在地址欄中填寫上 http://loki:3100/loki ,這樣我們就能通過像查詢prometheus一樣查詢日誌的走勢了

image.png

這時候小白再創建一個pannel來查詢內核的OOM趨勢就可以得到如下結果:

image.png

接下來的工作,小白就是在Grafana上添加一個Alert小鈴鐺,讓它每分鐘去Loki裏面查詢有沒有出現OOM的日誌出現,如果計算出來的結果大於0,小白就讓Grafana通過郵件告警出來。

image.png

配置完成後不急保存,我們先 Test rule 看看rule是否能生效。

image.png

看到 state:"ok" ,小白長舒一口,終於可以設置告警了:tada:,接下來小白就等着告警事件觸發後再繼續。

2000 years later...

image.png

當告警事件發生後,在小白的Grafana頁面和郵箱都收到了事件的推送,這樣就能夠及時知道線上服務器發生了OOM事件了。

到這裏小白就完成對於Loki的日誌告警啦,大家是不是覺得很簡單?是的話那就對了,正如它的開發者所說 Like Prometheus, but for logs .

--- end ---

關於雲原生小白

雲原生小白的創號目的是將平日裏離大家較遠雲原生應用以實用的角度展現出來,站在小白的角度來看待和使用雲原生,並以每篇文章解決一個實際問題的出發點帶領大家走進雲原生。雲原生。

關注小白的微信公衆號

歡迎關注我們的微信公衆號,每天學習Go知識

相關文章