楊 波,王 瓊,魏 軍
(國網(wǎng)甘肅省電力公司 信息通信公司,甘肅 蘭州 730050)
本文提出了基于Logstash[1-2]、數(shù)據(jù)處理、Elasticsearch[3]以及Grafana的海量日志分析系統(tǒng)。Logstash是用于采集數(shù)據(jù)的核心組件;數(shù)據(jù)處理包括實(shí)時(shí)數(shù)據(jù)處理和離線數(shù)據(jù)處理,其中實(shí)時(shí)數(shù)據(jù)處理基于Flink,離線數(shù)據(jù)處理基于HDFS和Hive;Elasticsearch是數(shù)據(jù)存儲(chǔ)和搜索引擎;通過Grafana能完成數(shù)據(jù)可視化分析。構(gòu)建的日志分析系統(tǒng)具有成本低、實(shí)時(shí)性好、可擴(kuò)展性高、快速開發(fā)以及節(jié)約資源等優(yōu)點(diǎn)。
數(shù)據(jù)中心主要由網(wǎng)絡(luò)基礎(chǔ)設(shè)施和網(wǎng)絡(luò)服務(wù)及應(yīng)用組成。日志[4]文件能詳細(xì)記錄系統(tǒng)每天發(fā)生的各類事件,對(duì)問題定位起著非常重要的作用。網(wǎng)絡(luò)系統(tǒng)的異構(gòu)性、設(shè)備的多樣性、軟件環(huán)境的復(fù)雜性,使得各類基礎(chǔ)設(shè)施及軟件均會(huì)產(chǎn)生大量的日志數(shù)據(jù)。數(shù)據(jù)中心日志的主要來源[5]有以下幾方面。
系統(tǒng)日志主要反映系統(tǒng)級(jí)別的運(yùn)行情況,主要包括操作系統(tǒng)級(jí)別的日志,即物理機(jī)、宿主機(jī)以及虛擬機(jī)等部署有操作系統(tǒng)的系統(tǒng)日志。一般主要關(guān)注系統(tǒng)操作日志、安全日志以及定時(shí)任務(wù)日志等。
應(yīng)用日志一般分為應(yīng)用服務(wù)日志和業(yè)務(wù)操作日志。應(yīng)用服務(wù)日志包含Tomcat、Nginx運(yùn)行時(shí)產(chǎn)生的日志等,通過該日志可以看到應(yīng)用服務(wù)運(yùn)行的健康狀況;業(yè)務(wù)操作日志主要是業(yè)務(wù)系統(tǒng)將部分業(yè)務(wù)操作或業(yè)務(wù)錯(cuò)誤寫到日志中,可能單獨(dú)一個(gè)文件,也可能集成到應(yīng)用服務(wù)日中。業(yè)務(wù)操作日志是進(jìn)行業(yè)務(wù)審計(jì)、業(yè)務(wù)監(jiān)控的重要數(shù)據(jù)源。
數(shù)據(jù)庫日志反映著數(shù)據(jù)庫每一步每一個(gè)事務(wù)的操作及數(shù)據(jù)庫運(yùn)行的監(jiān)控狀況。進(jìn)行日志監(jiān)控和分析時(shí),數(shù)據(jù)庫是不可或缺的。
設(shè)備日志可以直觀地反映出設(shè)備的運(yùn)行狀況,且設(shè)備出現(xiàn)問題時(shí),可以通過日志快速準(zhǔn)確地找到原因,如交換機(jī)日志、防火墻日志等。通過防火墻日志可以看出系統(tǒng)是否遭受攻擊,通過交換機(jī)日志可以看到網(wǎng)絡(luò)流量是否出現(xiàn)陡增陡降等突發(fā)狀況。
當(dāng)前,日志采集主要有單機(jī)部署和分布式部署兩種方式。為了方便日志集中管理,應(yīng)采用分布式日志采集的方式。網(wǎng)絡(luò)管理中常用的采集日志數(shù)據(jù)的方式包括文本方式采集、SNMP Trap方式采集、Syslog方式采集以及其他采集方式,如Telnet采集(遠(yuǎn)程控制命令采集)、串口采集等。
文本方式屬于被動(dòng)式采集日志數(shù)據(jù)的方式,傳送的信息量相對(duì)較少且只有專業(yè)人員才能看懂,只能在采集日志數(shù)據(jù)范圍小、速度比較慢的網(wǎng)絡(luò)中使用。
日志存儲(chǔ)[6-7]的方式主要包括日志文件存儲(chǔ)、數(shù)據(jù)庫存儲(chǔ)、HDFS存儲(chǔ)和Elasticsearch存儲(chǔ)等。日志管理者需要依據(jù)當(dāng)前業(yè)務(wù)的特點(diǎn),如數(shù)據(jù)類型、數(shù)據(jù)大小、數(shù)據(jù)存儲(chǔ)成本、檢索速度和存檔時(shí)間等,定制化相應(yīng)的日志存儲(chǔ)策略。在日志分析領(lǐng)域,Elasticsearch的優(yōu)點(diǎn)主要為靈活易用、插件擴(kuò)展、準(zhǔn)實(shí)時(shí)搜索、具有一定的統(tǒng)計(jì)分析功能。比如,Elasticsearch支持大量的Aggregation、豐富的Restful接口。對(duì)于構(gòu)建面向數(shù)據(jù)中心的大規(guī)模日志存儲(chǔ)分析系統(tǒng),可以采用Elasticsearch集群,實(shí)現(xiàn)對(duì)日志數(shù)據(jù)的實(shí)時(shí)存儲(chǔ)與檢索,實(shí)現(xiàn)對(duì)原始日志和處理后的日志數(shù)據(jù)的分別存儲(chǔ)。
日志可視化[8]是為了將經(jīng)過大數(shù)據(jù)分析的日志信息以簡潔、直觀的方式展現(xiàn),幫助數(shù)據(jù)中心運(yùn)維人員、管理人員等更方便地讀懂?dāng)?shù)據(jù)。目前,日志可視化技術(shù)主要有Kibana和Grafana兩種。
Kibana是一個(gè)分析和可視化平臺(tái),可以瀏覽、可視化存儲(chǔ)在ES集群上排名靠前的日志數(shù)據(jù),并構(gòu)建儀表盤。Kibana的儀表盤是公開的,沒有進(jìn)行基于角色的訪問控制,如果需要針對(duì)多個(gè)用戶設(shè)置不同的權(quán)限級(jí)別,則需要額外采購Shield。雖然Kibana有大量的圖表類型,但是它們之上的控制仍是最初的限制。
Grafana是一個(gè)開源儀表盤工具,最新的版本可以用于Elasticsearch等數(shù)據(jù)源。它能夠幫助用戶更簡單地創(chuàng)建和編輯儀表盤,含有一個(gè)獨(dú)一無二的Graphite目標(biāo)解析器,從而可以簡化度量和函數(shù)的編輯。Grafana的面板插件有許多不同方式的可視化指標(biāo)和日志,官方庫中具有豐富的儀表盤插件,如熱圖、折線圖以及圖表等多種展示方式。Grafana可以靈活地瀏覽和使用圖表,且針對(duì)每個(gè)數(shù)據(jù)源都有一個(gè)特定的查詢編輯器,是針對(duì)數(shù)據(jù)源所具備的特性和能力特別定制的。
當(dāng)前對(duì)數(shù)據(jù)中心日志數(shù)據(jù)的存儲(chǔ)需要分為實(shí)時(shí)處理和離線處理[9]。實(shí)時(shí)處理是為了滿足數(shù)據(jù)可視化對(duì)數(shù)據(jù)的及時(shí)性需求;離線處理是為了應(yīng)對(duì)大批量日志數(shù)據(jù)的處理,通過將日志數(shù)據(jù)進(jìn)行切片等處理,全面準(zhǔn)確地對(duì)日志數(shù)據(jù)進(jìn)行分析,從中獲取有效信息。目前,F(xiàn)link和Hive作為實(shí)時(shí)處理和離線處理的框架,在大數(shù)據(jù)分析中得到廣泛使用。
經(jīng)過對(duì)比分析國內(nèi)外應(yīng)用現(xiàn)狀,并結(jié)合當(dāng)前數(shù)據(jù)中心業(yè)務(wù)發(fā)展的特點(diǎn)[10],面向數(shù)據(jù)中心的日志分析平臺(tái)應(yīng)該滿足以下功能:(1)能夠全面、準(zhǔn)確地采集數(shù)據(jù)中心相關(guān)設(shè)備和應(yīng)用系統(tǒng)的各類日志數(shù)據(jù);(2)能夠?qū)Σ杉降臄?shù)據(jù)進(jìn)行實(shí)時(shí)處理和離線大數(shù)據(jù)分析;(3)能夠以可視化的方式對(duì)日志分析統(tǒng)計(jì)數(shù)據(jù)進(jìn)行展示。
日志分析平臺(tái)架構(gòu)如圖1所示。從圖1可知,該平臺(tái)主要包括日志采集模塊、數(shù)據(jù)處理模塊、ES集群模塊和可視化分析模塊。

