上一篇中我們介紹了為什么需要一個日志系統(tǒng)、為什么云原生下的日志系統(tǒng)如此重要以及云原生下日志系統(tǒng)的建設難點,相信DevOps、SRE、運維等同學看了是深有體會的。本篇文章單刀直入,會直接跟大家分享一下如何在云原生的場景下搭建一個靈活、功能強大、可靠、可擴容的日志系統(tǒng)。
從策劃到設計制作,每一步都追求做到細膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供成都網(wǎng)站設計、網(wǎng)站建設、網(wǎng)站策劃、網(wǎng)頁設計、申請域名、虛擬主機、網(wǎng)絡營銷、VI設計、 網(wǎng)站改版、漏洞修補等服務。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進步。
需求驅(qū)動架構(gòu)設計
技術(shù)架構(gòu),是將產(chǎn)品需求轉(zhuǎn)變?yōu)榧夹g(shù)實現(xiàn)的過程。對于所有的架構(gòu)師而言,能夠?qū)a(chǎn)品需求分析透徹是非?;疽彩欠浅V匾囊稽c。很多系統(tǒng)剛建成沒多久就要被推翻,最根本的原因還是沒有解決好產(chǎn)品真正的需求。
我所在的日志服務團隊在日志這塊有近10年的經(jīng)驗,幾乎服務阿里內(nèi)部所有的團隊,涉及電商、支付、物流、云計算、游戲、即時通訊、IoT等領域,多年來的產(chǎn)品功能的優(yōu)化和迭代都是基于各個團隊的日志需求變化。
有幸我們最近幾年在阿里云上實現(xiàn)了產(chǎn)品化,服務了數(shù)以萬計的企業(yè)用戶,包括國內(nèi)各大直播類、短視頻、新聞媒體、游戲等行業(yè)Top1互聯(lián)網(wǎng)客戶。產(chǎn)品功能從服務一個公司到服務上萬家公司會有質(zhì)的差別,上云促使我們更加深入的去思考:究竟哪些功能是日志這個平臺需要去為用戶去解決的,日志最核心的訴求是什么,如何去滿足各行各業(yè)、各種不同業(yè)務角色的需求...
需求分解與功能設計
上一節(jié)中我們分析了公司內(nèi)各個不同角色對于日志的相關(guān)需求,總結(jié)起來有以下幾點:
- 支持各種日志格式、數(shù)據(jù)源的采集,包括非K8s
- 能夠快速的查找/定位問題日志
- 能夠?qū)⒏鞣N格式的半結(jié)構(gòu)化/非結(jié)構(gòu)化日志格式化,并支持快速的統(tǒng)計分析、可視化
- 支持通過日志進行實時計算并獲得一些業(yè)務指標,并支持基于業(yè)務指標實時的告警(其實本質(zhì)就是APM)
- 支持對于超大規(guī)模的日志進行各種維度的關(guān)聯(lián)分析,可接受一定時間的延遲
- 能夠便捷的對接各種外部系統(tǒng)或支持自定義的獲取數(shù)據(jù),例如對接第三方審計系統(tǒng)
- 能夠基于日志以及相關(guān)的時序信息,實現(xiàn)智能的告警、預測、根因分析等,并能夠支持自定義的離線訓練方式以獲得更好的效果
為滿足上述這些功能需求,日志平臺上必須具備的功能功能模塊有:
- 全方位日志采集,支持DaemonSet、Sidecar各種采集方式以應對不同的采集需求,同時支持Web、移動端、IoT、物理機/虛擬機各種數(shù)據(jù)源的采集;
- 日志實時通道,這個是為了對接上下游所必備的功能,保證日志能夠被多種系統(tǒng)所便捷的使用;
- 數(shù)據(jù)清洗(ETL: Extract,Transform,Load),對各種格式的日志進行清洗,支持過濾、富化、轉(zhuǎn)換、補漏、分裂、聚合等;
- 日志展現(xiàn)與搜索,這是所有日志平臺必須具備的功能,能夠根據(jù)關(guān)鍵詞快速的定位到日志并查看日志上下文,看似簡單的功能卻最難做好;
- 實時分析,搜索只能完成一些定位到問題,而分析統(tǒng)計功能可以幫助快速分析問題的根因,同時可以用于快速的計算一些業(yè)務指標;
- 流計算,通常我們都會使用流計算框架(Flink、Storm、Spark Stream等)來計算一些實時的指標或?qū)?shù)據(jù)進行一些自定義的清洗等;
- 離線分析,運營、安全相關(guān)的需求都需要對大量的歷史日志進行各種維度的關(guān)聯(lián)計算,目前只有T+1的離線分析引擎能夠完成;
- 機器學習框架,能夠便捷、快速的將歷史的日志對接到機器學習框架進行離線訓練,并將訓練后的結(jié)果加載到線上實時的算法庫中。
開源方案設計
cdn.com/ca9654af34388e612fb46c6ea67b269d3ae7e89f.png">
借助于強大的開源社區(qū),我們可以很容易基于開源軟件的組合來實現(xiàn)這樣一套日志平臺,上圖是一個非常典型的以ELK為核心的日志平臺方案:
- 利用FileBeats、Fluentd等采集Agent實現(xiàn)容器上的數(shù)據(jù)統(tǒng)一收集。
- 為了提供更加豐富的上下游以及緩沖能力,可以使用kafka作為數(shù)據(jù)采集的接收端。
- 采集到的原始數(shù)據(jù)還需要進一步的清洗,可以使用Logstash或者Flink訂閱Kafka中的數(shù)據(jù),清洗完畢后再寫入kafka中。
- 清洗后的數(shù)據(jù)可以對接ElasticSearch來做實時的查詢檢索、對接Flink來計算實時的指標和告警、對接Hadoop來做離線的數(shù)據(jù)分析、對接TensorFlow來做離線模型訓練。
- 數(shù)據(jù)的可視化可以使用grafana、kibana等常用的可視化組件。
為什么我們選擇自研
采用開源軟件的組合是非常高效的方案,得益于強大的開源社區(qū)以及龐大用戶群體的經(jīng)驗積累,我們可以很快搭建出這樣一套系統(tǒng),并且可以滿足我們絕大部分的需求。
當我們把這套系統(tǒng)部署好,能夠把日志從容器上采集上來、elasticsearch上能夠查到、Hadoop上能夠成功執(zhí)行SQL、Grafana上能看到圖、告警短信能收到......完成上述流程打通后,加加班可能只需要花費幾天的時間,當系統(tǒng)終于跑通的時候,這時候終于可以長舒一口氣,躺在辦公椅上放松放松。
然而理想很豐滿現(xiàn)實很骨感,當我們預發(fā)通了,測試完了上到生產(chǎn),開始接入第一個應用,逐漸更多的應用接入,越來越多的人開始使用......這時候很多問題都可能暴露出來:
- 隨著業(yè)務量的上漲,日志量也越來越大,Kakfa和ES要不斷擴容,同時同步Kafka到ES的Connector也需要擴容,最煩的是采集Agent,每臺機器上部署的DaemonSet Fluentd根本沒辦法擴容,到了單Agent瓶頸就沒辦法了,只能換Sidecar,換Sidecar工作量大不說,還會帶來一系列其他的問題,比如怎么和CICD系統(tǒng)集成、資源消耗、配置規(guī)劃、stdout采集不支持等等。
- 從剛開始上的邊緣業(yè)務,慢慢更多的核心業(yè)務接入,對于日志的可靠性要求越來越高,經(jīng)常有研發(fā)反應從ES上查不到數(shù)據(jù)、運營說統(tǒng)計出來的報表不準、安全說拿到的數(shù)據(jù)不是實時的......每次問題的排查都要經(jīng)過采集、隊列、清洗、傳輸?shù)鹊确浅6嗟穆窂?,排查代價非常高。同時還要為日志系統(tǒng)搭建一套監(jiān)控方案,能夠即時發(fā)現(xiàn)問題,而且這套方案還不能基于日志系統(tǒng),不能自依賴。
- 當越來越多的開發(fā)開始用日志平臺調(diào)查問題時,經(jīng)常會出現(xiàn)因為某1-2個人提交一個大的查詢,導致系統(tǒng)整體負載上升,其他人的查詢都會被Block,甚至出現(xiàn)Full GC等情況。這時候一些大能力的公司會對ES進行改造,來支持多租戶隔離;或者為不同的業(yè)務部門搭建不同的ES集群,最后又要運維多個ES集群,工作量還是很大。
- 當投入了很多人力,終于能夠把日志平臺維持日常使用,這時候公司財務找過來了,說我們用了非常多的機器,成本太大。這時候開始要優(yōu)化成本,但是思來想去就是需要這么多臺機器,每天大部分的機器水位都在20%-30%,但是高峰的水位可能到70%,所以不能撤,撤了高峰頂不住,這時候只能搞搞削峰填谷,又是一堆工作量。
上述這些是一家中等規(guī)模的互聯(lián)網(wǎng)企業(yè)在日志平臺建設中經(jīng)常會遇到的問題,在阿里這些問題會放大非常多倍:
- 比如面對雙十一的流量,市面上所有的開源軟件都無法滿足我們那么大流量的需求。
- 面對阿里內(nèi)部上萬個業(yè)務應用,幾千名工程師同時使用,并發(fā)和多租戶隔離我們必須要做到極致。
- 面對非常多核心的訂單、交易等場景,整個鏈路的穩(wěn)定性必須要求3個9甚至4個9的可用性。
- 每天如此大的數(shù)據(jù)量,對于成本的優(yōu)化顯得極為重要,10%的成本優(yōu)化帶來的收益可能就有上億。
阿里K8s日志方案
針對上述的一些問題,我們經(jīng)過多年的時間,開發(fā)并打磨出這樣一套K8s日志方案:
- 使用我們自研的日志采集Agent Logtail實現(xiàn)K8s全方位的數(shù)據(jù)采集,目前Logtail在集團內(nèi)有數(shù)百萬的全量部署,性能、穩(wěn)定性經(jīng)過多次雙十一金融級考驗。
- 化繁為簡,數(shù)據(jù)隊列、清洗加工、實時檢索、實時分析、AI算法等原生集成,而不是基于各種開源軟件搭積木的形式實,大大降低了數(shù)據(jù)鏈路長度,鏈路長度的降低也意味著出錯可能性的減少。
- 隊列、清洗加工、檢索、分析、AI引擎等全部針對日志場景深度定制優(yōu)化,滿足大吞吐、動態(tài)擴容、億級日志秒級可查、低成本、高可用性等需求。
- 對于流式計算、離線分析場景這種通用需求,無論是開源還是阿里內(nèi)部都有非常成熟的產(chǎn)品,我們通過無縫對接的方式來支持,目前日志服務支持了數(shù)十種下游的開源、云上產(chǎn)品的對接。
這套系統(tǒng)目前支撐了整個阿里集團、螞蟻集團、云上上萬家企業(yè)的日志分析,每天寫入的數(shù)據(jù)量16PB+,開發(fā)、運維這樣一套系統(tǒng)問題和挑戰(zhàn)非常多,這里就不再展開,有興趣的同學可以參考我們團隊的技術(shù)分享:阿里10PB/天日志系統(tǒng)設計和實現(xiàn)。
總結(jié)
本篇主要從架構(gòu)層面去介紹如何搭建一套K8s的日志分析平臺,包括開源方案以及我們阿里自研的一套方案。然而實際這套系統(tǒng)落地到生產(chǎn)環(huán)境并有效運行還有很多工作要做:
- K8s上以什么樣的姿勢來打日志?
- K8s上的日志采集方案選擇,DaemonSet or Sidecar?
- 日志方案如何與CICD去集成?
- 微服務下各個應用的日志存儲如何劃分?
- 如何基于K8s系統(tǒng)的日志去做K8s監(jiān)控?
- 如何去監(jiān)控日志平臺的可靠性?
- 如何去對多個微服務/組件去做自動的巡檢?
- 如何自動的監(jiān)控多個站點并實現(xiàn)流量異常時的快速定位?
后續(xù)文章我們會一步一步來和大家分享如何把這套系統(tǒng)落地,敬請期待。
“ 阿里巴巴云原生微信公眾號(ID:Alicloudnative)關(guān)注微服務、Serverless、容器、Service Mesh等技術(shù)領域、聚焦云原生流行技術(shù)趨勢、云原生大規(guī)模的落地實踐,做最懂云原生開發(fā)者的技術(shù)公眾號?!?/p>
新聞名稱:一文看懂K8s日志系統(tǒng)設計和實踐
網(wǎng)頁地址:http://www.rwnh.cn/article10/jscego.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供建站公司、商城網(wǎng)站、網(wǎng)站建設、用戶體驗、App設計、定制網(wǎng)站
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源:
創(chuàng)新互聯(lián)