李連天
(陽江職業(yè)技術學院 廣東省陽江市 529566)
隨著Internet技術的飛速發(fā)展,企業(yè)業(yè)務發(fā)展越來越大,需要越來越多的服務器。這些服務器生成的大量訪問日志和其他錯誤日志,通過查詢這些日志內容可以了解相關的硬件信息,以及發(fā)現配置過程中發(fā)生的錯誤的原因。當管理服務器數量達到數百臺時,仍然使用依次登錄每臺機器的方式查詢日志數據,不僅麻煩,而且效率很低,運維人員要花費數倍的時間。后來,人們開始使用集中式管理來收集和匯總所有服務器上的日志,使用Linux命令實現檢索和統(tǒng)計,但處理數百臺服務器生成的日志結果也不理想。因此網絡運維人員需要一套可以高效率統(tǒng)一收集日志的可視化系統(tǒng)。為了解決上述問題,需要設計了一個基于ELK(Elasticsearch Logstash Kibana)的日志分析平臺。它的功能是實時搜索,穩(wěn)定,快速且使用非常方便。
目前很多公司由于業(yè)務的發(fā)展,為保障公司業(yè)務正常進行,就需要增加相應的服務器來運行,服務器產生的海量日志,運維人員用以往的方法已經應付不過來了,現急需要做到問題的及時發(fā)現和處理。在日常運維工作中,運維人員對于系統(tǒng)和業(yè)務日志的處理尤為重要。以下六點是對ELK的需求分析:
如今一般一個公司都需要分量足夠大的分析能力,處理數據時生產的日志隨著業(yè)務增多,微服務得到重視,處理日志的能力進一步加強。在日常的工作中發(fā)現,系統(tǒng)產生的日志逐漸增加,想要找出其中的錯誤日志已經很難了。以前有能力處理的海量日志的公司,實力是不可否定的,都會內部開發(fā)屬于自己的系統(tǒng)。現在處理數據成為了日常,ELK就順勢而出,幫解決數據復雜的問題。
開源在IT社區(qū)里的呼喚一直都是很高的。我們常說開源、商業(yè)和自研三者之間是相輔相成,在運維工作中開源軟件是運維工程師的首選,節(jié)省了成本高。開源的好處,在于他的通透,學習成本底,培養(yǎng)一個新手就很容易上手。
就比如CDN日志能體現出系統(tǒng)運行的很多問題與錯誤,能快速正確分析CDN日志就能對CDN調度產生多方面影響,非常實在的經濟效應,不可能不需要強大的日志分析工具。
運維自身也在發(fā)展,不可能一直在動蕩漂浮的年代。日志分析對于運維來說是不可缺的,標準化的日志分析遲早會來臨,也是歷史發(fā)展的必然。
ELK能解決的核心問題,可視圖形化、覆蓋范圍廣、速度快、實時性、標準化和易擴展集成。
如今大數據的快速發(fā)展使得機器在某種意義上變得廉價,數十上百臺的服務器的增加,為了維護這些服務器很多技術被快速促進發(fā)展。
本系統(tǒng)設計主要框架圖如圖1所示。

圖1:系統(tǒng)整體構架
通過配置文件設定好的日志規(guī)則,通過這些規(guī)則匹配到對應的日志內容,最后將日志傳送到預處理模塊進行處理。此模塊實現的日志收集功能意味著收集代理從服務器收集訪問日志,并將其轉發(fā)到數據收集和分析平臺以進行集中處理,但是日志收集的對象是很多主機,以及類型和格式的日志。不一樣此時,需要在每臺主機上部署日志收集模塊,以收集所需的日志,然后將其統(tǒng)一到分析平臺,這可以大大降低重復收集率,減輕目標主機的負擔。
該模塊主要負責把日志按照預先設置好的規(guī)則進行標準化,所謂標準化就是將數據的字段解析分解,修改其屬性,進行轉換,便可以輕松存儲到ES存儲器當中。
該模塊需要對采集到的日志數據或經過預處理分析后的數據進行存儲和索引,以實現存儲和檢索功能。為了滿足海量日志的存儲和空間增長要求,必須對日志進行持久處理,以具有出色的處理搜索要求。另外,企業(yè)的業(yè)務增長非常快,該模塊的分布式模式有效地解決存儲的需求。為了防止模塊受到停機時間的影響,使用了分布式和實時存儲,每個字段都存儲在索引中。結構化數據也是如此,因此它具有高可用性。
該模塊的主要功能是可視化收集的日志數據。在以前的日志分析系統(tǒng)中,日志數據的可視化是一個相對較弱的部分,最終顯示收集到的日志數據是為了便于查看和分析,以便您快速找到故障并解決。
日志數據采集流程如圖2所示。Beats組件是一系列用于采集數據的輕量級代理程序,用于從服務端收集日志、網絡、監(jiān)控數據,并最終匯總到elasticsearch。Beats組件收集的數據即可以直接上報給elasticsearch,也可以通過logstash中轉處理后上報給elasticsearch。Beats中包含著Filebeat。

圖2:日志數據處理
在系統(tǒng)中,輸入主要是消息隊列模塊收集的日志數據,即Filebeat收集的數據,該數據將在轉發(fā)到Logstash之后由過濾器處理。過濾器等效于處理管道,該管道根據定義的規(guī)則過濾和處理一條數據并將其轉換為所需的信息。輸出定義了Elasticsearch,用于接收和保存數據,最后將數據傳遞到顯示模塊,如圖3所示。

圖3:Logstash實現
日志存儲模塊使用ES來實現日志持久化存儲和建立索引庫,ES是基于Lucene的,Lucene本身搜索功能就非常的齊全,所以ES也能擁有強大的索引引擎庫。數據收集由多個節(jié)點(Node)組成一個集群(Cluster),日志數據經過二次解析過濾后發(fā)送到ES進行持久化存儲,如圖4所示。

圖4:ES實現結構
該模塊由三個部分組成,分別是數據的收集、窗口監(jiān)視和分析平臺的查詢。用途是檢索收集到的日志數據,通過平臺的查詢功能查詢固定的日志,并通過平臺的快速生成表格的方法產生的數據,以方便日后的日志分析。收集的數據不僅可以生成條形圖,也可以生成系統(tǒng)特定的監(jiān)視圖來察看系統(tǒng)運行;還可以通過WebUI界面獲取日志數據,例如,當日志中某段數據出現頻繁錯誤時,系統(tǒng)即發(fā)出警報。
本系統(tǒng)采用ELK作為系統(tǒng)框架,并搭建Nginx服務,結合Filebeat等技術,設計了數據采集與分析平臺。平臺分為四個模塊:日志收集模塊,日志存儲模塊,日志預處理模塊以及日志檢索和展示模塊,系統(tǒng)能高效管理服務器日志數據。通過這個數據收集和分析平臺,可以在一定程度上減少大量的運維成本,運維人員也可以提高工作效率。