李連天
(陽(yáng)江職業(yè)技術(shù)學(xué)院 廣東省陽(yáng)江市 529566)
隨著Internet技術(shù)的飛速發(fā)展,企業(yè)業(yè)務(wù)發(fā)展越來(lái)越大,需要越來(lái)越多的服務(wù)器。這些服務(wù)器生成的大量訪問(wèn)日志和其他錯(cuò)誤日志,通過(guò)查詢這些日志內(nèi)容可以了解相關(guān)的硬件信息,以及發(fā)現(xiàn)配置過(guò)程中發(fā)生的錯(cuò)誤的原因。當(dāng)管理服務(wù)器數(shù)量達(dá)到數(shù)百臺(tái)時(shí),仍然使用依次登錄每臺(tái)機(jī)器的方式查詢?nèi)罩緮?shù)據(jù),不僅麻煩,而且效率很低,運(yùn)維人員要花費(fèi)數(shù)倍的時(shí)間。后來(lái),人們開(kāi)始使用集中式管理來(lái)收集和匯總所有服務(wù)器上的日志,使用Linux命令實(shí)現(xiàn)檢索和統(tǒng)計(jì),但處理數(shù)百臺(tái)服務(wù)器生成的日志結(jié)果也不理想。因此網(wǎng)絡(luò)運(yùn)維人員需要一套可以高效率統(tǒng)一收集日志的可視化系統(tǒng)。為了解決上述問(wèn)題,需要設(shè)計(jì)了一個(gè)基于ELK(Elasticsearch Logstash Kibana)的日志分析平臺(tái)。它的功能是實(shí)時(shí)搜索,穩(wěn)定,快速且使用非常方便。
目前很多公司由于業(yè)務(wù)的發(fā)展,為保障公司業(yè)務(wù)正常進(jìn)行,就需要增加相應(yīng)的服務(wù)器來(lái)運(yùn)行,服務(wù)器產(chǎn)生的海量日志,運(yùn)維人員用以往的方法已經(jīng)應(yīng)付不過(guò)來(lái)了,現(xiàn)急需要做到問(wèn)題的及時(shí)發(fā)現(xiàn)和處理。在日常運(yùn)維工作中,運(yùn)維人員對(duì)于系統(tǒng)和業(yè)務(wù)日志的處理尤為重要。以下六點(diǎn)是對(duì)ELK的需求分析:
如今一般一個(gè)公司都需要分量足夠大的分析能力,處理數(shù)據(jù)時(shí)生產(chǎn)的日志隨著業(yè)務(wù)增多,微服務(wù)得到重視,處理日志的能力進(jìn)一步加強(qiáng)。在日常的工作中發(fā)現(xiàn),系統(tǒng)產(chǎn)生的日志逐漸增加,想要找出其中的錯(cuò)誤日志已經(jīng)很難了。以前有能力處理的海量日志的公司,實(shí)力是不可否定的,都會(huì)內(nèi)部開(kāi)發(fā)屬于自己的系統(tǒng)。現(xiàn)在處理數(shù)據(jù)成為了日常,ELK就順勢(shì)而出,幫解決數(shù)據(jù)復(fù)雜的問(wèn)題。
開(kāi)源在IT社區(qū)里的呼喚一直都是很高的。我們常說(shuō)開(kāi)源、商業(yè)和自研三者之間是相輔相成,在運(yùn)維工作中開(kāi)源軟件是運(yùn)維工程師的首選,節(jié)省了成本高。開(kāi)源的好處,在于他的通透,學(xué)習(xí)成本底,培養(yǎng)一個(gè)新手就很容易上手。
就比如CDN日志能體現(xiàn)出系統(tǒng)運(yùn)行的很多問(wèn)題與錯(cuò)誤,能快速正確分析CDN日志就能對(duì)CDN調(diào)度產(chǎn)生多方面影響,非常實(shí)在的經(jīng)濟(jì)效應(yīng),不可能不需要強(qiáng)大的日志分析工具。
運(yùn)維自身也在發(fā)展,不可能一直在動(dòng)蕩漂浮的年代。日志分析對(duì)于運(yùn)維來(lái)說(shuō)是不可缺的,標(biāo)準(zhǔn)化的日志分析遲早會(huì)來(lái)臨,也是歷史發(fā)展的必然。
ELK能解決的核心問(wèn)題,可視圖形化、覆蓋范圍廣、速度快、實(shí)時(shí)性、標(biāo)準(zhǔn)化和易擴(kuò)展集成。
如今大數(shù)據(jù)的快速發(fā)展使得機(jī)器在某種意義上變得廉價(jià),數(shù)十上百臺(tái)的服務(wù)器的增加,為了維護(hù)這些服務(wù)器很多技術(shù)被快速促進(jìn)發(fā)展。
本系統(tǒng)設(shè)計(jì)主要框架圖如圖1所示。
圖1:系統(tǒng)整體構(gòu)架
通過(guò)配置文件設(shè)定好的日志規(guī)則,通過(guò)這些規(guī)則匹配到對(duì)應(yīng)的日志內(nèi)容,最后將日志傳送到預(yù)處理模塊進(jìn)行處理。此模塊實(shí)現(xiàn)的日志收集功能意味著收集代理從服務(wù)器收集訪問(wèn)日志,并將其轉(zhuǎn)發(fā)到數(shù)據(jù)收集和分析平臺(tái)以進(jìn)行集中處理,但是日志收集的對(duì)象是很多主機(jī),以及類型和格式的日志。不一樣此時(shí),需要在每臺(tái)主機(jī)上部署日志收集模塊,以收集所需的日志,然后將其統(tǒng)一到分析平臺(tái),這可以大大降低重復(fù)收集率,減輕目標(biāo)主機(jī)的負(fù)擔(dān)。
該模塊主要負(fù)責(zé)把日志按照預(yù)先設(shè)置好的規(guī)則進(jìn)行標(biāo)準(zhǔn)化,所謂標(biāo)準(zhǔn)化就是將數(shù)據(jù)的字段解析分解,修改其屬性,進(jìn)行轉(zhuǎn)換,便可以輕松存儲(chǔ)到ES存儲(chǔ)器當(dāng)中。
該模塊需要對(duì)采集到的日志數(shù)據(jù)或經(jīng)過(guò)預(yù)處理分析后的數(shù)據(jù)進(jìn)行存儲(chǔ)和索引,以實(shí)現(xiàn)存儲(chǔ)和檢索功能。為了滿足海量日志的存儲(chǔ)和空間增長(zhǎng)要求,必須對(duì)日志進(jìn)行持久處理,以具有出色的處理搜索要求。另外,企業(yè)的業(yè)務(wù)增長(zhǎng)非???,該模塊的分布式模式有效地解決存儲(chǔ)的需求。為了防止模塊受到停機(jī)時(shí)間的影響,使用了分布式和實(shí)時(shí)存儲(chǔ),每個(gè)字段都存儲(chǔ)在索引中。結(jié)構(gòu)化數(shù)據(jù)也是如此,因此它具有高可用性。
該模塊的主要功能是可視化收集的日志數(shù)據(jù)。在以前的日志分析系統(tǒng)中,日志數(shù)據(jù)的可視化是一個(gè)相對(duì)較弱的部分,最終顯示收集到的日志數(shù)據(jù)是為了便于查看和分析,以便您快速找到故障并解決。
日志數(shù)據(jù)采集流程如圖2所示。Beats組件是一系列用于采集數(shù)據(jù)的輕量級(jí)代理程序,用于從服務(wù)端收集日志、網(wǎng)絡(luò)、監(jiān)控?cái)?shù)據(jù),并最終匯總到elasticsearch。Beats組件收集的數(shù)據(jù)即可以直接上報(bào)給elasticsearch,也可以通過(guò)logstash中轉(zhuǎn)處理后上報(bào)給elasticsearch。Beats中包含著Filebeat。
圖2:日志數(shù)據(jù)處理
在系統(tǒng)中,輸入主要是消息隊(duì)列模塊收集的日志數(shù)據(jù),即Filebeat收集的數(shù)據(jù),該數(shù)據(jù)將在轉(zhuǎn)發(fā)到Logstash之后由過(guò)濾器處理。過(guò)濾器等效于處理管道,該管道根據(jù)定義的規(guī)則過(guò)濾和處理一條數(shù)據(jù)并將其轉(zhuǎn)換為所需的信息。輸出定義了Elasticsearch,用于接收和保存數(shù)據(jù),最后將數(shù)據(jù)傳遞到顯示模塊,如圖3所示。
圖3:Logstash實(shí)現(xiàn)
日志存儲(chǔ)模塊使用ES來(lái)實(shí)現(xiàn)日志持久化存儲(chǔ)和建立索引庫(kù),ES是基于Lucene的,Lucene本身搜索功能就非常的齊全,所以ES也能擁有強(qiáng)大的索引引擎庫(kù)。數(shù)據(jù)收集由多個(gè)節(jié)點(diǎn)(Node)組成一個(gè)集群(Cluster),日志數(shù)據(jù)經(jīng)過(guò)二次解析過(guò)濾后發(fā)送到ES進(jìn)行持久化存儲(chǔ),如圖4所示。
圖4:ES實(shí)現(xiàn)結(jié)構(gòu)
該模塊由三個(gè)部分組成,分別是數(shù)據(jù)的收集、窗口監(jiān)視和分析平臺(tái)的查詢。用途是檢索收集到的日志數(shù)據(jù),通過(guò)平臺(tái)的查詢功能查詢固定的日志,并通過(guò)平臺(tái)的快速生成表格的方法產(chǎn)生的數(shù)據(jù),以方便日后的日志分析。收集的數(shù)據(jù)不僅可以生成條形圖,也可以生成系統(tǒng)特定的監(jiān)視圖來(lái)察看系統(tǒng)運(yùn)行;還可以通過(guò)WebUI界面獲取日志數(shù)據(jù),例如,當(dāng)日志中某段數(shù)據(jù)出現(xiàn)頻繁錯(cuò)誤時(shí),系統(tǒng)即發(fā)出警報(bào)。
本系統(tǒng)采用ELK作為系統(tǒng)框架,并搭建Nginx服務(wù),結(jié)合Filebeat等技術(shù),設(shè)計(jì)了數(shù)據(jù)采集與分析平臺(tái)。平臺(tái)分為四個(gè)模塊:日志收集模塊,日志存儲(chǔ)模塊,日志預(yù)處理模塊以及日志檢索和展示模塊,系統(tǒng)能高效管理服務(wù)器日志數(shù)據(jù)。通過(guò)這個(gè)數(shù)據(jù)收集和分析平臺(tái),可以在一定程度上減少大量的運(yùn)維成本,運(yùn)維人員也可以提高工作效率。