楊 波,王 瓊,魏 軍
(國網甘肅省電力公司 信息通信公司,甘肅 蘭州 730050)
本文提出了基于Logstash[1-2]、數(shù)據處理、Elasticsearch[3]以及Grafana的海量日志分析系統(tǒng)。Logstash是用于采集數(shù)據的核心組件;數(shù)據處理包括實時數(shù)據處理和離線數(shù)據處理,其中實時數(shù)據處理基于Flink,離線數(shù)據處理基于HDFS和Hive;Elasticsearch是數(shù)據存儲和搜索引擎;通過Grafana能完成數(shù)據可視化分析。構建的日志分析系統(tǒng)具有成本低、實時性好、可擴展性高、快速開發(fā)以及節(jié)約資源等優(yōu)點。
數(shù)據中心主要由網絡基礎設施和網絡服務及應用組成。日志[4]文件能詳細記錄系統(tǒng)每天發(fā)生的各類事件,對問題定位起著非常重要的作用。網絡系統(tǒng)的異構性、設備的多樣性、軟件環(huán)境的復雜性,使得各類基礎設施及軟件均會產生大量的日志數(shù)據。數(shù)據中心日志的主要來源[5]有以下幾方面。
系統(tǒng)日志主要反映系統(tǒng)級別的運行情況,主要包括操作系統(tǒng)級別的日志,即物理機、宿主機以及虛擬機等部署有操作系統(tǒng)的系統(tǒng)日志。一般主要關注系統(tǒng)操作日志、安全日志以及定時任務日志等。
應用日志一般分為應用服務日志和業(yè)務操作日志。應用服務日志包含Tomcat、Nginx運行時產生的日志等,通過該日志可以看到應用服務運行的健康狀況;業(yè)務操作日志主要是業(yè)務系統(tǒng)將部分業(yè)務操作或業(yè)務錯誤寫到日志中,可能單獨一個文件,也可能集成到應用服務日中。業(yè)務操作日志是進行業(yè)務審計、業(yè)務監(jiān)控的重要數(shù)據源。
數(shù)據庫日志反映著數(shù)據庫每一步每一個事務的操作及數(shù)據庫運行的監(jiān)控狀況。進行日志監(jiān)控和分析時,數(shù)據庫是不可或缺的。
設備日志可以直觀地反映出設備的運行狀況,且設備出現(xiàn)問題時,可以通過日志快速準確地找到原因,如交換機日志、防火墻日志等。通過防火墻日志可以看出系統(tǒng)是否遭受攻擊,通過交換機日志可以看到網絡流量是否出現(xiàn)陡增陡降等突發(fā)狀況。
當前,日志采集主要有單機部署和分布式部署兩種方式。為了方便日志集中管理,應采用分布式日志采集的方式。網絡管理中常用的采集日志數(shù)據的方式包括文本方式采集、SNMP Trap方式采集、Syslog方式采集以及其他采集方式,如Telnet采集(遠程控制命令采集)、串口采集等。
文本方式屬于被動式采集日志數(shù)據的方式,傳送的信息量相對較少且只有專業(yè)人員才能看懂,只能在采集日志數(shù)據范圍小、速度比較慢的網絡中使用。
日志存儲[6-7]的方式主要包括日志文件存儲、數(shù)據庫存儲、HDFS存儲和Elasticsearch存儲等。日志管理者需要依據當前業(yè)務的特點,如數(shù)據類型、數(shù)據大小、數(shù)據存儲成本、檢索速度和存檔時間等,定制化相應的日志存儲策略。在日志分析領域,Elasticsearch的優(yōu)點主要為靈活易用、插件擴展、準實時搜索、具有一定的統(tǒng)計分析功能。比如,Elasticsearch支持大量的Aggregation、豐富的Restful接口。對于構建面向數(shù)據中心的大規(guī)模日志存儲分析系統(tǒng),可以采用Elasticsearch集群,實現(xiàn)對日志數(shù)據的實時存儲與檢索,實現(xiàn)對原始日志和處理后的日志數(shù)據的分別存儲。
日志可視化[8]是為了將經過大數(shù)據分析的日志信息以簡潔、直觀的方式展現(xiàn),幫助數(shù)據中心運維人員、管理人員等更方便地讀懂數(shù)據。目前,日志可視化技術主要有Kibana和Grafana兩種。
Kibana是一個分析和可視化平臺,可以瀏覽、可視化存儲在ES集群上排名靠前的日志數(shù)據,并構建儀表盤。Kibana的儀表盤是公開的,沒有進行基于角色的訪問控制,如果需要針對多個用戶設置不同的權限級別,則需要額外采購Shield。雖然Kibana有大量的圖表類型,但是它們之上的控制仍是最初的限制。
Grafana是一個開源儀表盤工具,最新的版本可以用于Elasticsearch等數(shù)據源。它能夠幫助用戶更簡單地創(chuàng)建和編輯儀表盤,含有一個獨一無二的Graphite目標解析器,從而可以簡化度量和函數(shù)的編輯。Grafana的面板插件有許多不同方式的可視化指標和日志,官方庫中具有豐富的儀表盤插件,如熱圖、折線圖以及圖表等多種展示方式。Grafana可以靈活地瀏覽和使用圖表,且針對每個數(shù)據源都有一個特定的查詢編輯器,是針對數(shù)據源所具備的特性和能力特別定制的。
當前對數(shù)據中心日志數(shù)據的存儲需要分為實時處理和離線處理[9]。實時處理是為了滿足數(shù)據可視化對數(shù)據的及時性需求;離線處理是為了應對大批量日志數(shù)據的處理,通過將日志數(shù)據進行切片等處理,全面準確地對日志數(shù)據進行分析,從中獲取有效信息。目前,F(xiàn)link和Hive作為實時處理和離線處理的框架,在大數(shù)據分析中得到廣泛使用。
經過對比分析國內外應用現(xiàn)狀,并結合當前數(shù)據中心業(yè)務發(fā)展的特點[10],面向數(shù)據中心的日志分析平臺應該滿足以下功能:(1)能夠全面、準確地采集數(shù)據中心相關設備和應用系統(tǒng)的各類日志數(shù)據;(2)能夠對采集到的數(shù)據進行實時處理和離線大數(shù)據分析;(3)能夠以可視化的方式對日志分析統(tǒng)計數(shù)據進行展示。
日志分析平臺架構如圖1所示。從圖1可知,該平臺主要包括日志采集模塊、數(shù)據處理模塊、ES集群模塊和可視化分析模塊。
圖1 日志分析平臺架構圖
3.3.1 日志采集模塊
Logstash是一個開源數(shù)據收集引擎,具有實時管道功能。Logstash是一個應用程序日志、事件的傳輸、處理、管理與搜索的平臺,能夠對應用程序日志進行收集管理,提供Web接口用于查找與統(tǒng)計。Logstash可以動態(tài)地將來自不同數(shù)據源的數(shù)據統(tǒng)一起來,并將數(shù)據標準化到所選擇的目的地。Logstash數(shù)據處理流程如圖2所示。
圖2 Logstash數(shù)據處理流程圖
輸入:Logstash支持各種形式的數(shù)據輸入,可以在同一時間從不同的來源捕捉事件,能以連續(xù)的流式傳輸方式,從日志、指標、Web應用以及數(shù)據存儲等采集數(shù)據。
解析/轉換:數(shù)據從源傳輸?shù)酱鎯斓倪^程中,Logstash過濾器能解析各個事件,識別已命名的字段及構建結構,并將它們轉換成通用格式,以便輕松迅速地分析。
輸出:Logstash提供多種輸出選擇,支持將數(shù)據發(fā)送到指定的地方,并且能夠靈活地解鎖下游用例。
由于在分布式系統(tǒng)中數(shù)據都分散在不同的容器或不同的物理機上,每一份數(shù)據往往不完整,因此需要Logstash這樣的工具將數(shù)據收集起來。Logstash管道可以配置多個輸入插件,將不同源頭的數(shù)據整合起來進行統(tǒng)一處理。Logstash管道也可以配置多個輸出插件,每個輸出插件代表一種數(shù)據處理的業(yè)務需求。比如,對日志數(shù)據存檔可以使用S3輸出插件,將日志數(shù)據歸檔到S3存儲服務器上。
3.3.2 數(shù)據處理模塊
Flink是一個分布式大數(shù)據處理引擎,可對有限數(shù)據流和無限數(shù)據流進行有狀態(tài)計算;可以部署在各種集群環(huán)境中,對各種大小的數(shù)據規(guī)模進行快速計算。
Flink為用戶提供了更強大的計算能力和更易用的編程接口。Runtime和SQL層批流統(tǒng)一,提供高吞吐的掩飾計算能力和更強大的SQL支持;與Hadoop Yarn/Apache Mesos/Kubernetes集成,并且支持單機模式運行。Flink的作業(yè)可被分解成百上千個任務,分布在集群中并發(fā)執(zhí)行。Flink系統(tǒng)架構如圖3所示。
圖3 Flink系統(tǒng)架構圖
為了滿足數(shù)據中心日志數(shù)據及時、準確傳輸數(shù)據的需求,采用Flink實時流處理技術框架,將Logstash采集到的數(shù)據實時傳遞給ES集群進行搜索、分析。
HDFS是Hadoop內置的分布式文件系統(tǒng),是“一次寫入、多次讀取”模型。該模型降低了并發(fā)性控制要求,簡化了數(shù)據聚合性,支持高吞吐量訪問。HDFS架構包含NameNode、DataNode和備用NameNode。HDFS具有主/從架構,具體如圖4所示。
圖4 HDFS架構
NameNode:HDFS群集包含單個NameNode(主服務器),管理文件系統(tǒng)命名空間,并控制客戶端對文件的訪問權限。同時,它還維護和管理文件系統(tǒng)元數(shù)據,如由哪些塊構成文件以及存儲這些塊的數(shù)據節(jié)點。
DataNode可以有多個DataNode,通常是集群中每個節(jié)點有一個DataNode,其負責管理運行節(jié)點的存儲訪問。HDFS中的DataNode存儲實際數(shù)據,可以添加更多的DataNode來增加可用空間。
備用NameNode:備用NameNode服務并非真正的備用NameNode。具體來說,它并不為NameNode提供高可用性(HA)。
選用HDFS作為底層存儲是基于其支持多種數(shù)據結構(結構化數(shù)據、半結構化數(shù)據、非結構化)的存儲,存儲空間可以無限大,擴展簡易,支持大文件存儲等特點,這與數(shù)據中心的業(yè)務特征極其吻合。
Hive[11-12]是一種數(shù)據倉庫。Hive中的數(shù)據存儲于文件系統(tǒng)中,能提供方便的訪問數(shù)據倉庫數(shù)據的HQL方法。該方法將SQL翻譯成MapReduce,能夠很好地解決離線處理中需要批量處理結果的查詢。Hive將元數(shù)據存放在metastore中,Hive中的metastore有3種工作方式:(1)內嵌Derby方式:在同一時間只能發(fā)有一個進程連接使用數(shù)據庫;(2)Local方式:使用本地Mysql數(shù)據庫存儲元數(shù)據;(3)Remote方式:使用遠程已經搭建完成的Mysql數(shù)據庫存儲元數(shù)據。
3.3.3 日志存儲模塊
Elasticsearch[13]是一個基于Lucene構建的開源、分布式、Restful接口的全文搜索引擎。Elasticsearch架構如圖5所示。
圖5 Elasticsearch架構圖
Elasticsearch是分布式的實時文件存儲,每個字段都能被索引并可被搜索,可以擴展到上百臺服務器,處理PB級結構化或非結構化數(shù)據,且所有的功能被集成到一臺服務器上,相關應用可以通過RESTful API、各種語言的客戶端或命令行與之交互。因此,Elasticsearch能夠滿足日志存儲對穩(wěn)定性、容錯性、高性能以及高可擴展性等要求,且能保證集群的負載均衡。
3.3.4 日志可視化分析模塊
Grafana[14]是用于可視化大型測量數(shù)據的開源程序,它提供了強大和優(yōu)雅的方式去創(chuàng)建、共享、瀏覽數(shù)據。Grafana支持許多不同的數(shù)據源。目前,Grafana提供了對MySQL、Influx DB、Prometheus以及Elasticsearch等的支持,可以實現(xiàn)對數(shù)據的可視化工作。
根據數(shù)據中心日志管理平臺的功能需求分析,平臺主要由數(shù)據中心基礎IT環(huán)境、日志采集集群、實時/離線數(shù)據處理集群、Elasticsearch日志存儲集群等組成,系統(tǒng)物理結構如圖6所示。數(shù)據中心基礎IT環(huán)境是日志產生的主要來源;日志采集集群由多臺服務器組成,基于Logstash構建的日志采集集群;基于Elasticsearch構建由主節(jié)點和數(shù)據節(jié)點組成的日志存儲集群,實現(xiàn)日志數(shù)據的存儲。
圖6 系統(tǒng)物理架構
隨著云計算技術的發(fā)展,數(shù)據中心[15]各種網絡設備的增加,不同種類、不同類型、不同作用的日志也相應增多。本文首先分析了數(shù)據中心日志的來源,詳細介紹了日志采集、日志數(shù)據處理、日志存儲和日志可視化分析技術,并結合數(shù)據中心的特點,提出一種面向數(shù)據中心的日志分析平臺架構,深入討論了日志分析平臺設計方案,對日志分析平臺的建設具有一定的借鑒意義。