Loki: 一個更好的k8s日志管理解決方案

本文主要介紹如何使用類似kubectl logs -tail這類專業(yè)的工具實時查看應用日志,從而方便地了解開發(fā)過程中系統(tǒng)的運行情況鼻百,以及在為實際生產(chǎn)環(huán)境的k8s選擇解決方案時需要考慮哪些問題孵构。



無論你使用基于kubernetes的系統(tǒng)有多長時間橘券,在你定位問題的工具包中一定存在:日志消息党远。
在開發(fā)過程中,使用kubectl logs -tail命令等工具實時查看日志輸出营勤,可以方便地了解系統(tǒng)中正在發(fā)生的事情灵嫌。

然而,當你將容器部署到生產(chǎn)環(huán)境中時葛作,維護這種級別的可觀察性可能會成為一個負擔寿羞,因為你試圖管理和分析來自多個pod中執(zhí)行的多個容器化應用程序的大量消息。在現(xiàn)代云原生環(huán)境中进鸠。必須收集稠曼、理解和研究不同來源的數(shù)百萬條日志,才能理解應用程序運行時發(fā)生的事情客年。

傳統(tǒng)日志解決方案根本無法跟上現(xiàn)代產(chǎn)品環(huán)境中復雜的分布式基礎設施特點霞幅,因此找到一個簡單而高效的解決方案來幫助你管理這種復雜性,是你進行k8s日志管理工作的關鍵量瓜。

走進Loki

你肯定聽說過Grafana司恳,這家公司憑借開源軟件而聞名,其開源的軟件可以輕松地可視化來自許多不同來源的數(shù)據(jù)绍傲。在k8s世界中扔傅,Grafana最著名的可能是監(jiān)控指標可視化組件Prometheus。
但事情正在發(fā)生變化烫饼,最近猎塞,Grafana已經(jīng)發(fā)展成為一個成熟的可觀測性軟件供應商,開發(fā)了新的項目杠纵,如Loki荠耽、Mimir和Tempo,解決了日志比藻、鏈路追蹤和指標等重要的可觀測性需求铝量。

Loki項目結合云原生架構,專注于管理分布式银亲、高容量慢叨、高速增長的日志數(shù)據(jù),其靈感來自Prometheus(事實上务蝠,Loki宣傳自己“像Prometheus拍谐,但只針對日志”)。具備很多優(yōu)勢,非常適合現(xiàn)代環(huán)境的日志管理赠尾。

它易于設置和操作力穗,只索引元數(shù)據(jù),而不是完整的日志消息气嫁,使其輕量化,它與其他云原生工具(如Kubernetes)一起工作得很好够坐,使用常見的對象存儲解決方案寸宵,如Amazon S3。

Loki既可以使用自管理的開源版本元咙,也可以用由Grafana云提供的托管服務梯影,它是構成所謂的“PLG”技術棧的基礎:Promtail用于日志流采集,Loki用于聚合庶香、存儲和查詢日志甲棍,Grafana用于日志可視化。

再見ELK赶掖,你好PLG

看下PLG技術棧感猛,很容易看出來它的確受到Prometheus設計的影響。



Promtail是一個代理(作為Loki產(chǎn)品的一部分提供)奢赂,負責發(fā)現(xiàn)和檢索日志數(shù)據(jù)流陪白。它的功能類似于Prometheus的“scraper”,其配置文件在語法上與Prometheus使用的配置文件相同膳灶。本質上是“跟蹤”Kubernetes主節(jié)點和pod日志文件咱士,并將它們轉發(fā)到Loki的核心系統(tǒng)。(值得注意的是轧钓,Loki支持由Grafana及其社區(qū)開發(fā)者提供的許多不同的代理序厉,使用fluentd或logstash等的用戶更容易遷移到基于PLG的解決方案。)
Loki當然是PLG方案的核心毕箍,是專門為處理日志數(shù)據(jù)而設計的弛房。Loki的特性(我們將在后面更詳細地討論)使它在獲取和查詢日志數(shù)據(jù)時既高效又經(jīng)濟。

