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