正文共: 2085字
預計閱讀時間: 6分鐘
做過運維的同學都知道,服務的可觀測性是一個非常重要的渠道,能夠讓我們掌控線上服務運行時的狀態(tài)。一個好的監(jiān)控系統(tǒng),其價值在于一旦出現(xiàn)故障能夠讓我們運維的同學能夠快速收到服務異常的通知以及定位問題。也就是我們常說的告警的兩大衡量指標,即實時性和有效性。
那么,今天小白請出第一個云原生里負責日志存儲的便是Loki。這里可能有同學就說了:"我的日志存儲和分析一直用elasticsearch也可以啊,為什么要用Loki"。
別急,等小白慢慢說道說道
- 首先Loki采用Golang開發(fā),相比ES,Loki它更加輕量也更容易部署;
- 其次Loki僅索引日志的元數據部分,日志部分全部壓縮存儲,這樣在方便操作的同時又節(jié)省我們存儲空間
- Loki采用和Prometheus一樣的標簽建立索引,這意味我們可以通過標簽將metrics和logging監(jiān)控數據聯(lián)動起來
Loki也是由三部分構成,分別是負責采集的Promtail、負責存儲的Loki和負責展示的Grafana。這里又有同學問了:"我自己有了日志采集客戶端了,難道還要再加一個Promtail嗎?"。其實不然,Loki的日志收集有四種方法,除了Promtail外,還可以使用Fluentd、Fluent Bit和Docker Driver方式。
今天,小白的實踐就是利用Grafana給Loki日志添加告警功能
假設小白認為大家已經使用上Loki并在Grafana上查詢日志了。那么小白就在自己的環(huán)境內操作一次通過將內核OOM的故障告警出來的實踐來向大家展示。
1.通過標簽定位到需要查看的服務,并通過關鍵字過濾出想要查看的日志內容

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

可以看到,這里小白的服務器每過段時間都會出現(xiàn)零零散散的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'
小白先問大家有沒有發(fā)現(xiàn)點奇怪的東西呢,沒錯眼尖的同學可能看出來Prometheus和Loki在查詢的URL上幾乎一樣,并且參數基本是兼容的。那么我們可不可以將Grafana的上Loki數據源改成類Prometheus的格式呢?
答案是當然可以,事實上在Github上我們也可以找到相關的問題#1422和#1222
得益于prometheus和loki是一個開發(fā)團隊出品,我們只需簡單的配置一步,在數據源中添加一個Prometheus類型,并在地址欄中填寫上http://loki:3100/loki ,這樣我們就能通過像查詢prometheus一樣查詢日志的走勢了

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

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

配置完成后不急保存,我們先
Test rule看看rule是否能生效。
看到
state:"ok",小白長舒一口,終于可以設置告警了??,接下來小白就等著告警事件觸發(fā)后再繼續(xù)。
當告警事件發(fā)生后,在小白的Grafana頁面和郵箱都收到了事件的推送,這樣就能夠及時知道線上服務器發(fā)生了OOM事件了。
到這里小白就完成對于Loki的日志告警啦,大家是不是覺得很簡單?是的話那就對了,正如它的開發(fā)者所說Like Prometheus, but for logs.
--- end ---
關于云原生小白
云原生小白的創(chuàng)號目的是將平日里離大家較遠云原生應用以實用的角度展現(xiàn)出來,站在小白的角度來看待和使用云原生,并以每篇文章解決一個實際問題的出發(fā)點帶領大家走進云原生。