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