阿里千萬實例可觀測采集器-iLogtail正式開源
11月23日,阿里正式開源可觀測數(shù)據(jù)采集器iLogtail。作為阿里內(nèi)部可觀測數(shù)據(jù)采集的基礎(chǔ)設(shè)施,iLogtail承載了阿里巴巴集團(tuán)、螞蟻的日志、監(jiān)控、Trace、事件等多種可觀測數(shù)據(jù)的采集工作。iLogtail運(yùn)行在服務(wù)器、容器、K8s、嵌入式等多種環(huán)境,支持采集數(shù)百種可觀測數(shù)據(jù),目前已經(jīng)有千萬級的安裝量,每天采集數(shù)十PB的可觀測數(shù)據(jù),廣泛應(yīng)用于線上監(jiān)控、問題分析/定位、運(yùn)營分析、安全分析等多種場景。
一. iLogtail與可觀測性
可觀測性并不是一個全新的概念,而是從IT系統(tǒng)中的監(jiān)控、問題排查、穩(wěn)定性建設(shè)、運(yùn)營分析、BI、安全分析等逐漸演化而來,可觀測性相比傳統(tǒng)監(jiān)控,最核心的演進(jìn)是盡可能多的收集各類可觀測數(shù)據(jù),來實現(xiàn)目標(biāo)的白盒化。而iLogtail的核心定位就是可觀測數(shù)據(jù)的采集器,能夠盡可能多的采集各類可觀測性數(shù)據(jù),助力可觀測平臺打造各種上層的應(yīng)用場景。
二. 阿里可觀測數(shù)據(jù)采集的挑戰(zhàn)
對于可觀測數(shù)據(jù)的采集,有很多開源的Agent,例如Logstash、Filebeats、Fluentd、Collectd、Telegraf等。這些Agent的功能非常豐富,使用這些Agent的組合再進(jìn)行一定的擴(kuò)展,基本可以滿足內(nèi)部各類數(shù)據(jù)的采集需求。但由于一些性能、穩(wěn)定性、管控能力等關(guān)鍵性的挑戰(zhàn)無法滿足,最終我們還是選擇自研:
1、資源消耗:目前阿里內(nèi)部有數(shù)百萬的主機(jī)(物理機(jī)/虛擬機(jī)/容器),每天會產(chǎn)生幾十PB的可觀測數(shù)據(jù),每1M的內(nèi)存減少、每1M/s的性能提升對于我們的資源節(jié)省都是巨大的,帶來的成本節(jié)約可能是數(shù)百萬甚至上千萬。目前眾多開源Agent的設(shè)計更多的是偏重功能而非性能,基于現(xiàn)有開源Agent改造基本不可行。例如:
- 開源Agent普遍單核處理性能在2-10M/s左右,而我們希望有一個能達(dá)到100M/s的性能
- 在采集目標(biāo)增加、數(shù)據(jù)量增加、采集延遲、服務(wù)端異常等情況下,開源Agent內(nèi)存都會呈現(xiàn)爆炸式增長,而我們希望即使在各種環(huán)境下,內(nèi)存也能處在較低的水位
- 開源Agent的資源消耗沒辦法控制,只能通過cgroup強(qiáng)行限制,最終的效果就是不斷OOM,不斷重啟,數(shù)據(jù)一直采集不上來。而我們希望在指定一個CPU、內(nèi)存、流量等資源限制后,Agent能一直在這個限制范圍內(nèi)正常工作
2、穩(wěn)定性:穩(wěn)定性是永恒的話題,數(shù)據(jù)采集的穩(wěn)定性,除了保證數(shù)據(jù)本身采集的準(zhǔn)確性外,還需要保證采集的Agent不能影響業(yè)務(wù)應(yīng)用,否則帶來的影響將是災(zāi)難性的。而穩(wěn)定性建設(shè),除了Agent自身的基礎(chǔ)穩(wěn)定性外,還有很多特性目前開源的Agent還沒有提供:
- Agent自恢復(fù):Agent遇到Critical的事件后能夠自動恢復(fù),并且提供多個維度的自恢復(fù)能力,例如進(jìn)程自身、父子進(jìn)程、守護(hù)進(jìn)程
- 全局的多維度監(jiān)控:能夠從全局的角度監(jiān)控各個不同版本、不同采集配置、不同壓力、不同地域/網(wǎng)絡(luò)等屬性的Agent的穩(wěn)定性問題
- 問題隔離:作為Agent,無論怎樣出現(xiàn)問題,都需要盡可能的隔離問題,例如一個Agent上有多個采集配置,一個配置出問題,不能影響其他配置;Agent自身出現(xiàn)問題,不能影響機(jī)器上的應(yīng)用進(jìn)程的穩(wěn)定性
- 回滾能力:版本更新和發(fā)布是再所難免的問題,在出現(xiàn)問題的時候如何快速回滾,而且保證出問題和回滾期間的數(shù)據(jù)采集還是at least once甚至是exactly once。
3、可管控:可觀測數(shù)據(jù)的應(yīng)用范圍非常的廣,幾乎所有的業(yè)務(wù)、運(yùn)維、BI、安全等部門都會要用,而一臺機(jī)器上也會產(chǎn)生各種數(shù)據(jù),同一臺機(jī)器產(chǎn)生的數(shù)據(jù)上也會有多個部門的人要去使用,例如在2018年我們統(tǒng)計,平均一臺虛擬機(jī)上有100多個不同類型的數(shù)據(jù)需要采集,設(shè)計10多個不同部門的人要去使用這些數(shù)據(jù)。除了這些之外,還會有其他很多企業(yè)級的特性需要支持,例如:
- 配置的遠(yuǎn)程管理:在大規(guī)模場景下,手工登錄機(jī)器修改配置基本沒有可行性,因此需要一套配置的圖形化管理、遠(yuǎn)程存儲、自動下發(fā)的機(jī)制,而且還要能夠區(qū)分不同的應(yīng)用、不同的Region、不同的歸屬方等信息。同時因為涉及到遠(yuǎn)程配置的動態(tài)加卸載,Agent還需要能夠保證配置Reload期間數(shù)據(jù)不丟不重
- 采集配置優(yōu)先級:當(dāng)一臺機(jī)器上有多個采集配置在運(yùn)行時,如果遇到資源不足的情況,需要區(qū)分每個不同的配置優(yōu)先級,資源優(yōu)先供給高優(yōu)先級的配置,同時還要確保低優(yōu)先級的配置不被“餓死”
- 降級與恢復(fù)能力:在阿里,大促、秒殺是家常便飯,在這種波峰期間,可能有很多不重要的應(yīng)用被降級,同樣對應(yīng)應(yīng)用的數(shù)據(jù)也需要降級,降級后,在凌晨波峰過后,還需要有足夠的Burst能力快速追齊數(shù)據(jù)
- 數(shù)據(jù)采集齊全度:監(jiān)控、數(shù)據(jù)分析等場景都要求數(shù)據(jù)準(zhǔn)確度,數(shù)據(jù)準(zhǔn)確的前提是都能及時采集到服務(wù)端,但如何在計算前確定每臺機(jī)器、每個文件的數(shù)據(jù)都采集到了對應(yīng)的時間點,需要一套非常復(fù)雜的機(jī)制去計算
基于以上的背景和挑戰(zhàn)下,我們從2013年開始,不斷逐漸優(yōu)化和改進(jìn)iLogtail來解決性能、穩(wěn)定性、可管控等問題,并經(jīng)歷了阿里多次雙十一、雙十二、春晚紅包等項目的考驗。目前iLogtail支持包括Logs、Traces、Metrics多種類型數(shù)據(jù)的統(tǒng)一收集,核心的特點主要如下:
- 支持多種Logs、Traces、Metrics數(shù)據(jù)采集,尤其對容器、Kubernetes環(huán)境支持非常友好
- 數(shù)據(jù)采集資源消耗極低,單核采集能力100M/s,相比同類可觀測數(shù)據(jù)采集的Agent性能好5-20倍
- 高穩(wěn)定性,在阿里巴巴以及數(shù)萬阿里云客戶生產(chǎn)中使用驗證,部署量近千萬,每天采集數(shù)十PB可觀測數(shù)據(jù)
- 支持插件化擴(kuò)展,可任意擴(kuò)充數(shù)據(jù)采集、處理、聚合、發(fā)送模塊
- 支持配置遠(yuǎn)程管理,支持以圖形化、SDK、K8s Operator等方式進(jìn)行配置管理,可輕松管理百萬臺機(jī)器的數(shù)據(jù)采集
- 支持自監(jiān)控、流量控制、資源控制、主動告警、采集統(tǒng)計等多種高級管控特性
三. iLogtail發(fā)展歷程
秉承著阿里人簡單的特點,iLogtail的命名也非常簡單,我們最開始期望的就是能夠有一個統(tǒng)一去Tail日志的工具,所以就叫做Logtail,添加上“i”的原因主要當(dāng)時使用了inotify的技術(shù),能夠讓日志采集的延遲控制在毫秒級,因此最后叫做iLogtail。從2013年開始研發(fā),iLogtail整個發(fā)展歷程概括起來大致可以分為三個階段,分別是飛天5K階段、阿里集團(tuán)階段和云原生階段。
1.飛天5K階段
作為中國云計算領(lǐng)域的里程碑,2013年8月15日,阿里巴巴集團(tuán)正式運(yùn)營服務(wù)器規(guī)模達(dá)到5000(5K)的“飛天”集群,成為中國第一個獨(dú)立研發(fā)擁有大規(guī)模通用計算平臺的公司,也是世界上第一個對外提供5K云計算服務(wù)能力的公司。
飛天5K項目從2009年開始,從最開始的30臺逐漸發(fā)展到5000,不斷解決系統(tǒng)核心的問題,比如說規(guī)模、穩(wěn)定性、運(yùn)維、容災(zāi)等等。而iLogtail在這一階段誕生,最開始就是要解決5000臺機(jī)器的監(jiān)控、問題分析、定位的工作(如今的詞語叫做“可觀測性”)。從30到5000的躍升中,對于可觀測問題有著諸多的挑戰(zhàn),包括單機(jī)瓶頸、問題復(fù)雜度、排查便捷性、管理復(fù)雜度等。
在5K階段,iLogtail本質(zhì)上解決的是從單機(jī)、小規(guī)模集群到大規(guī)模的運(yùn)維監(jiān)控挑戰(zhàn),這一階段iLogtail主要的特點有:
- 功能:實時日志、監(jiān)控采集,日志抓取延遲毫秒級
- 性能:單核處理能力10M/s,5000臺集群平均資源占用0.5%CPU核
- 可靠性:自動監(jiān)聽新文件、新文件夾,支持文件輪轉(zhuǎn),處理網(wǎng)絡(luò)中斷
- 管理:遠(yuǎn)程Web管理,配置文件自動下發(fā)
- 運(yùn)維:加入集團(tuán)yum源,運(yùn)行狀態(tài)監(jiān)控,異常自動上報
- 規(guī)模:3W+部署規(guī)模,上千采集配置項,日10TB數(shù)據(jù)
2. 阿里集團(tuán)階段
iLogtail在阿里云飛天5K項目中的應(yīng)用解決了日志、監(jiān)控統(tǒng)一收集的問題,而當(dāng)時阿里巴巴集團(tuán)、螞蟻等還缺少一套統(tǒng)一、可靠的日志采集系統(tǒng),因此我們開始推動iLogtail作為集團(tuán)、螞蟻的日志采集基礎(chǔ)設(shè)施。從5K這種相對獨(dú)立的項目到全集團(tuán)應(yīng)用,不是簡單復(fù)制的問題,而我們要面對的是更多的部署量、更高的要求以及更多的部門:
- 百萬規(guī)模運(yùn)維問題:此時整個阿里、螞蟻的物理機(jī)、虛擬機(jī)超過百萬臺,我們希望只用1/3的人力就可以運(yùn)維管理百萬規(guī)模的Logtail
- 更高的穩(wěn)定性:iLogtail最開始采集的數(shù)據(jù)主要用于問題排查,集團(tuán)廣泛的應(yīng)用場景對于日志可靠性要求越來越高,例如計費(fèi)計量數(shù)據(jù)、交易數(shù)據(jù),而且還需要滿足雙十一、雙十二等超大數(shù)據(jù)流量的壓力考驗。
- 多部門、團(tuán)隊:從服務(wù)5K團(tuán)隊到近千個團(tuán)隊,會有不同的團(tuán)隊使用不同的iLogtail,而一個iLogtail也會被多個不同的團(tuán)隊使用,在租戶隔離上對iLogtail是一個新的挑戰(zhàn)。
經(jīng)過幾年時間和阿里集團(tuán)、螞蟻同學(xué)的合作打磨,iLogtail在多租戶、穩(wěn)定性等方面取得了非常大的進(jìn)步,這一階段iLogtail主要的特點有:
- 功能:支持更多的日志格式,例如正則、分隔符、JSON等,支持多種日志編碼方式,支持?jǐn)?shù)據(jù)過濾、脫敏等高級處理
- 性能:極簡模式下提升到單核100M/s,正則、分隔符、JSON等方式20M/s+
- 可靠性:采集可靠性支持Polling、輪轉(zhuǎn)隊列順序保證、日志清理保護(hù)、CheckPoint增強(qiáng);進(jìn)程可靠性增加Critical自恢復(fù)、Crash自動上報、多級守護(hù)
日志保序采集方案原理(細(xì)節(jié)可參考《iLogtail技術(shù)分享(一) : Polling + Inotify 組合下的日志保序采集方案》)
- 多租戶:支持全流程多租戶隔離、多級高低水位隊列、采集優(yōu)先級、配置級/進(jìn)程級流量控制、臨時降級機(jī)制
多租戶隔離整體流程(細(xì)節(jié)可參考《iLogtail技術(shù)分享(二):多租戶隔離技術(shù)+雙十一實戰(zhàn)效果》)
- 運(yùn)維:基于集團(tuán)StarAgent自動安裝與守護(hù),異常主動通知,提供多種問題自查工具
- 規(guī)模:百萬+部署規(guī)模,千級別內(nèi)部租戶,10萬+采集配置,日采集PB級數(shù)據(jù)
3.云原生階段
隨著阿里所有IT基礎(chǔ)設(shè)施全面云化,以及iLogtail所屬產(chǎn)品SLS(日志服務(wù))正式在阿里云上商業(yè)化,iLogtail開始全面擁抱云原生。從阿里內(nèi)部商業(yè)化并對外部各行各業(yè)的公司提供服務(wù),對于iLogtail的挑戰(zhàn)的重心已經(jīng)不是性能和可靠性,而是如何適應(yīng)云原生(容器化、K8s,適應(yīng)云上環(huán)境)、如何兼容開源協(xié)議、如何去處理碎片化需求。這一階段是iLogtail發(fā)展最快的時期,經(jīng)歷了非常多重要的變革:
- 統(tǒng)一版本:iLogtail最開始的版本還是基于GCC4.1.2編譯,代碼還依賴飛天基座,為了能適用更多的環(huán)境,iLogtail進(jìn)行了全版本的重構(gòu),基于一套代碼實現(xiàn)Windows/Linux、X86/Arm、服務(wù)器/嵌入式等多種環(huán)境的編譯發(fā)版
- 全面支持容器化、K8s:除了支持容器、K8s環(huán)境的日志、監(jiān)控采集外,對于配置管理也進(jìn)行了升級,支持通過Operator的方式進(jìn)行擴(kuò)展,只需要配置一個AliyunLogConfig的K8s自定義資源就可以實現(xiàn)日志、監(jiān)控的采集
iLogtail Kubernetes日志采集原理(細(xì)節(jié)可參考《Kubernetes日志采集原理剖析》)
- 插件化擴(kuò)展:iLogtail增加插件系統(tǒng),可自由擴(kuò)展Input、Processor、Aggregator、Flusher插件用以實現(xiàn)各類自定義的功能
iLogtail插件系統(tǒng)整體流程(細(xì)節(jié)可參考《iLogtail插件系統(tǒng)簡介》)
- 規(guī)模:千萬部署規(guī)模,數(shù)萬內(nèi)外部客戶,百萬+采集配置項,日采集數(shù)十PB數(shù)據(jù)
四.開源背景與期待
閉源自建的軟件永遠(yuǎn)無法緊跟時代潮流,尤其在當(dāng)今云原生的時代,我們堅信開源才是iLogtail最優(yōu)的發(fā)展策略,也是釋放其最大價值的方法。iLogtail作為可觀測領(lǐng)域最基礎(chǔ)的軟件,我們將之開源,也希望能夠和開源社區(qū)一起共建,持續(xù)優(yōu)化,爭取成為世界一流的可觀測數(shù)據(jù)采集器。對于未來iLogail的發(fā)展,我們期待:
- iLogtail在性能和資源占用上相比其他開源采集軟件具備一定優(yōu)勢,相比開源軟件,在千萬部署規(guī)模、日數(shù)十PB數(shù)據(jù)的規(guī)模性下為我們減少了100TB的內(nèi)存和每年1億的CPU核小時數(shù)。我們也希望這款采集軟件可以為更多的企業(yè)帶來資源效率的提升,實現(xiàn)可觀測數(shù)據(jù)采集的“共同富裕”。
- 目前iLogtail還只是在阿里內(nèi)部以及很小一部分云上企業(yè)(雖然有幾萬家,但是面對全球千萬的企業(yè),這個數(shù)字還很小),面對的場景相對還較少,我們希望有更多不同行業(yè)、不同特色的公司可以使用iLogtail并對其提出更多的數(shù)據(jù)源、處理、輸出目標(biāo)的需求,豐富iLogtail支持的上下游生態(tài)。
- 性能、穩(wěn)定性是iLogtail的最基本追求,我們也希望能夠通過開源社區(qū),吸引更多優(yōu)秀的開發(fā)者,一起共建iLogtail,持續(xù)提升這款可觀測數(shù)據(jù)采集器的性能和穩(wěn)定性。
鏈接匯總:
1)阿里正式開源可觀測數(shù)據(jù)采集器iLogtail:https://github.com/alibaba/ilogtail
2)《iLogtail技術(shù)分享(一) : Polling + Inotify 組合下的日志保序采集方案》:https://zhuanlan.zhihu.com/p/29303600
3)《iLogtail技術(shù)分享(二):多租戶隔離技術(shù)+雙十一實戰(zhàn)效果》:https://www.sohu.com/a/205324880_465959
4)《Kubernetes日志采集原理剖析》:https://developer.aliyun.com/article/806369
5)《iLogtail插件系統(tǒng)簡介》:https://github.com/alibaba/ilogtail/blob/main/docs/zh/concept%26designs/Overview.md