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

圖1 日志分析平臺架構圖
3.3.1 日志采集模塊
Logstash是一個開源數據收集引擎,具有實時管道功能。Logstash是一個應用程序日志、事件的傳輸、處理、管理與搜索的平臺,能夠對應用程序日志進行收集管理,提供Web接口用于查找與統計。Logstash可以動態地將來自不同數據源的數據統一起來,并將數據標準化到所選擇的目的地。Logstash數據處理流程如圖2所示。

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

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

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

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

圖6 系統物理架構
隨著云計算技術的發展,數據中心[15]各種網絡設備的增加,不同種類、不同類型、不同作用的日志也相應增多。本文首先分析了數據中心日志的來源,詳細介紹了日志采集、日志數據處理、日志存儲和日志可視化分析技術,并結合數據中心的特點,提出一種面向數據中心的日志分析平臺架構,深入討論了日志分析平臺設計方案,對日志分析平臺的建設具有一定的借鑒意義。