共計(jì) 1945 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。
這期內(nèi)容當(dāng)中丸趣 TV 小編將會(huì)給大家?guī)?lái)有關(guān) K8s 日志系統(tǒng)建設(shè)中的典型問(wèn)題有哪些,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
為何我們需要日志系統(tǒng)
通常一個(gè)線上問(wèn)題的定位流程是:通過(guò) Metric 發(fā)現(xiàn)問(wèn)題,根據(jù) Trace 定位到問(wèn)題模塊,根據(jù)模塊具體的日志定位問(wèn)題原因。在日志中包括了錯(cuò)誤、關(guān)鍵變量、代碼運(yùn)行路徑等信息,這些是問(wèn)題排查的核心,因此日志永遠(yuǎn)是線上問(wèn)題排查的必經(jīng)路徑。
在阿里的十多年中,日志系統(tǒng)伴隨著計(jì)算形態(tài)的發(fā)展在不斷演進(jìn),大致分為 3 個(gè)主要階段:
在單機(jī)時(shí)代,幾乎所有的應(yīng)用都是單機(jī)部署,當(dāng)服務(wù)壓力增大時(shí),只能切換更高規(guī)格的 IBM 小型機(jī)。日志作為應(yīng)用系統(tǒng)的一部分,主要用作程序 Debug,通常結(jié)合 grep 等 Linux 常見(jiàn)的文本命令進(jìn)行分析;
隨著單機(jī)系統(tǒng)成為制約阿里業(yè)務(wù)發(fā)展的瓶頸,為了真正的 Scale out,飛天項(xiàng)目啟動(dòng):2013 年飛天 5K 項(xiàng)目正式上線。在這個(gè)階段各個(gè)業(yè)務(wù)開(kāi)始了分布式改造,服務(wù)之間的調(diào)用也從本地變?yōu)榉植际剑瑸榱烁玫墓芾怼⒄{(diào)試、分析分布式應(yīng)用,我們開(kāi)發(fā)了 Trace(分布式鏈路追蹤)系統(tǒng)、各式各樣的監(jiān)控系統(tǒng),這些系統(tǒng)的統(tǒng)一特點(diǎn)是將所有的日志(包括 Metric 等)進(jìn)行集中化的存儲(chǔ);
為了支持更快的開(kāi)發(fā)、迭代效率,近年來(lái)我們開(kāi)始了容器化改造,并開(kāi)始了擁抱 Kubernetes 生態(tài)、業(yè)務(wù)全量上云、Serverless 等工作。在這階段,日志無(wú)論從規(guī)模、種類都呈現(xiàn)爆炸式的增長(zhǎng),對(duì)日志進(jìn)行數(shù)字化、智能化分析的需求也越來(lái)越高,因此統(tǒng)一的日志平臺(tái)應(yīng)運(yùn)而生。
可觀察性的終極解讀
在 CNCF 中,可觀察性的主要作用是問(wèn)題的診斷,上升到公司整體層面,可觀察性(Observability)不僅僅包括 DevOps 領(lǐng)域,還包括業(yè)務(wù)、運(yùn)營(yíng)、BI、審計(jì)、安全等領(lǐng)域,可觀察性的最終的目標(biāo)是實(shí)現(xiàn)公司各個(gè)方面的數(shù)字化、智能化。
在阿里,幾乎所有的業(yè)務(wù)角色都會(huì)涉及到各式各樣的日志數(shù)據(jù),為了支撐各類應(yīng)用場(chǎng)景,我們開(kāi)發(fā)了非常多的工具和功能:日志實(shí)時(shí)分析、鏈路追蹤、監(jiān)控、數(shù)據(jù)加工、流計(jì)算、離線計(jì)算、BI 系統(tǒng)、審計(jì)系統(tǒng)等等。日志系統(tǒng)主要專注于數(shù)據(jù)的實(shí)時(shí)采集、清洗、智能分析與監(jiān)控以及對(duì)接各類各樣的流計(jì)算、離線系統(tǒng)。
Kubernetes 日志系統(tǒng)建設(shè)難點(diǎn)
單純?nèi)罩鞠到y(tǒng)的解決方案非常多,相對(duì)也比較成熟,這里就不再去贅述,我們此次只針對(duì) Kubernetes 上的日志系統(tǒng)建設(shè)而論。Kubernetes 上的日志方案相比我們之前基于物理機(jī)、虛擬機(jī)場(chǎng)景的日志方案有很大不同,例如:
日志的形式變得更加復(fù)雜,不僅有物理機(jī) / 虛擬機(jī)上的日志,還有容器的標(biāo)準(zhǔn)輸出、容器內(nèi)的文件、容器事件、Kubernetes 事件等等信息需要采集;
環(huán)境的動(dòng)態(tài)性變強(qiáng),在 Kubernetes 中,機(jī)器的宕機(jī)、下線、上線、Pod 銷毀、擴(kuò)容 / 縮容等都是常態(tài),這種情況下日志的存在是瞬時(shí)的(例如如果 Pod 銷毀后該 Pod 日志就不可見(jiàn)了),所以日志數(shù)據(jù)必須實(shí)時(shí)采集到服務(wù)端。同時(shí)還需要保證日志的采集能夠適應(yīng)這種動(dòng)態(tài)性極強(qiáng)的場(chǎng)景;
日志的種類變多,上圖是一個(gè)典型的 Kubernetes 架構(gòu),一個(gè)請(qǐng)求從客戶端需要經(jīng)過(guò) CDN、Ingress、Service Mesh、Pod 等多個(gè)組件,涉及多種基礎(chǔ)設(shè)施,其中的日志種類增加了很多,例如 K8s 各種系統(tǒng)組件日志、審計(jì)日志、ServiceMesh 日志、Ingress 等;
業(yè)務(wù)架構(gòu)變化,現(xiàn)在越來(lái)越多的公司開(kāi)始在 Kubernetes 上落地微服務(wù)架構(gòu),在微服務(wù)體系中,服務(wù)的開(kāi)發(fā)更加復(fù)雜,服務(wù)之間的依賴以及服務(wù)底層產(chǎn)品的依賴越來(lái)越多,這時(shí)的問(wèn)題排查將更加復(fù)雜,如果關(guān)聯(lián)各個(gè)維度的日志將是一個(gè)困難的問(wèn)題;
日志方案集成困難,通常我們都會(huì)在 Kubernetes 上搭建一套 CICD 系統(tǒng),這套 CICD 系統(tǒng)需要盡可能的自動(dòng)化的完成業(yè)務(wù)的集成和部署,其中日志的采集、存儲(chǔ)、清洗等也需要集成到這套系統(tǒng)中,并和 K8s 的聲明式部署方式盡可能一致。而現(xiàn)有的日志系統(tǒng)通常都是較獨(dú)立的系統(tǒng),集成到 CICD 中代價(jià)極大;
日志規(guī)模問(wèn)題,通常在系統(tǒng)初期的時(shí)候我們會(huì)選擇自建開(kāi)源的日志系統(tǒng),這種方式在測(cè)試驗(yàn)證階段或公司發(fā)展初期是沒(méi)有什么問(wèn)題的,但當(dāng)業(yè)務(wù)逐漸增長(zhǎng),日志量增長(zhǎng)到一定規(guī)模時(shí),自建的開(kāi)源系統(tǒng)很多時(shí)候都會(huì)遇到各種各樣的問(wèn)題,例如租戶隔離、查詢延遲、數(shù)據(jù)可靠性、系統(tǒng)可用性等。日志系統(tǒng)雖不是 IT 中最核心的路徑,但一旦關(guān)鍵時(shí)刻出現(xiàn)這些問(wèn)題都將是非常可怕的影響,例如大促的時(shí)候出現(xiàn)緊急問(wèn)題,排查時(shí)多個(gè)工程師并發(fā)查詢把日志系統(tǒng)打爆,導(dǎo)致故障恢復(fù)時(shí)間變長(zhǎng),大促收到影響。
上述就是丸趣 TV 小編為大家分享的 K8s 日志系統(tǒng)建設(shè)中的典型問(wèn)題有哪些了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。