四川中電啟明星信息技術(shù)有限公司 隆 振 張 捷
日志平臺(tái)系統(tǒng)在這樣的背景下孕育而生,它是一個(gè)集日志采集、結(jié)構(gòu)化、索引、分析、展現(xiàn)于一體的平臺(tái)系統(tǒng),極大簡(jiǎn)化運(yùn)維人員的日常工作,提高工作效率,使得相關(guān)人員能夠很快的定位故障點(diǎn)并進(jìn)行問(wèn)題處理。同時(shí),通過(guò)日志平臺(tái)定制日志分析規(guī)則、利用定時(shí)任務(wù)對(duì)系統(tǒng)定時(shí)分析統(tǒng)計(jì),生成報(bào)表和告警信息。實(shí)現(xiàn)對(duì)應(yīng)用系統(tǒng)及相關(guān)設(shè)備的自動(dòng)化監(jiān)控與預(yù)警。
日志平臺(tái)系統(tǒng)由采集層、處理層、存儲(chǔ)層、服務(wù)層及展示層5部分構(gòu)成構(gòu)成。
采集層支持多種Agent采集,支持Filebeat、JDBC、 RPC、Syslog等方式的數(shù)據(jù)采集。
(1)Filebeat
Filebeat 是一個(gè)日志文件托運(yùn)工具,其十分輕量,并且十分穩(wěn)定。Filebeat會(huì)監(jiān)控日志目錄或者制定的日志文件,追蹤讀取這些文件(追蹤文件的變化,持續(xù)讀取),并轉(zhuǎn)發(fā)到指定的output。
(2)JDBC
基于Apache Flume框架實(shí)現(xiàn),主要通過(guò)周期性的執(zhí)行查詢(xún)語(yǔ)句,從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),并加以包裝處理后,發(fā)送到指定的位置。
(3)RPC
RPC(Remote Procedure Call),即遠(yuǎn)程過(guò)程調(diào)用,實(shí)現(xiàn)包括服務(wù)消費(fèi)者(即服務(wù)調(diào)用者)和服務(wù)提供者。一次RPC 的調(diào)用過(guò)程為:服務(wù)調(diào)用方調(diào)用RPC 請(qǐng)求到服務(wù)方,服務(wù)提供方根據(jù)調(diào)用方提供的參數(shù)執(zhí)行請(qǐng)求方法,將執(zhí)行結(jié)果返回給調(diào)用方。
(4)syslog
Unix/Linux系統(tǒng)中的大部分日志都是通過(guò)一種叫做syslog的機(jī)制產(chǎn)生和維護(hù)的。syslog是一種標(biāo)準(zhǔn)的協(xié)議,分為客戶端和服務(wù)器端,客戶端是產(chǎn)生日志消息的一方,而服務(wù)器端負(fù)責(zé)接收客戶端發(fā)送來(lái)的日志消息,并做出保存到特定的日志文件中或者其他方式的處理。
處理層利用Nginx反向代理實(shí)現(xiàn)不信任數(shù)據(jù)過(guò)濾,并將多個(gè)收集器組合在一起,統(tǒng)一收集采集端發(fā)送來(lái)的數(shù)據(jù),收集的數(shù)據(jù)被送至Kafka,Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),收集端生產(chǎn)的數(shù)據(jù)可以配置多個(gè)消費(fèi)者,完整的消費(fèi)。同時(shí),當(dāng)數(shù)據(jù)處理量不斷擴(kuò)大時(shí)也可以非常方便的進(jìn)行橫向擴(kuò)展。
在日志平臺(tái)系統(tǒng)中日志信息通過(guò)處理,可消費(fèi)保存到HDFS、ElasticSearch及實(shí)時(shí)計(jì)算框架spark streaming/stome等。
日志平臺(tái)系統(tǒng)使用HDFS和ElasticSearch來(lái)進(jìn)行日志信息進(jìn)行存儲(chǔ)。HDFS上存儲(chǔ)日志原文,用于歸檔。ElasticSearch則存儲(chǔ)日志信息的索引,用于提供準(zhǔn)實(shí)時(shí)的索引服務(wù)。隨著ElasticSearch上存儲(chǔ)的數(shù)據(jù)越來(lái)越多,也會(huì)將時(shí)間相對(duì)久遠(yuǎn)的索引信息遷移到HDFS上進(jìn)行歸檔保存。
服務(wù)層提供日志信息的準(zhǔn)實(shí)時(shí)檢索服務(wù)、實(shí)時(shí)計(jì)算服務(wù)及離線計(jì)算服務(wù)三大服務(wù)
(1)準(zhǔn)實(shí)時(shí)檢索服務(wù)
準(zhǔn)實(shí)時(shí)檢索主要服務(wù)于技術(shù)人員對(duì)日志的分析,也適用于一些對(duì)實(shí)時(shí)性要求不太高的統(tǒng)計(jì)計(jì)算。檢索基于ElasticSearch的全文檢索及統(tǒng)計(jì)功能,其中全文檢索提供基礎(chǔ)語(yǔ)法、SQL語(yǔ)法、DSL語(yǔ)法三種方式的數(shù)據(jù)檢索,方便用戶定位數(shù)據(jù),統(tǒng)計(jì)功能提供基于時(shí)間分段、字段統(tǒng)計(jì)、數(shù)值分段、時(shí)間直立方等聚合查詢(xún)服務(wù)。
(2)實(shí)時(shí)計(jì)算服務(wù)
對(duì)實(shí)時(shí)性要求非常高的數(shù)據(jù)查詢(xún)統(tǒng)計(jì)需求,采用spark streaming/stome框架,對(duì)數(shù)據(jù)進(jìn)行處理,實(shí)現(xiàn)日志數(shù)據(jù)查詢(xún)分析的秒級(jí)響應(yīng)。
(3)離線計(jì)算服務(wù)
對(duì)于日志數(shù)據(jù)量特別大歷史數(shù)據(jù),采用MapReduces進(jìn)行離線計(jì)算,并將計(jì)算結(jié)果存入ElasticSearch、HDFS,方便查看。
展示層包含系統(tǒng)配置、日志接入配置等管理用戶界面和日志檢索統(tǒng)計(jì)、告警、任務(wù)、報(bào)表功能普通用戶界面。
(1)管理用戶界面
實(shí)現(xiàn)對(duì)系統(tǒng)權(quán)限培訓(xùn)、日志接入配置、采集Agent監(jiān)控、ealasticsearch索引管理、消息中間件管理等。實(shí)現(xiàn)日志接入配置、日志采集處理組件監(jiān)控、節(jié)點(diǎn)擴(kuò)展優(yōu)化的管理功能。
在本系統(tǒng)中,Agent的連續(xù)通信時(shí)間間隔以曲線圖的形式持續(xù)更新。計(jì)算公式為 timestamp(本次)-timestamp(臨近的上一次)。理論上時(shí)間間隔應(yīng)該保持為一條直線,如果出現(xiàn)劇烈波動(dòng),如變大,可能存在網(wǎng)絡(luò)異常,間隔大,變小,則可能出現(xiàn)日志量陡增,需要考慮是否添加處理節(jié)點(diǎn),平衡分擔(dān)數(shù)據(jù)處理。
系統(tǒng)允許在沒(méi)有定義解析規(guī)則的情況下,就開(kāi)始介入日志。日志以原文的形式,索引到ElasticSearch中。而后針對(duì)具體的日志內(nèi)容,制定具體的解析規(guī)則。日志解析的粒度跟日志的格式,及定義的解析規(guī)則密切相關(guān)。在定義解析規(guī)則后,即可將規(guī)則應(yīng)用到處理端,經(jīng)過(guò)一定的緩存時(shí)間后,解析規(guī)則就會(huì)生效,接下來(lái)接入的日志便可按照解析的規(guī)則提取生成字段。
(2)普通用戶界面
提供日志全文檢索及日志分析統(tǒng)計(jì)功能:其中全文檢索提供三種查詢(xún)語(yǔ)法,包括基礎(chǔ)語(yǔ)法、SQL語(yǔ)法、DSL語(yǔ)法?;A(chǔ)語(yǔ)法支持模糊匹配、正則表達(dá)式、通配符、短語(yǔ)等查詢(xún)方式;SQL語(yǔ)法支持基本的列表查詢(xún)、聚合查詢(xún)以及兩個(gè)查詢(xún)對(duì)象的join、union、minus三種關(guān)聯(lián)查詢(xún),DSL時(shí)json格式的查詢(xún)語(yǔ)言,基礎(chǔ)語(yǔ)法與SQL語(yǔ)法最終在進(jìn)行數(shù)據(jù)檢索時(shí)也會(huì)由相關(guān)程序轉(zhuǎn)換為DSL語(yǔ)法進(jìn)行查詢(xún),所以用戶可以直接編寫(xiě)json格式的dsl查詢(xún)語(yǔ)言檢索ealasticsearch中的日志數(shù)據(jù)。日志分析統(tǒng)計(jì)提供日志數(shù)據(jù)聚合分析,包含事件計(jì)數(shù)、時(shí)間分段、數(shù)值分段、字段值分類(lèi)、字段數(shù)值、時(shí)間值立方等統(tǒng)計(jì)方式,用戶可以根據(jù)實(shí)際需要靈活選擇統(tǒng)計(jì)方式、統(tǒng)計(jì)字段、展示方式等,并可以將統(tǒng)計(jì)信息保存為定時(shí)任務(wù)或者圖表。
為實(shí)現(xiàn)日志信息的自動(dòng)化查詢(xún)統(tǒng)計(jì)與監(jiān)控高級(jí),實(shí)現(xiàn)定時(shí)任務(wù)、告警、報(bào)表、dashboard等功能,其中定時(shí)任務(wù)根據(jù)用戶設(shè)置的檢索條件、統(tǒng)計(jì)規(guī)則、執(zhí)行計(jì)劃等信息,通過(guò)啟動(dòng)定時(shí)任務(wù),日志平臺(tái)將定時(shí)執(zhí)行任務(wù),并將統(tǒng)計(jì)結(jié)果存儲(chǔ)在ealasticsearch中,方便查閱與二次分析;告警根據(jù)用戶設(shè)置的檢索條件、統(tǒng)計(jì)規(guī)則、執(zhí)行計(jì)劃、觸發(fā)條件、告警信息等,通過(guò)啟動(dòng)告警,日志平臺(tái)將定時(shí)執(zhí)行告警,并將統(tǒng)計(jì)結(jié)果存儲(chǔ)在ealasticsearch中,如果查詢(xún)統(tǒng)計(jì)觸發(fā)了告警規(guī)則,系統(tǒng)自動(dòng)將告警信息以郵件或消息的形式發(fā)送給指定用戶,方便用戶及時(shí)發(fā)現(xiàn)并解決問(wèn)題;報(bào)表將系統(tǒng)中已保存的通過(guò)組合起來(lái),通過(guò)定時(shí)任務(wù)生成pdf格式的報(bào)表文件,并將文件存儲(chǔ)在系統(tǒng)中提供下載,同時(shí)將報(bào)表文件直接發(fā)送到指定的用戶郵箱中;dashboard用于將中的已存圖表、告警信息、已存搜索、字段TOP值、日志事件計(jì)數(shù)等組合到一個(gè)頁(yè)面中,方便實(shí)時(shí)數(shù)據(jù)查閱。
不同格式的日志文件分布在成百上千的服務(wù)器上,服務(wù)器可能是Linux,也可能是Windows。因此,在選擇的日志采集工具應(yīng)該具備以下特點(diǎn):
跨平臺(tái):服務(wù)器大部分是Linux,但Windows服務(wù)器又有很多。在不同平臺(tái)間切換最好能做到無(wú)縫。
可擴(kuò)展:能夠根據(jù)需求方便的增加功能,類(lèi)似插件式,工具提供框架和基礎(chǔ)功能,其他的功能可以通過(guò)編寫(xiě)插件的形式提供。
可監(jiān)控:提供接口能實(shí)時(shí)監(jiān)控到工具的運(yùn)行狀態(tài),因?yàn)楣ぞ叩腻e(cuò)戳、掛起,就意味著日志的丟失。
容錯(cuò)性:程序內(nèi)部出現(xiàn)異常時(shí),要能做到日志的回滾。
文檔齊全:開(kāi)發(fā)人員持續(xù)更新,使得我們能夠快速的入手,持續(xù)更新說(shuō)明開(kāi)發(fā)人員關(guān)注用戶的反饋,并且積極修正Bug。
開(kāi)源:有問(wèn)題能夠從代碼級(jí)別分析問(wèn)題,并且有社區(qū)支持。
部署簡(jiǎn)單:最好能做到“粘貼-運(yùn)行”,便于運(yùn)維自動(dòng)化工具部署。
在比較了Filebeat、Flume和Scribe。它們?nèi)叽篌w功能一致,都扮演了一個(gè)數(shù)據(jù)傳輸者的角色,可以自定定義數(shù)據(jù)從哪里來(lái)(例如日志,文中稱(chēng)Source),日志到哪里去(例如存到Elastic-Search,文中稱(chēng)Target),同時(shí)可以對(duì)通過(guò)他的日志做一次預(yù)處理。除此之外,F(xiàn)lume和Scribe中間還有一層換成,可以簡(jiǎn)單的理解為一個(gè)消息隊(duì)列。
多種多樣的數(shù)據(jù)來(lái)源的日志數(shù)據(jù),按照用戶設(shè)置的解析規(guī)則進(jìn)行數(shù)據(jù)解析,如果解析規(guī)則有變化,需要暫停數(shù)據(jù)處理端agent,待更新規(guī)則后再次啟動(dòng)處理端agent。為保障日志處理的高效穩(wěn)定,可以啟動(dòng)多個(gè)處理實(shí)例,并且可以動(dòng)態(tài)添加處理實(shí)例,各處理實(shí)例間是對(duì)等關(guān)系,共同參與日志數(shù)據(jù)處理。
日志進(jìn)入索引文件后,用戶可以像使用搜索引擎一樣使用本系統(tǒng)進(jìn)行日志搜索,查找滿足特定條件的日志。
如果用戶對(duì)sqlSQL語(yǔ)言和DSLdsl語(yǔ)言有使用經(jīng)驗(yàn),可以使用類(lèi)SQL查詢(xún)語(yǔ)法、DSLdsl查詢(xún)語(yǔ)法進(jìn)行更為靈活的查詢(xún)統(tǒng)計(jì)搜索框編程,達(dá)到更為靈活,高效的復(fù)雜邏輯處理更為快速的定位問(wèn)題、解決問(wèn)題,即搜即得。直達(dá)問(wèn)題本質(zhì)。
對(duì)特定事件、固定閾值等多種方式的定時(shí)監(jiān)控告警。
使用電子郵件、遠(yuǎn)端接口等多種方式發(fā)送自定義告警內(nèi)容。
以PDF、PNG等形式發(fā)送時(shí)日?qǐng)?bào)、周報(bào)、月報(bào)。
通過(guò)Agent、API實(shí)時(shí)收集系統(tǒng)產(chǎn)生的事件,例如訪問(wèn)、點(diǎn)擊等。
通過(guò)Spark Stream接口進(jìn)行流計(jì)算,例如分析用戶使用使用app的習(xí)慣,什么時(shí)候是高峰期,主要使用的功能等,便于引導(dǎo)產(chǎn)品的方向和精準(zhǔn)運(yùn)營(yíng)。
對(duì)日志進(jìn)行數(shù)據(jù)倉(cāng)庫(kù)離線歸檔。
使用領(lǐng)域:流媒體、電子商務(wù)、移動(dòng)分析、游戲運(yùn)營(yíng)等。
通過(guò)Agent實(shí)時(shí)手機(jī)日志到日志服務(wù),從此不再擔(dān)心誤刪、或被黑客刪除。
通過(guò)日志查詢(xún)功能,快速分析訪問(wèn)行為,例如查詢(xún)某個(gè)賬戶、某個(gè)對(duì)象、某個(gè)操作的操作記錄。
通過(guò)大數(shù)據(jù)計(jì)算服務(wù)隊(duì)日志進(jìn)行長(zhǎng)時(shí)間存儲(chǔ),滿足符合規(guī)定的審計(jì)需求。
適用領(lǐng)域:電子商務(wù)、政府平臺(tái)、網(wǎng)站等。
開(kāi)發(fā)過(guò)程中,對(duì)客戶端、移動(dòng)設(shè)備、服務(wù)端、模塊等加入日志,并通過(guò)ID進(jìn)行關(guān)聯(lián)。
收集各個(gè)模塊日志,通過(guò)云監(jiān)控、流計(jì)算等實(shí)時(shí)獲取訪問(wèn)情況。
當(dāng)請(qǐng)求或訂單發(fā)生錯(cuò)誤是,開(kāi)發(fā)無(wú)需登錄服務(wù)器,直接通過(guò)日志查詢(xún)功能對(duì)錯(cuò)誤關(guān)鍵字、次數(shù)、關(guān)聯(lián)影響等進(jìn)行查詢(xún),快速定位問(wèn)題,減少影響覆蓋面。
適用領(lǐng)域:交易系統(tǒng)、訂單系統(tǒng)、移動(dòng)網(wǎng)絡(luò)等。
采用基于分布式搜索引擎的實(shí)時(shí)日志采集與處理技術(shù),實(shí)現(xiàn)自動(dòng)化的系統(tǒng)監(jiān)控,減少故障排查時(shí)間和業(yè)務(wù)中斷時(shí)間,提高系統(tǒng)的服務(wù)響應(yīng)能力和服務(wù)水平,將系統(tǒng)運(yùn)維人員充枯燥繁瑣的例行工作中解放出來(lái),將精力投入到系統(tǒng)的優(yōu)化與提升當(dāng)中去。
同時(shí)采用多任務(wù)分布式技術(shù)對(duì)海量日志進(jìn)行分析挖掘,可以建立科學(xué)的分析模型,使得對(duì)日志的分析深度與事件的識(shí)別準(zhǔn)確度得到進(jìn)一步的提升。通過(guò)日志分析預(yù)警,能提前對(duì)潛在的風(fēng)險(xiǎn)定性或定量的評(píng)估,從而采取應(yīng)對(duì)措施來(lái)降低風(fēng)險(xiǎn)。這對(duì)提高應(yīng)用系統(tǒng)的安全性、穩(wěn)定性及其服務(wù)能力,保障企業(yè)生產(chǎn)正常開(kāi)展具有重大的意義。
[1](美)拉斐爾.酷奇(Rafal Kue)等著,張世武等譯.深入理解ElasticSearch(原書(shū)第2版)[M].北京:機(jī)械工業(yè)出版社,2017,5.
[2]分布式多用戶能力的全文搜索引擎ElasticSearach https://www.elastic.co/.
[3]分布式式日志收集系統(tǒng)Apache Flume http://flume.apache.org/.
[4]高吞吐量的分布式發(fā)布訂閱消息系統(tǒng)Apache Kafka http://kafka.apache.org/.