圖1 日志分析平臺(tái)架構(gòu)圖
3.3.1 日志采集模塊
Logstash是一個(gè)開源數(shù)據(jù)收集引擎,具有實(shí)時(shí)管道功能。Logstash是一個(gè)應(yīng)用程序日志、事件的傳輸、處理、管理與搜索的平臺(tái),能夠?qū)?yīng)用程序日志進(jìn)行收集管理,提供Web接口用于查找與統(tǒng)計(jì)。Logstash可以動(dòng)態(tài)地將來自不同數(shù)據(jù)源的數(shù)據(jù)統(tǒng)一起來,并將數(shù)據(jù)標(biāo)準(zhǔn)化到所選擇的目的地。Logstash數(shù)據(jù)處理流程如圖2所示。

圖2 Logstash數(shù)據(jù)處理流程圖
輸入:Logstash支持各種形式的數(shù)據(jù)輸入,可以在同一時(shí)間從不同的來源捕捉事件,能以連續(xù)的流式傳輸方式,從日志、指標(biāo)、Web應(yīng)用以及數(shù)據(jù)存儲(chǔ)等采集數(shù)據(jù)。
解析/轉(zhuǎn)換:數(shù)據(jù)從源傳輸?shù)酱鎯?chǔ)庫的過程中,Logstash過濾器能解析各個(gè)事件,識(shí)別已命名的字段及構(gòu)建結(jié)構(gòu),并將它們轉(zhuǎn)換成通用格式,以便輕松迅速地分析。
輸出:Logstash提供多種輸出選擇,支持將數(shù)據(jù)發(fā)送到指定的地方,并且能夠靈活地解鎖下游用例。
由于在分布式系統(tǒng)中數(shù)據(jù)都分散在不同的容器或不同的物理機(jī)上,每一份數(shù)據(jù)往往不完整,因此需要Logstash這樣的工具將數(shù)據(jù)收集起來。Logstash管道可以配置多個(gè)輸入插件,將不同源頭的數(shù)據(jù)整合起來進(jìn)行統(tǒng)一處理。Logstash管道也可以配置多個(gè)輸出插件,每個(gè)輸出插件代表一種數(shù)據(jù)處理的業(yè)務(wù)需求。比如,對(duì)日志數(shù)據(jù)存檔可以使用S3輸出插件,將日志數(shù)據(jù)歸檔到S3存儲(chǔ)服務(wù)器上。
3.3.2 數(shù)據(jù)處理模塊
Flink是一個(gè)分布式大數(shù)據(jù)處理引擎,可對(duì)有限數(shù)據(jù)流和無限數(shù)據(jù)流進(jìn)行有狀態(tài)計(jì)算;可以部署在各種集群環(huán)境中,對(duì)各種大小的數(shù)據(jù)規(guī)模進(jìn)行快速計(jì)算。
Flink為用戶提供了更強(qiáng)大的計(jì)算能力和更易用的編程接口。Runtime和SQL層批流統(tǒng)一,提供高吞吐的掩飾計(jì)算能力和更強(qiáng)大的SQL支持;與Hadoop Yarn/Apache Mesos/Kubernetes集成,并且支持單機(jī)模式運(yùn)行。Flink的作業(yè)可被分解成百上千個(gè)任務(wù),分布在集群中并發(fā)執(zhí)行。Flink系統(tǒng)架構(gòu)如圖3所示。

