1. 程式人生 > >日誌收集系統Flume及其應用

日誌收集系統Flume及其應用

註意 內存緩存 外部 ner 流動 場景 啟動 net conf

Apache Flume概述

  Flume 是 Cloudera 提供的一個高可用的,高可靠的,分布式的海量日誌采集、聚合和傳輸的系統。Flume 支持定制各類數據發送方,用於收集各類型數據;同時,Flume 提供對數據進行簡單處理,並寫到各種數據接受方(可定制)的能力。一般的采集需求,通過對 flume 的簡單配置即可實現。針對特殊場景也具備良好的自定義擴展能力。因此,flume 可以適用於大部分的日常數據采集場景。

  當前 Flume 有兩個版本。Flume 0.9X 版本的統稱 Flume OG(originalgeneration),Flume1.X 版本的統稱 Flume NG(next generation)。由於 FlumeNG 經過核心組件、核心配置以及代碼架構重構,與 Flume OG 有很大不同,使用時請註意區分。改動的另一原因是將 Flume 納入 apache 旗下,cloudera Flume改名為 Apache Flume。

關於flume的運行機制

  Flume的核心是把數據從數據源(source)收集過來,再將收集到的數據送到指定的目的地(sink)。為了保證輸送的過程一定成功,在送到目的地(sink)之前,會先緩存數據(channel),待數據真正到達目的地(sink)後,flume再刪除自己緩存的數據。

  Flume分布式系統中核心的角色是agent,agent本身是一個Java進程,一般運行在日誌收集節點。flume采集系統就是由一個個agent所連接起來形成。

  技術分享圖片

每一個 agent 相當於一個數據傳遞員,內部有三個組件:

Source:采集源,用於跟數據源對接,以獲取數據;

Sink:下沈地,采集數據的傳送目的,用於往下一級 agent 傳遞數據或者往最終存儲系統傳遞數據;

Channel:agent 內部的數據傳輸通道,用於從 source 將數據傳遞到 sink;

   在整個數據的傳輸的過程中,流動的是 event,它是 Flume 內部數據傳輸的最基本單元。event 將傳輸的數據進行封裝。如果是文本文件,通常是一行記錄,event 也是事務的基本單位。event 從 source,流向 channel,再到 sink,本身為一個字節數組,並可攜帶 headers(頭信息)信息。event 代表著一個數據的最小完整單元,從外部數據源來,向外部的目的地去。

  一個完整的 event 包括:event headers、event body、event 信息,其中event 信息就是 flume 收集到的日記記錄。

Flume 采集系統結構圖

簡單結構(單個 agent 采集數據)

技術分享圖片

復雜結構(多級 agent 之間串聯)

技術分享圖片

Flume安裝部署

Flume 的安裝非常簡單

上傳安裝包到數據源所在節點上

然後解壓 tar -zxvf apache-flume-1.6.0-bin.tar.gz

然後進入 flume 的目錄,修改 conf 下的 flume-env.sh,在裏面配置 JAVA_HOME

根據數據采集需求 配置采集方案,描述在配置文件中(文件名可任意自定義)

指定采集方案配置文件,在相應的節點上啟動 flume agent

寫一個flume簡單案例 :

1 、 先在 flume 的 的 conf 目錄下新建一個文件

vi netcat-logger.conf
# 定義這個 agent 中各組件的名字
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 描述和配置 source 組件:r1
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# 描述和配置 sink 組件:k1
a1.sinks.k1.type = logger
# 描述和配置 channel 組件,此處使用是內存緩存的方式
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 描述和配置 source channel sink 之間的連接關系
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

2 、 啟動 agent 去采集數據

bin/flume-ng agent -c conf -f conf/netcat-logger.conf -n a1 -Dflume.root.logger=INFO,console

-c conf 指定 flume 自身的配置文件所在目錄

-f conf/netcat-logger.con 指定我們所描述的采集方案

-n a1 指定我們這個 agent 的名字

3 、 測試

先要往 agent 采集監聽的端口上發送數據,讓 agent 有數據可采。

隨便在一個能跟 agent 節點聯網的機器上:telnet anget-hostname port (telnet localhost 44444)

yum -y install telnet
telnet localhost 44444

  技術分享圖片

技術分享圖片

ok,完成!

日誌收集系統Flume及其應用