李欽 楊程
摘? 要:在云計(jì)算和大數(shù)據(jù)時(shí)代,針對(duì)業(yè)務(wù)服務(wù)運(yùn)行狀態(tài)的實(shí)時(shí)監(jiān)控與日志數(shù)據(jù)分析具有非常重要的意義,而為了達(dá)成該目標(biāo),首先需要構(gòu)建一個(gè)符合企業(yè)自身業(yè)務(wù)場(chǎng)景的集中式日志管理平臺(tái)的解決方案。本文采用目前流行的開(kāi)源集中式日志解決方案——ELK Stack(Elasticsearch、Logstash、Kibana Stack),探討該方案中三大組件的核心功能和使用方法,在此基礎(chǔ)上搭建對(duì)海量日志進(jìn)行實(shí)時(shí)監(jiān)控和檢索分析的日志監(jiān)控處理方案,以及研究如何優(yōu)化在性能偏低的設(shè)備節(jié)點(diǎn)部署該方案的方法。
關(guān)鍵詞:日志處理;ELK;filebeat
中圖分類號(hào):TP311.1? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2019)15-0193-02
Construction and Optimization of Log Analysis Platform Based on ELK
LI Qin,YANG Cheng
(Guangzhou Zhiyuan Electronics Co.,Ltd.,Guangzhou? 510660,China)
Abstract:In the era of cloud computing and big data,the real-time monitoring and log data analysis of business service running state is of great significance. To achieve this goal,it is necessary to build a centralized log management platform solution in line with the enterprise’s own business scenario. Based on the currently popular open source centralized logging solutions——ELK Stack (Elasticsearch,Logstash,Kibana Stack),discusses the scheme of the three components of the core functions and using methods,based on the building of massive logs real-time monitoring and analysis of log to monitor treatment scheme,it also studies how to optimize the deployment of the scheme in low performance equipment nodes.
Keywords:log processing;ELK;filebeat
0? 引? 言
隨著云計(jì)算的到來(lái),越來(lái)越多的企業(yè)陸續(xù)在實(shí)際生產(chǎn)過(guò)程中使用云服務(wù)。云服務(wù)具有動(dòng)態(tài)擴(kuò)展,按需分配等特點(diǎn),對(duì)計(jì)算機(jī)的軟硬件資源進(jìn)行了優(yōu)化,提高了資源的利用率。企業(yè)使用云計(jì)算技術(shù)不僅可以減少硬件基礎(chǔ)設(shè)施的投入,還可以根據(jù)業(yè)務(wù)需求對(duì)運(yùn)算能力和存儲(chǔ)容量進(jìn)行動(dòng)態(tài)調(diào)整。
在線上運(yùn)行的服務(wù)會(huì)產(chǎn)生大量的運(yùn)行、訪問(wèn)和安全等日志,通常這些日志包含了線上服務(wù)執(zhí)行的成功、失敗還有用戶訪問(wèn)狀態(tài)等各種信息,并通過(guò)文件或標(biāo)準(zhǔn)輸出進(jìn)行打印。記錄下來(lái)的日志可以為運(yùn)維或開(kāi)發(fā)人員對(duì)線上服務(wù)產(chǎn)生的問(wèn)題進(jìn)行排查定位提供依據(jù),也可以通過(guò)記錄采集的服務(wù)器狀態(tài)數(shù)據(jù)進(jìn)行監(jiān)控,還可以對(duì)日志系統(tǒng)設(shè)置規(guī)則,通過(guò)郵件、短信等方式對(duì)告警錯(cuò)誤等信息進(jìn)行自動(dòng)化告警。
大規(guī)模集群系統(tǒng)和應(yīng)用服務(wù)的日志信息分布在各個(gè)設(shè)備節(jié)點(diǎn)與目錄之中,若通過(guò)SSH登錄到相應(yīng)節(jié)點(diǎn)使用grep、awk與sed等文本處理工具進(jìn)行日志文本查看,效率過(guò)低且難以管理,部署一個(gè)集中化的日志管理平臺(tái)就顯得勢(shì)在必行了。開(kāi)源的ELK Stack日志分析處理平臺(tái)提供了一整套日記采集分析處理的解決方案,它可把服務(wù)器上所產(chǎn)生的日志信息和運(yùn)行狀態(tài)采集匯總后進(jìn)行查詢、監(jiān)控、分析告警和機(jī)器學(xué)習(xí)等操作處理,使用這套ELK日志分析平臺(tái)不僅能提升運(yùn)維開(kāi)發(fā)人員的工作效率,還能將業(yè)務(wù)服務(wù)的運(yùn)行狀態(tài)及時(shí)反饋給相關(guān)人員。
1? ELK日志分析平臺(tái)結(jié)構(gòu)
ELK Stack日志分析平臺(tái)是由Elasticsearch、Logstash和Kibana三款開(kāi)源軟件組成的集中式日志解決方案,如圖1所示是ELK最簡(jiǎn)單的架構(gòu),設(shè)備節(jié)點(diǎn)的log信息和運(yùn)行狀態(tài)經(jīng)過(guò)Logstash采集,在Logstash中三個(gè)組件(input、filter和output)分別指定日志數(shù)據(jù)的輸入源、數(shù)據(jù)過(guò)濾加工操作以及數(shù)據(jù)上報(bào)目的地,通過(guò)output設(shè)置將日志數(shù)據(jù)上報(bào)至Elasticsearch,然后由Kibana對(duì)數(shù)據(jù)進(jìn)行搜索查詢等展示功能。圖1清晰地展示了數(shù)據(jù)如何在ELK日志分析平臺(tái)中流動(dòng),了解ELK的三款軟件如何協(xié)調(diào)工作。
Elasticsearch:是一個(gè)基于開(kāi)源Apache Lucene庫(kù)的全文搜索引擎構(gòu)建,它提供了一個(gè)分布式的、支持RESTful API的搜索和數(shù)據(jù)分析引擎,具有高可伸縮性、高可靠性和實(shí)時(shí)性等特點(diǎn),能對(duì)大量數(shù)據(jù)進(jìn)行快速的存儲(chǔ)、搜索與分析處理操作。
Logstash:是一個(gè)開(kāi)源的數(shù)據(jù)處理采集軟件,具有實(shí)時(shí)管道功能,能動(dòng)態(tài)地將多個(gè)來(lái)自不同數(shù)據(jù)源的數(shù)據(jù)進(jìn)行統(tǒng)一收集、并對(duì)數(shù)據(jù)進(jìn)行過(guò)濾、分析、修飾等操作,然后將數(shù)據(jù)發(fā)送到用戶指定的存儲(chǔ)數(shù)據(jù)庫(kù)。Logstash由input、filter和output三個(gè)組件組成。input組件可指定不同的數(shù)據(jù)源進(jìn)行數(shù)據(jù)采集,filter組件可對(duì)采集數(shù)據(jù)進(jìn)一步的過(guò)濾處理以方便后續(xù)的分析與存儲(chǔ)操作,output組件則可指定數(shù)據(jù)最后上報(bào)的位置。
Kibana:是一個(gè)開(kāi)源的日志數(shù)據(jù)分析、搜索和可視化操作平臺(tái),專門為Elasticsearch設(shè)計(jì)開(kāi)發(fā),可以對(duì)其中的日志數(shù)據(jù)進(jìn)行查詢和分析,并以統(tǒng)計(jì)圖表的方式展示存放在Elasticsearch索引里的數(shù)據(jù)。Kibana提供了時(shí)序圖、區(qū)域圖和報(bào)表等常用統(tǒng)計(jì)圖表,通過(guò)Vega聲明性語(yǔ)法可以定制所需要的可視化統(tǒng)計(jì)圖形。Kibana通??梢陨蒆TTP狀態(tài)碼的餅圖、HTTP Request請(qǐng)求的響應(yīng)時(shí)間柱狀圖、統(tǒng)計(jì)URL平均響應(yīng)時(shí)間等圖表,做成數(shù)據(jù)大屏。
2? ELK日志采集
2.1? Logstash的性能問(wèn)題
在實(shí)際部署中,Logstash通常作為ELK Stack中的日志采集器(Agent),需要在設(shè)備節(jié)點(diǎn)上安裝Logstash Agent,由其采集配置的日志數(shù)據(jù)上報(bào)至ELK日志分析平臺(tái)。如在部署Logstash Agent后,發(fā)現(xiàn)部分性能較低的節(jié)點(diǎn)內(nèi)存使用率居高不下,可以通過(guò)簡(jiǎn)單排查發(fā)現(xiàn)是由于Logstash采集日志程序消耗了過(guò)多的內(nèi)存資源。因?yàn)長(zhǎng)ogstash是由Ruby語(yǔ)言開(kāi)發(fā)的,并需要通過(guò)JRuby解析器運(yùn)行在JVM環(huán)境下(JRuby是由Java語(yǔ)言編寫的Ruby解析器),導(dǎo)致該程序的內(nèi)存與CPU資源消耗比想象的要高,特別在一些低性能節(jié)點(diǎn)上會(huì)比較明顯,嚴(yán)重的可能會(huì)導(dǎo)致正常的服務(wù)產(chǎn)生異常,系統(tǒng)無(wú)法正常工作。如果還使用Logstash的filter插件對(duì)日志數(shù)據(jù)進(jìn)行注釋和索引等操作時(shí),Logstash可能會(huì)因?yàn)椴僮鞯膹?fù)雜性導(dǎo)致其變成處理器、內(nèi)存和硬盤密集型工具。通常情況下,可以根據(jù)設(shè)備節(jié)點(diǎn)的性能調(diào)整各個(gè)Logstash的啟動(dòng)參數(shù),通過(guò)-Xms和-Xmx標(biāo)志為其設(shè)置JVM的初始內(nèi)存堆大小,能夠一定程度地優(yōu)化Logstash的性能,但是在設(shè)備節(jié)點(diǎn)數(shù)據(jù)數(shù)目眾多的情況下,這樣設(shè)置和后續(xù)修改的操作工作量是非常大的。因此在節(jié)點(diǎn)有性能問(wèn)題約束的情況下,僅僅使用Logstash作為日志采集器并不合適,在這些節(jié)點(diǎn)可以根據(jù)需要直接通過(guò)其他程序?qū)⑷罩拘畔⒅苯由蠄?bào)至ELK日志平臺(tái),例如rsyslog。
2.2? Beats替代Logstash作為日志采集器
Beats是多個(gè)單一功能的輕量級(jí)數(shù)據(jù)采集器工具集(Agent)的統(tǒng)稱,Beats工具集軟件基于Go語(yǔ)言開(kāi)發(fā),占用資源比使用Ruby開(kāi)發(fā)的Logstash更少,執(zhí)行效率更高,并且依賴占用資源少部署方便。Beats工具集包括了Filebeat(文件采集器)、Metricbeat(系統(tǒng)指標(biāo)采集)、Packetbeat(網(wǎng)絡(luò)數(shù)據(jù)采集)和Heartbeat(服務(wù)心跳采集)等多種數(shù)據(jù)類型的采集器,每個(gè)工具集只做與之相關(guān)的數(shù)據(jù)類型采集,它們可以將數(shù)據(jù)上報(bào)到Elasticsearch做集中處理,也可以發(fā)送數(shù)據(jù)到ELK日志平臺(tái)的Logstash中進(jìn)行進(jìn)一步的加工,對(duì)數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換或者解析。這樣就可以在設(shè)備節(jié)點(diǎn)端采集日志時(shí),只采集原始的日志數(shù)據(jù),把日志數(shù)據(jù)的處理加工操作交給性能更強(qiáng)大的ELK日志分析平臺(tái)完成,降低設(shè)備節(jié)點(diǎn)的內(nèi)存以及CPU和IO的性能消耗,保障業(yè)務(wù)服務(wù)的正常運(yùn)行。
下面通過(guò)模擬日志數(shù)據(jù)文件對(duì)Logstash和Filebeat(日志文件采集器)進(jìn)行測(cè)試對(duì)比,兩者在測(cè)試環(huán)境一樣的情況下,經(jīng)過(guò)5次每次20分鐘的測(cè)試,取結(jié)果的平均值如表1所示。可以看到Filebeat的整體資源占用比Logstash要少很多,這樣在低性能的設(shè)備節(jié)點(diǎn)中具有很大的優(yōu)勢(shì),Beats采集器專注于數(shù)據(jù)的采集上報(bào),支持TLS雙向認(rèn)證加密鏈接,保證Beats只向可信的Logstash端點(diǎn)上報(bào)加密數(shù)據(jù),避免數(shù)據(jù)在傳輸過(guò)程中泄露,還支持背壓敏感協(xié)議,當(dāng)上報(bào)的目的端Logstash繁忙,來(lái)不及處理的時(shí)候會(huì)自動(dòng)降低日志采集速率,不僅避免網(wǎng)絡(luò)數(shù)據(jù)擁堵,還可以降低設(shè)備節(jié)點(diǎn)端的資源消耗。
3? 結(jié)? 論
在云計(jì)算和大數(shù)據(jù)時(shí)代,隨著設(shè)備節(jié)點(diǎn)的規(guī)模不斷擴(kuò)大,應(yīng)用服務(wù)的日志數(shù)據(jù)維護(hù)管理越來(lái)越重要,一個(gè)優(yōu)秀的日志分析平臺(tái)通過(guò)對(duì)日志數(shù)據(jù)的處理可很好地分析解決業(yè)務(wù)服務(wù)中的問(wèn)題,也可通過(guò)配置實(shí)現(xiàn)監(jiān)視業(yè)務(wù)服務(wù)發(fā)生異常時(shí)的自動(dòng)化告警,為運(yùn)維開(kāi)發(fā)人員能夠迅速地介入處理故障提供了保障。
ELK日志分析平臺(tái)不僅適用于解決大量業(yè)務(wù)服務(wù)器的日志快速查詢分析等問(wèn)題,還可進(jìn)行復(fù)雜的定制日志分析功能,尤其針對(duì)各種不同的業(yè)務(wù)服務(wù)日志,通過(guò)Logstash自定義過(guò)濾與規(guī)則提取,將日志數(shù)據(jù)上報(bào)到Elasticsearch進(jìn)行存儲(chǔ),之后可在Kibana個(gè)性化定制圖表展示數(shù)據(jù)大屏,方便運(yùn)維開(kāi)發(fā)人員對(duì)日志數(shù)據(jù)進(jìn)行監(jiān)控與分析。針對(duì)部分設(shè)備節(jié)點(diǎn)性能有限的情況,還可使用其他日志采集器(如Filebeat)替代Logstash進(jìn)行數(shù)據(jù)采集,ELK Stack日志處理平臺(tái)可通過(guò)配置各種輸入源來(lái)解決采集端的需求,使其應(yīng)用場(chǎng)景得到極大地?cái)U(kuò)充。
參考文獻(xiàn):
[1] 饒琛琳.ELK Stack權(quán)威指南 [M].第2版.北京:機(jī)械工業(yè)出版社,2017:98-175.
[2] 胡慶寶,姜曉巍,石京燕,等.基于Elasticsearch的實(shí)時(shí)集群日志采集和分析系統(tǒng)實(shí)現(xiàn) [J].科研信息化技術(shù)與應(yīng)用,2016,7(3):13-18.
[3] 陳建娟,劉行行.基于Kubernetes的分布式ELK日志分析系統(tǒng) [J].電子技術(shù)與軟件工程,2016(15):211-212+214.
[4] [美]拉斐爾·酷奇,馬雷克·羅戈任斯基.深入理解Elasticsearch [M].第2版.張世武,余洪淼,商旦,譯.北京:機(jī)械工業(yè)出版社,2017:159-181.
[5] [美]拉杜·喬戈,馬修·李·欣曼,羅伊·羅素.Elasticsearch實(shí)戰(zhàn) [M].黃申,譯.北京:人民郵電出版社,2018:268-310.
[6] Elasticsearch.Logstash Reference [EB/OL].https://www.elastic.co/guide/en/logstash/7.0/index.html,2019-06-25.
[7] Elasticsearch.Filebeat Reference [EB/OL].https://www.elastic.co/guide/en/beats/filebeat/7.0/index.html,2019-06-25.
作者簡(jiǎn)介:李欽(1986-),男,漢族,廣西南寧人,軟件工程
師,本科,研究方向:計(jì)算機(jī)軟件、服務(wù)器運(yùn)維、物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì);楊程(1992-),男,漢族,安徽桐城人,射頻工程師,畢業(yè)于福建農(nóng)林大學(xué),工學(xué)本科,研究方向:微波射頻系統(tǒng)、物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)。