圖3 Flink系統(tǒng)架構(gòu)圖
為了滿足數(shù)據(jù)中心日志數(shù)據(jù)及時(shí)、準(zhǔn)確傳輸數(shù)據(jù)的需求,采用Flink實(shí)時(shí)流處理技術(shù)框架,將Logstash采集到的數(shù)據(jù)實(shí)時(shí)傳遞給ES集群進(jìn)行搜索、分析。
HDFS是Hadoop內(nèi)置的分布式文件系統(tǒng),是“一次寫入、多次讀取”模型。該模型降低了并發(fā)性控制要求,簡化了數(shù)據(jù)聚合性,支持高吞吐量訪問。HDFS架構(gòu)包含NameNode、DataNode和備用NameNode。HDFS具有主/從架構(gòu),具體如圖4所示。

圖4 HDFS架構(gòu)
NameNode:HDFS群集包含單個(gè)NameNode(主服務(wù)器),管理文件系統(tǒng)命名空間,并控制客戶端對(duì)文件的訪問權(quán)限。同時(shí),它還維護(hù)和管理文件系統(tǒng)元數(shù)據(jù),如由哪些塊構(gòu)成文件以及存儲(chǔ)這些塊的數(shù)據(jù)節(jié)點(diǎn)。
DataNode可以有多個(gè)DataNode,通常是集群中每個(gè)節(jié)點(diǎn)有一個(gè)DataNode,其負(fù)責(zé)管理運(yùn)行節(jié)點(diǎn)的存儲(chǔ)訪問。HDFS中的DataNode存儲(chǔ)實(shí)際數(shù)據(jù),可以添加更多的DataNode來增加可用空間。
備用NameNode:備用NameNode服務(wù)并非真正的備用NameNode。具體來說,它并不為NameNode提供高可用性(HA)。
選用HDFS作為底層存儲(chǔ)是基于其支持多種數(shù)據(jù)結(jié)構(gòu)(結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化)的存儲(chǔ),存儲(chǔ)空間可以無限大,擴(kuò)展簡易,支持大文件存儲(chǔ)等特點(diǎn),這與數(shù)據(jù)中心的業(yè)務(wù)特征極其吻合。
Hive[11-12]是一種數(shù)據(jù)倉庫。Hive中的數(shù)據(jù)存儲(chǔ)于文件系統(tǒng)中,能提供方便的訪問數(shù)據(jù)倉庫數(shù)據(jù)的HQL方法。該方法將SQL翻譯成MapReduce,能夠很好地解決離線處理中需要批量處理結(jié)果的查詢。Hive將元數(shù)據(jù)存放在metastore中,Hive中的metastore有3種工作方式:(1)內(nèi)嵌Derby方式:在同一時(shí)間只能發(fā)有一個(gè)進(jìn)程連接使用數(shù)據(jù)庫;(2)Local方式:使用本地Mysql數(shù)據(jù)庫存儲(chǔ)元數(shù)據(jù);(3)Remote方式:使用遠(yuǎn)程已經(jīng)搭建完成的Mysql數(shù)據(jù)庫存儲(chǔ)元數(shù)據(jù)。
3.3.3 日志存儲(chǔ)模塊
Elasticsearch[13]是一個(gè)基于Lucene構(gòu)建的開源、分布式、Restful接口的全文搜索引擎。Elasticsearch架構(gòu)如圖5所示。