Grafana儀表板和可視化工具完善了“PLG”套件霉晕,提供了強大的功能來分析應用程序庭再、pod和集群日志。

Loki工作原理

架構和部署方式

從架構上看牺堰,洛基由五個不同的組件組成:

  • distributor:是負責獲取日志數(shù)據(jù)并將其轉發(fā)給ingester的無狀態(tài)組件拄轻。Distributor對數(shù)據(jù)進行預處理,檢查其有效性伟葫,并確保其來自已配置的租戶恨搓,這有助于系統(tǒng)擴展并保護其免受潛在的Dos攻擊。這里Grafana很好地解釋了Promtail(推薦的分發(fā)代理)如何處理數(shù)據(jù)。
  • ingester:是Loki架構的關鍵組件斧抱。從distributors接收到的數(shù)據(jù)由ingester寫入云云原生存儲服務常拓。ingesters還與查詢協(xié)作,返回內存中的數(shù)據(jù)以響應讀請求辉浦。
  • Queriers:負責解析LogQL查詢請求弄抬,并從ingesters或持久化存儲中獲取數(shù)據(jù)。
  • query fronted:可選組件-提供API接口宪郊,可用于加速讀處理掂恕。該組件通過將讀請求排隊、將大請求拆分為多個小請求以及緩存數(shù)據(jù)來優(yōu)化讀處理弛槐。
    類似Prometheus懊亡,Loki支持告警和記錄功能。這些特性是在ruler組件中實現(xiàn)的乎串,該組件持續(xù)地計算一組查詢店枣,并根據(jù)結果執(zhí)行已定義的操作,例如發(fā)送告警或預計算指標。

    對于可伸縮性,所有這些組件都可以按需跨系統(tǒng)分布夯膀。
    Loki可以選擇兩種本地部署方式:
  • 單體模式:在一個進程或Docker容器中運行Loki的所有二進制文件滥搭。這是了解產(chǎn)品更多信息的一個很好的開始。
  • 微服務部署模式:它允許Loki組件分布在多個系統(tǒng)中,并提供了高可伸縮性。
    另外一種本地部署模式,稱為“簡單可伸縮”模式逾柿,當你的需求超過單體模式的能力,但不需要大規(guī)模的微服務部署時宅此,這是一個很好的中間步驟机错。當然,如果你根本不想管理Loki父腕,那么可以考慮Grafana云服務弱匪。

重要特性

Loki實現(xiàn)了一些令人驚嘆的特性,這些特性專門用于分配負載璧亮、保護系統(tǒng)不受攻擊萧诫,并利用有效的存儲機制。

Labels(標簽)

和許多日志處理系統(tǒng)不同枝嘶,Loki不對日志數(shù)據(jù)執(zhí)行全文索引帘饶。相反,它利用了從Prometheus中借來的概念—標簽—從日志數(shù)據(jù)中提取和標記信息群扶,然后僅對標簽本身進行索引及刻。這極大地提高了寫和讀路徑上的性能镀裤,并且—在我們看來同樣有價值—不管輸入源是什么,都能實現(xiàn)一致的標簽分類缴饭。

由于這是Loki的一個重要優(yōu)點暑劝,讓我們深入研究Loki文檔中的一個示例。假設你有一個Loki的“scrape配置”颗搂,如下圖所示:


這個配置的標簽部分特別重要担猛。在本節(jié)中path變量定義了要讀取的日志文件,關鍵字job定義了要查找的標簽和用于過濾日志的值丢氢。使用此配置毁习,Loki分發(fā)器將“跟蹤”日志文件,在每個記錄中查找一個名為job的變量卖丸,該變量的值為syslog,然后創(chuàng)建包含此關鍵字和值的Loki記錄“流”盏道。最后將job標簽的索引以及包含標簽和值的數(shù)據(jù)塊寫入持久化存儲稍浆。
這個記錄流可以使用簡單的LogQL查詢查詢: {job="syslog"}。
在處理查詢時猜嘱,Loki查詢器組件將找到指向job標簽為syslog記錄的索引衅枫,然后檢索這些記錄。

