謝磊 張冰 楊猛
摘 要:為解決現(xiàn)階段物聯(lián)網(wǎng)應(yīng)用日志處理效率低下的問題,研究一種基于ELK技術(shù)棧的開源日志解決方案。探討各組件的工作原理和使用方法,提出解析日志的規(guī)則和技巧,總結(jié)優(yōu)化Elasticsearch集群性能的方法,在此基礎(chǔ)之上搭建能夠?qū)A咳罩具M(jìn)行實時采集和檢索的分析監(jiān)控系統(tǒng)。實驗結(jié)果表明,該方案具有配置方式靈活、集群可線性擴(kuò)展、日志實時導(dǎo)入、檢索性能高效、可視化方便等優(yōu)點,能有效提高運維效率和異常排查速度。
關(guān)鍵詞:大數(shù)據(jù);物聯(lián)網(wǎng);系統(tǒng)監(jiān)控
系統(tǒng)運行維護(hù)、診斷故障、屬性分析都是通過日志數(shù)據(jù)來解析的,日志是日志分析系統(tǒng)的主要組成部分。隨著互聯(lián)網(wǎng)大數(shù)據(jù)的發(fā)展和規(guī)模的擴(kuò)大,系統(tǒng)的日志數(shù)量在不斷增加,其采集規(guī)模也在不斷擴(kuò)大;傳統(tǒng)的采集手段已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足日志采集,且日志分析的方式會造成能源消耗的浪費,工作效率差,不能進(jìn)行多維度的查詢,也不能對復(fù)雜事件進(jìn)行處理分析?,F(xiàn)在大數(shù)據(jù)的處理趨勢主要是實時性,同時,硬件成本降低,在這種情況下出現(xiàn)了許多日志分析平臺,其中以ELK(分布式搜索引擎Elasticsearch、日志搜集過濾工具Logstash、數(shù)據(jù)可視化分析平臺Kibana)為代表的實時日志分析平臺,能滿足多個場合的應(yīng)用和需求,可以從龐大的日志信息數(shù)據(jù)中準(zhǔn)確及時篩選出相關(guān)的信息,對信息數(shù)據(jù)進(jìn)行監(jiān)控和維護(hù),對日志可以實行統(tǒng)計分析。ELK不僅提高了運維人員的工作效率和質(zhì)量,還能實時地監(jiān)控日志數(shù)據(jù)運行狀態(tài),并反饋處理。
1 基于ELK的日志分析系統(tǒng)平臺
1.1 系統(tǒng)整體結(jié)構(gòu)
一個完整的日志分析系統(tǒng)主要包括采集、解析、儲存和可視化轉(zhuǎn)換4個部分。在ELK平臺運行過程中,Logstash主要是對日志數(shù)據(jù)進(jìn)行采集、分析解讀和過濾數(shù)據(jù),獲取大量的日志數(shù)據(jù)并按照解析規(guī)則輸送至Elasticsearch。Elasticsearch是一個開源分布式的搜索引擎,主要有搜集、分析、儲存等功能,具有對整個數(shù)據(jù)庫進(jìn)行檢索的功能,在處理過程中Elasticsearch作為存儲日志的主要系統(tǒng)。Kibana把日志數(shù)據(jù)解析變得可視化,可以把從Elasticsearch中獲取的大量日志數(shù)據(jù)進(jìn)行可視化解析,便于數(shù)據(jù)分析。Logstash可以對日志數(shù)據(jù)進(jìn)行采集和解讀,但大規(guī)模的日志采集會增加內(nèi)存的消耗和CPU儲量,如果服務(wù)器的設(shè)備和性能不夠完善,可能會導(dǎo)致服務(wù)器性能降低和系統(tǒng)罷工。為了解決這種問題,Elastic公司開發(fā)出了另外一種日志采集器Beats,在數(shù)據(jù)采集方面代替Logstash,系統(tǒng)結(jié)構(gòu)見圖1。
Beats是單一功能所有器的總稱,能通過日志的不同采集源和類型進(jìn)行分類采集,現(xiàn)階段分為以下幾種:
(1)Filebeat:本地文件的日志數(shù)據(jù),可以對目錄和特殊的文件進(jìn)行監(jiān)控;
(2)Metricbeat:又稱為Topbeat,通過搜集系統(tǒng)、系統(tǒng)進(jìn)程和文件等級別的CPU和內(nèi)存儲存情況;
(3)Packetbeat:對網(wǎng)絡(luò)上的數(shù)據(jù)進(jìn)行搜集,對系統(tǒng)實時監(jiān)控,出現(xiàn)故障時可以及時反饋錯誤和報告,將其發(fā)送給Logstash或Elasticsearch;
(4)Winlogbeat:對Windows系統(tǒng)日常事件數(shù)據(jù)搜集;
(5)Heartbeat:對服務(wù)器的運行狀況監(jiān)控,和Logstash相比,Beats收集數(shù)據(jù)的儲量占比很小,其次,Beats和Logstash兩種支持雙向加密傳輸,客戶端和服務(wù)器雙向認(rèn)證,可以確保信息傳輸?shù)陌踩院头€(wěn)定性。
1.2 實時收集系統(tǒng)
日志收集是分析處理和監(jiān)控的基礎(chǔ)和重要部分,不同系統(tǒng)的數(shù)據(jù)采集源各不相同,日志收集需要在不同服務(wù)器上把分散的數(shù)據(jù)進(jìn)行分析匯總,在通過解析規(guī)則進(jìn)行轉(zhuǎn)換。現(xiàn)階段都是通過Filebeat和Logstash匯總?cè)罩緛斫M成日志收集,格式一般都采用文件的形式。
Filebeat是GO語言開發(fā)的不會消耗大量資源的輕便型日志采集器。當(dāng)它開始工作運轉(zhuǎn)時,會啟動一個和多個prospector監(jiān)控日志的采集源和數(shù)據(jù),每個日志的數(shù)據(jù)都有相對應(yīng)的harvester,harvester對日志進(jìn)行解讀后會轉(zhuǎn)發(fā)至后臺。Filebeat能對注冊文件進(jìn)行維護(hù),記錄每個harvester最終讀取位置的偏差值。
Logstash是分布式數(shù)據(jù)收集引擎,對日志數(shù)據(jù)進(jìn)行搬運,它能動態(tài)地從其他數(shù)據(jù)源搜集數(shù)據(jù),并對數(shù)據(jù)進(jìn)行篩選、解析、統(tǒng)一格式,然后輸送到相應(yīng)的區(qū)域。把事件流通過Logstash中的Input、Filter和Output插件進(jìn)行處理和轉(zhuǎn)換,Input是日志數(shù)據(jù)輸入的開始,F(xiàn)ilter對數(shù)據(jù)進(jìn)行解析轉(zhuǎn)換,Output對傳輸方向進(jìn)行輸送。
Grok是Logstash的一種正則解析插件,它能對日志數(shù)據(jù)進(jìn)行解析轉(zhuǎn)化,其中數(shù)據(jù)庫中包含了120多種表達(dá)式數(shù)據(jù),在對日志進(jìn)行解析時需要采用相應(yīng)的正則表達(dá)式來轉(zhuǎn)化。利用Grok插件所帶來的便捷,對總結(jié)的文件進(jìn)行解析,步驟如下:
(1)對采集的日志解析,并進(jìn)行切分,每一條數(shù)據(jù)分為不同的字段,對其進(jìn)行分析解讀,字段是日志分析的主要部分,是解讀日志和分析最重要的內(nèi)容;
(2)將收集到的數(shù)據(jù)采取切分原則,切分后的字段都采用正則表達(dá)式的解析方式進(jìn)行轉(zhuǎn)換,如果Grok中的正則數(shù)據(jù)庫中存在其相應(yīng)的表達(dá)式,則可以直接對其進(jìn)行轉(zhuǎn)換使用,沒有則采用自定義的轉(zhuǎn)換方式進(jìn)行轉(zhuǎn)換分析,兩種模式可以結(jié)合使用;
(3)在GrokDebugger的調(diào)整工具中對解析后的日志進(jìn)行調(diào)試、查驗轉(zhuǎn)換的表達(dá)式是否正確。
2 ELK日志采集
2.1 Logstash的性能問題
在實際的操作過程中,Logstash一般在ELKStack中作為日志采集器的工具,需要在不同設(shè)備的節(jié)點上安裝設(shè)置相應(yīng)Logstash采集器,再將采集后的數(shù)據(jù)進(jìn)行解析分配,傳送到ELK。Logstash是由Ruby語言開發(fā)制造的,且需要用JRuby解析器進(jìn)行解讀分析,這種解讀方式會增加內(nèi)存的占比和CPU容量的消耗,尤其是在一些性能低下的節(jié)點上,情況會加重,可能會導(dǎo)致服務(wù)器故障,系統(tǒng)運作出現(xiàn)問題。如果使用filter插件對日志的數(shù)據(jù)進(jìn)行解析,操作過程不僅繁瑣,還會使Logstash變成系統(tǒng)處理器和硬盤密集型工具。通常情況可以根據(jù)不同設(shè)備的節(jié)點性能,對各個設(shè)備數(shù)據(jù)進(jìn)行調(diào)整,以-Xms和-Xmx標(biāo)志來設(shè)置JVM的初始內(nèi)存大小,這種方式能夠優(yōu)化Logstash的性能,但是如果節(jié)點很多,則會增加運維人員的工作量。因此在節(jié)點性能產(chǎn)生故障時,使用Logstash作為日志采集器則不合理。
2.2 Beats替代Logstash
Beats是多種具有單一功能的輕便型數(shù)據(jù)采集器工具集的統(tǒng)稱,Beats工具集軟件的開發(fā)語言是GO語言,和Ruby相比它的資源占比較少,執(zhí)行高效。Beats工具集包括了Filebeat、Metricbeat、Packetbeat和Heartbeat等技術(shù)棧的采集器,每個工具功能單一化,通過搜集相關(guān)數(shù)據(jù)再采集后上報至Elasticsearch做集中化處理。它還能對節(jié)點采集的數(shù)據(jù)進(jìn)行保留,并將數(shù)據(jù)轉(zhuǎn)化解析傳送給ELK日志分析平臺,降低內(nèi)存的使用率占比和其他性能的消耗,還能保證系統(tǒng)服務(wù)器的正常運轉(zhuǎn)。
Filebeat工具對于低性能的節(jié)點具有很好的幫助作用,能夠降低內(nèi)存使用量占比。Beats采集器的比較單一化,對日志數(shù)據(jù)進(jìn)行采集且支持TLS雙向的認(rèn)證加密,可以在向信任的Logstash服務(wù)器端點輸送數(shù)據(jù)時,防止數(shù)據(jù)在傳送過程中泄露和丟失。同樣還支持背壓敏感協(xié)議,可以防止網(wǎng)絡(luò)數(shù)據(jù)緩慢,降低設(shè)備節(jié)點的儲量和資源的消耗情況。
3 結(jié)論
在互聯(lián)網(wǎng)數(shù)據(jù)不斷增多的情況下,設(shè)備節(jié)點也不斷增加,維護(hù)服務(wù)日志數(shù)據(jù)也變得越來越重要。一個好的日志分析平臺可以對日志數(shù)據(jù)進(jìn)行高效和優(yōu)化的處理,及時準(zhǔn)確地處理產(chǎn)生的問題和故障,還能通過實時監(jiān)控和控制,對業(yè)務(wù)產(chǎn)生的故障及時診斷處理,并發(fā)出警告提醒,提高了運維人員的工作效率。ELK日志分析平臺不僅能夠?qū)Υ罅咳罩緮?shù)據(jù)進(jìn)行分析處理解析,還能夠?qū)?fù)雜的日志數(shù)據(jù)進(jìn)行差異化采集和分類,利用Logstash工具自定義的篩選和解讀規(guī)則采集,將解析的日志數(shù)據(jù)上報至Elasticsearch并存儲下來,再之后在Kibana進(jìn)行對數(shù)據(jù)可視化解讀和分析,提升分析的準(zhǔn)確性和穩(wěn)定性。在設(shè)備節(jié)點性能低下的情況,可以采用其他的日志采集器(Filebeat)替代Logstash進(jìn)行數(shù)據(jù)采集。ELKStack日志處理平臺可以應(yīng)用于不同場景,通過調(diào)整配置來滿足不同采集端的需要,進(jìn)行定制化的采集數(shù)據(jù)。這種系統(tǒng)的使用增強了日志數(shù)據(jù)處理的便捷和質(zhì)量,提高了使用率。
參考文獻(xiàn):
[1]阮曉龍,張浩林.基于ELK的Apache日志實時分析系統(tǒng)探索與分析模型研究[J].電腦與信息技術(shù),2020,28(01):54-57.
[2]李志民,孫林檀,吳建軍,等.基于大數(shù)據(jù)的ELK日志分析系統(tǒng)研究及應(yīng)用[J].科學(xué)與信息化,2019(28):54,59.