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