圖5 Elasticsearch架構(gòu)圖
Elasticsearch是分布式的實(shí)時(shí)文件存儲(chǔ),每個(gè)字段都能被索引并可被搜索,可以擴(kuò)展到上百臺(tái)服務(wù)器,處理PB級(jí)結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù),且所有的功能被集成到一臺(tái)服務(wù)器上,相關(guān)應(yīng)用可以通過RESTful API、各種語言的客戶端或命令行與之交互。因此,Elasticsearch能夠滿足日志存儲(chǔ)對(duì)穩(wěn)定性、容錯(cuò)性、高性能以及高可擴(kuò)展性等要求,且能保證集群的負(fù)載均衡。
3.3.4 日志可視化分析模塊
Grafana[14]是用于可視化大型測(cè)量數(shù)據(jù)的開源程序,它提供了強(qiáng)大和優(yōu)雅的方式去創(chuàng)建、共享、瀏覽數(shù)據(jù)。Grafana支持許多不同的數(shù)據(jù)源。目前,Grafana提供了對(duì)MySQL、Influx DB、Prometheus以及Elasticsearch等的支持,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)的可視化工作。
根據(jù)數(shù)據(jù)中心日志管理平臺(tái)的功能需求分析,平臺(tái)主要由數(shù)據(jù)中心基礎(chǔ)IT環(huán)境、日志采集集群、實(shí)時(shí)/離線數(shù)據(jù)處理集群、Elasticsearch日志存儲(chǔ)集群等組成,系統(tǒng)物理結(jié)構(gòu)如圖6所示。數(shù)據(jù)中心基礎(chǔ)IT環(huán)境是日志產(chǎn)生的主要來源;日志采集集群由多臺(tái)服務(wù)器組成,基于Logstash構(gòu)建的日志采集集群;基于Elasticsearch構(gòu)建由主節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)組成的日志存儲(chǔ)集群,實(shí)現(xiàn)日志數(shù)據(jù)的存儲(chǔ)。

圖6 系統(tǒng)物理架構(gòu)
隨著云計(jì)算技術(shù)的發(fā)展,數(shù)據(jù)中心[15]各種網(wǎng)絡(luò)設(shè)備的增加,不同種類、不同類型、不同作用的日志也相應(yīng)增多。本文首先分析了數(shù)據(jù)中心日志的來源,詳細(xì)介紹了日志采集、日志數(shù)據(jù)處理、日志存儲(chǔ)和日志可視化分析技術(shù),并結(jié)合數(shù)據(jù)中心的特點(diǎn),提出一種面向數(shù)據(jù)中心的日志分析平臺(tái)架構(gòu),深入討論了日志分析平臺(tái)設(shè)計(jì)方案,對(duì)日志分析平臺(tái)的建設(shè)具有一定的借鑒意義。