使用 Loki 繪制 Traefik 監(jiān)控面板
前段時(shí)間在Loki2.0發(fā)布時(shí),更新了一個(gè)配套的用LogQL語法繪制Nginx監(jiān)控面板的Demo。今天小白準(zhǔn)備用同樣的手法炮制一個(gè)基于Traefik日志的監(jiān)控面板。還不清楚之前Nginx面板操作的同學(xué)可以看參考文末后的推薦閱讀。
Traefik
Traefik是一個(gè)用Golang實(shí)現(xiàn)的云原生輕量級(jí)HTTP反向代理工具。由于它支持配置適配多種后端服務(wù)(docker,kubernetes,Mesos,redis)來做動(dòng)態(tài)的路由配置。當(dāng)前Rancher的邊緣產(chǎn)品K3S也默認(rèn)把Traefik作為默認(rèn)的Ingress管理器,足以可見traefik也越來越受到廣大開發(fā)者的喜愛。
那么,Traefik的可觀察性除了打開默認(rèn)的Metrics之外,我們還可以通過日志方式繪制實(shí)時(shí)監(jiān)控面板。
配置Access Logs
traefik默認(rèn)的access log格式如下:
?-??[]?"??" ???"" ?"" ??"" ?"" ?ms
雖然看起來比較直觀,不過這樣的日志存入在Loki中,我們還需要通過正則表達(dá)式解析,非常的不方便。所以我們還是將日志格式改為json,方便logql解析。
按如下方式修改traefik.yaml
accessLog:
??format:?json
默認(rèn)traefik的日志輸出為stdout,如果你的采集端是通過讀取文件的話,則需要用
filePath參數(shù)將traefik的日志重定向到文件目錄
繪制Grafana面板
大體的監(jiān)控面板,小白已經(jīng)繪制好并發(fā)布到Grafana Lab,我們?cè)L問頁面https://grafana.com/grafana/dashboards/13713就可以將面板下載到本地

將下載的面板json文件導(dǎo)入到Grafana,導(dǎo)入后更換uid和Loki源

導(dǎo)入后你將獲得一個(gè)空白的面板,如下

別急,空白的原因是logql沒有查詢到合適日志,我們需要修改每個(gè)panel的查詢語句,讓他定位到合適的日志。面板默認(rèn)的日志標(biāo)簽是{job="/var/log/traefik.log"},我們需要改成適應(yīng)自己環(huán)境的label

最后就能得到如下面板,在這里我們可以看到經(jīng)過Treafik的HTTP請(qǐng)求狀態(tài),請(qǐng)求耗時(shí)以及路由分布等信息。

總結(jié)
Traefik的面板僅僅只是依葫蘆畫瓢的抄襲了官方的Nginx面板,不過在"抄襲"的過程中也能學(xué)習(xí)到幾個(gè)LogQL的重要語句的使用場(chǎng)景。
樣本排序統(tǒng)計(jì)百分位
在TP95的面板中我們使用了如下語法,主要的意思是將traefik日志中的Duration值按照時(shí)間變量$__interval進(jìn)行排序,取第95%位上的值
quantile_over_time(0.95,{job="xxx"}?
|=?"RequestProtocol"
|?json?
|?unwrap?Duration?
|??__error__=""??[$__interval])?by?(ServiceName)
統(tǒng)計(jì)請(qǐng)求異常率
在異常請(qǐng)求率的面板中,我們不光使用了Label filters來過濾狀態(tài)中大于400的請(qǐng)求,同時(shí)還用除法/來計(jì)算整體的異常百分比。
sum(rate({job="xxx"}?
|~?"RequestProtocol"?
|?json?
|?OriginStatus?>=?400?
|__error__=""[$__interval]))?
/?(sum(rate({job="xxx"}?
|~?"RequestProtocol"?
|?json?
|?__error__=""[$__interval]))?
/?100)
可以看到,LogQL v2強(qiáng)大的日志查詢分析能力讓日志的可玩性大幅提升。和Prometheus一樣,Loki作為云原生可觀測(cè)性下的日志一環(huán),其后續(xù)發(fā)展也越來越值得關(guān)注。
CKA 認(rèn)證培訓(xùn)
?點(diǎn)擊屏末?|?閱讀原文?|?即刻學(xué)習(xí)