云原生后端存儲

由于原始日志數(shù)據(jù)本身沒有索引朗伶,Loki可以通過利用云原生對象存儲服務(如Amazon S3弦撩、Amazon DynamoDB或Cassandra)作為后端數(shù)據(jù)存儲庫來提高系統(tǒng)的成本。為了改進查詢處理论皆,Loki使用云服務將數(shù)據(jù)存儲為“塊”(原始日志數(shù)據(jù))和“索引”(規(guī)范化和索引標簽以及從日志記錄中提取的數(shù)據(jù))益楼。查詢器使用更有效的索引來查找請求的分塊日志數(shù)據(jù)。

LogQL

Loki實現(xiàn)了一種名為LogQL的日志查詢語言点晴,它大量借鑒了Prometheus的PromQL語言感凤。LogQL既可以直接使用,也可以通過Grafana前端儀表板使用粒督。為日志和指標提供一致的查詢語言可以簡化學習曲線陪竿,并促進動態(tài)過濾和轉換。

在k8s集群中部署PLG技術棧

Loki有幾種安裝機制:Tanka(Grafana自己的云部署)屠橄,Helm charts用于“簡單可伸縮”的微服務部署族跛,使用Docker / Docker Compose機制,以及可下載的二進制文件锐墙。如果需要礁哄,你還可以從Github存儲庫下載Loki源代碼,并在本地編譯贮匕。Grafana在這里為每種安裝方法提供了說明姐仅。

Loki: 是一個更好的k8s日志管理解決方案

跟蹤Kubernetes應用程序、pod和集群日志文件是一種非常有用的技術,可以近乎實時地跟蹤容器化應用程序的運行情況掏膏。Grafana的Loki產(chǎn)品將其提升到一個新的水平劳翰,其功能受到流行的Prometheus指標系統(tǒng)的啟發(fā),甚至是在高度復雜的環(huán)境也易于擴展馒疹,以及一些增強性功能佳簸,使日志文件的處理比以往任何時候都簡單。如果你正在尋找更好的Kubernetes日志管理解決方案颖变,Loki絕對值得一試生均。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市腥刹,隨后出現(xiàn)的幾起案子马胧,更是在濱河造成了極大的恐慌,老刑警劉巖衔峰,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佩脊,死亡現(xiàn)場離奇詭異,居然都是意外死亡垫卤,警方通過查閱死者的電腦和手機威彰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來穴肘,“玉大人歇盼,你說我怎么就攤上這事∑栏В” “怎么了豹缀?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盈咳。 經(jīng)常有香客問我耿眉,道長,這世上最難降的妖魔是什么鱼响? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任鸣剪,我火速辦了婚禮,結果婚禮上丈积,老公的妹妹穿的比我還像新娘筐骇。我一直安慰自己,他們只是感情好江滨,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布铛纬。 她就那樣靜靜地躺著,像睡著了一般唬滑。 火紅的嫁衣襯著肌膚如雪告唆。 梳的紋絲不亂的頭發(fā)上棺弊,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音擒悬,去河邊找鬼模她。 笑死,一個胖子當著我的面吹牛懂牧,可吹牛的內容都是我干的侈净。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼僧凤,長吁一口氣:“原來是場噩夢啊……” “哼畜侦!你這毒婦竟也來了?” 一聲冷哼從身側響起躯保,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤旋膳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后途事,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溺忧,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年盯孙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祟滴。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡振惰,死狀恐怖,靈堂內的尸體忽然破棺而出垄懂,到底是詐尸還是另有隱情骑晶,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布草慧,位于F島的核電站桶蛔,受9級特大地震影響,放射性物質發(fā)生泄漏漫谷。R本人自食惡果不足惜仔雷,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舔示。 院中可真熱鬧碟婆,春花似錦、人聲如沸惕稻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俺祠。三九已至公给,卻和暖如春借帘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背淌铐。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工肺然, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匣沼。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓狰挡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親释涛。 傳聞我的和親對象是個殘疾皇子加叁,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容