劉永濤 院志超
摘 要:在校園網(wǎng)用戶爆炸式增長的今天,校園網(wǎng)運維任務(wù)越來越重。本文結(jié)合運維實際,提出了綜合運用Apache Flume、Apache Kafka、Spark Streaming等大數(shù)據(jù)技術(shù)來實時處理海量的日志數(shù)據(jù)信息,并詳細介紹了日志數(shù)據(jù)信息的收集、傳輸和處理過程。本系統(tǒng)可以實時、高效的收集來自于不同服務(wù)器的日志信息,并使用Spark Streaming和Spark core進行日志數(shù)據(jù)信息的實時在線和離線處理。
關(guān)鍵詞:Apache Flume Apache Kafka Spark Streaming Spark core 日志分析
中圖分類號:TP311 文獻標識碼:A 文章編號:1003-9082(2018)08-000-01
隨著校園網(wǎng)用戶量的爆發(fā)式增長,我校網(wǎng)絡(luò)出口帶寬也由原先的1GB升級為13.8GB,暫時滿足了校園網(wǎng)用戶的上網(wǎng)需求。然而,用戶量的暴增,不僅僅導(dǎo)致了校園網(wǎng)出口的阻塞,更是暴露出了各種各樣的網(wǎng)絡(luò)問題。其中,校園網(wǎng)業(yè)務(wù)服務(wù)器的安全問題尤為突出,為了能實時預(yù)警其面臨的各種問題,并對設(shè)備的故障進行分析和定位,需要對日志進行實時收集、分析和處理。通過不斷的探索和實踐,得出了使用分布式流數(shù)據(jù)處理架構(gòu)Spark streaming來處理海量、結(jié)構(gòu)復(fù)雜多變的日志數(shù)據(jù)信息的結(jié)論。本文實現(xiàn)了一個以分布式文件系統(tǒng)HDFS為基本的存儲系統(tǒng)、分布式日志收集系統(tǒng)Apache Flume為日志收集部件、Kafka為消息處理緩沖區(qū)、Spark streaming離散數(shù)據(jù)流處理框架為核心的海量日志信息處理系統(tǒng),完全滿足了我校服務(wù)器運維中對日志數(shù)據(jù)信息實時收集、處理和分析的要求。
一、日志收集系統(tǒng)的架構(gòu)
本日志數(shù)據(jù)信息收集處理系統(tǒng)的結(jié)構(gòu)如圖1.1所示。
各種服務(wù)器系統(tǒng)所產(chǎn)生的日志數(shù)據(jù)信息通過指定的端口如514發(fā)送到指定的日志收集Apache Flume NG服務(wù)器中。在日志數(shù)據(jù)信息被發(fā)送前,使用rsyslog服務(wù)將日志數(shù)據(jù)信息進行規(guī)范化、標準化處理,為后續(xù)的處理提供統(tǒng)一的數(shù)據(jù)格式。
將來自于不同操作系統(tǒng)、不同業(yè)務(wù)系統(tǒng)的日志數(shù)據(jù)信息由分布式日志收集系統(tǒng)Apache Flume NG直接發(fā)送到Hadoop的分布式文件系統(tǒng)HDFS上持久化。
分布式日志收集系統(tǒng)Apache Flume NG將實時接收到的日志數(shù)據(jù)信息收集起來,發(fā)送到消息處理緩沖區(qū)Kafka中,為Spark Streaming實時的處理和分析日志數(shù)據(jù)信息提供數(shù)據(jù)源。被發(fā)送到消息處理緩沖區(qū)Kafka中的日志數(shù)據(jù)信息被實時的處理消費,Spark Streaming將實時接收、處理和分析的最終結(jié)果存入非關(guān)系型數(shù)據(jù)庫HBASE中,供用戶查詢和調(diào)用。
二、日志數(shù)據(jù)信息的實時采集
1.標準化
在對日志數(shù)據(jù)信息進行處理、分析之前,需要對其進行標準化處理。本系統(tǒng)中,將使用Rsyslog格式來標準化。Rsyslog日志收集轉(zhuǎn)發(fā)程序可以支持各種各樣的數(shù)據(jù)庫,比如Oracle、Mysql等等。在各臺服務(wù)器上以及分布式日志收集系統(tǒng)Apache Flume NG使用安裝完成Rsyslog后,需要對rsyslog.conf配置文件進行配置。
2.日志傳輸
在海量日志信息處理系統(tǒng)中,各臺服務(wù)器運行日志的采集是由分布式日志收集系統(tǒng)Apache Flume NG負責(zé)的。分布式日志收集系統(tǒng)Apache Flume NG在一臺服務(wù)器設(shè)備上有且僅有一個用來提供日志數(shù)據(jù)信息的采集、緩沖和發(fā)送進程Agent,該Agent由數(shù)據(jù)源、通道和數(shù)據(jù)發(fā)送池構(gòu)成。Apache Flume NG將采集到的日志數(shù)據(jù)信息發(fā)送到數(shù)據(jù)緩沖區(qū)中,數(shù)據(jù)緩沖區(qū)將接收到的數(shù)據(jù)信息發(fā)送到數(shù)據(jù)發(fā)送池,數(shù)據(jù)發(fā)送池有HDFS數(shù)據(jù)發(fā)送池、Avro數(shù)據(jù)發(fā)送池等。
在本系統(tǒng)中,數(shù)據(jù)源一個Agent負責(zé)收集一臺服務(wù)器中的日志數(shù)據(jù)信息,數(shù)據(jù)信息以Avro方式傳輸,最后數(shù)據(jù)信息發(fā)送到數(shù)據(jù)發(fā)送池中,其中數(shù)據(jù)發(fā)送池分為HDFS和Kafka兩個。HDFS數(shù)據(jù)發(fā)送池將傳輸來的數(shù)據(jù)信息發(fā)送到分布式文件系統(tǒng)HDFS中,Kafka數(shù)據(jù)發(fā)送池將傳輸來的數(shù)據(jù)信息發(fā)送到消息處理緩沖區(qū)Kafka中。在這里,為了提升系統(tǒng)的處理性能,將數(shù)據(jù)緩沖區(qū)定義為內(nèi)存方式。
3.消息處理緩沖區(qū)Kafka
消息處理緩沖區(qū)Kafka將接收到的日志數(shù)據(jù)信息交由Spark streaming來實施分析處理,因此,消息處理緩沖區(qū)Kafka在這里平衡了日志數(shù)據(jù)信息的生產(chǎn)和消費過程,提升了應(yīng)用程序的可用性。
消息處理緩沖區(qū)Kafka是一種分布式的消息系統(tǒng),基于消費者和生產(chǎn)者。其借助高吞吐率可以在集群中實現(xiàn)百萬級的數(shù)據(jù)傳輸率,從而實現(xiàn)TB級別的數(shù)據(jù)傳輸能力。Kafka多個實例構(gòu)成了Kafka服務(wù)器集群,每一個Kafka實例稱為Broker,通過使用一個叫做Topic的名字來區(qū)分不同的類別。
三、日志數(shù)據(jù)信息的處理
日志收集處理系統(tǒng)的核心處理功能就是使用Spark來實現(xiàn)在線和離線兩種處理方式,在線數(shù)據(jù)信息的處理使用Spark streaming來進行,離線數(shù)據(jù)信息的處理則使用Spark core來進行。在線數(shù)據(jù)處理實現(xiàn)對數(shù)據(jù)信息的增量型更新,即進行實時計算。離線數(shù)據(jù)處理則使用Spark core提供的功能進行統(tǒng)計分析。
Spark是一種分布式計算框架,該框架彌補了Hadoop分布式并行計算的缺陷,提供了一種基于Spark core的快速開發(fā)分布式應(yīng)用程序的能力。在本系統(tǒng)中,采用3臺2U的高性能服務(wù)器作為分布式計算的環(huán)境。
1.在線數(shù)據(jù)處理
Spark Streaming從上下文SparkContext實現(xiàn)程序入口,SparkContext在定義時,使用諸如系統(tǒng)運行模式、應(yīng)用程序名稱等參數(shù)進行初始化和實例化。初始化后,使用方法creatDirectStream來創(chuàng)建用來讀取指定Topic的Kafka實例。在邏輯處理開始時,需要使用正則表達式對數(shù)據(jù)進行過濾。日志數(shù)據(jù)的過濾可以分為兩個階段,第一個處理階段可以是根據(jù)定義好的syslog日志格式來對數(shù)據(jù)進行粗過濾,第二個處理階段則對日志部分進行過濾,從而得到符合要求的數(shù)據(jù)信息。
2.離線數(shù)據(jù)處理
在離線數(shù)據(jù)處理部分,則使用Spark core提供的功能函數(shù)進行處理,處理的業(yè)務(wù)邏輯和在線方式一樣,同樣需要進行應(yīng)用程序的初始化、日志數(shù)據(jù)信息的正則表達式匹配和過濾等邏輯處理。
結(jié)語
本文設(shè)計了一個使用Spark來處理在線、離線日志數(shù)據(jù)信息收集處理系統(tǒng),具備良好的水平擴張性,可以有效的提高系統(tǒng)運維人員處理系統(tǒng)故障的效率,具有較高的實用性和可用性。