使用flume收集日誌

flume介紹

Flume是Cloudera提供的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統,Flume支持在日誌系統中定製各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各種數據接受方(可定製)的能力。
官網文檔:http://flume.apache.org/FlumeUserGuide.html

flume安裝

flume依賴於java1.8+,安裝flume首先要安裝java環境

apt install openjdk-8-jre-headless

然後下載源碼包

wget http://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz

解壓並移動到想要的目錄,此處移動至/opt下

tar -zxvf apache-flume-1.8.0-bin.tar.gz
mv apache-flume-1.8.0-bin /opt/flume-1.8.0

運行以下命令查看版本號驗證是否安裝成功,正常顯示版本號則安裝成功

/opt/flume-1.8.0/bin/flume-ng version

flume基礎配置

還需要進入到conf目錄下在flume-env.sh文件中配置一下flume的JAVA_HOME值。

cd /opt/flume-1.8.0/conf
cp flume-env.sh.template flume-env.sh
vi /opt/flume-1.8.0/conf/flume-env.sh

配置完成之後進入/opt/flume-1.8.0目錄執行以下命令測試環境是否配置成功

/opt/flume-1.8.0/bin/flume-ng agent --conf conf --conf-file conf/flume-conf.properties.template --name agent -Dflume.root.logger=INFO,console

flume啓動命令

原文:https://blog.csdn.net/qianshangding0708/article/details/48088611

命令

參數 描述
help 打印幫助信息
agent 運行一個Flume Agent
avro-client 運行一個Avro Flume 客戶端
version 顯示Flume版本

全局選項

參數 描述
–conf,-c 在目錄使用配置文件。指定配置文件放在什麼目錄
–classpath,-C 追加一個classpath
–dryrun,-d 不真正運行Agent,而只是打印命令一些信息。
–plugins-path 插件目錄列表。默認:$FLUME_HOME/plugins.d
-Dproperty=value 設置一個JAVA系統屬性值。
-Xproperty=value 設置一個JAVA -X的選項。

Agent選項

參數 描述
–conf-file,-f 指定配置文件,這個配置文件必須在全局選項的–conf參數定義的目錄下。(必填)
–name,-n Agent的名稱(必填)
–help,-h 幫助

Avro客戶端選項

參數 描述
–rpcProps,-P 連接參數的配置文件。
–host,-H Event所要發送到的Hostname。
–port,-p Avro Source的端口。
–dirname Avro Source流到達的目錄。
–filename,-F Avro Source流到達的文件名。
–headerFile,-R 設置一個JAVA -X的選項。

啓動Avro客戶端要麼指定–rpcProps,要麼指定–host和–port。

flume agent配置

flume通過配置文件來指定每個agent的日誌採集源(source)、傳輸方式(channel)和目的地(sink)。一個機器可以運行多個agent,多個機器間的agent也可以互相連接。

source

在我們的應用場景中,最常用的source類型是exec和spooling,這裏主要介紹這兩個,其餘可參考官方文檔。
如果要收集docker的日誌,可以參考這篇文章:https://blog.csdn.net/yanghua_kobe/article/details/50642601

exec source

官方文檔:http://flume.apache.org/FlumeUserGuide.html#exec-source
這個source主要用來監控某個文件新增的log數據。

exec可以通過指定的操作對日誌進行讀取,使用exec時需要指定shell命令,對日誌進行讀取,下面給出一個具體的例子:

a1.sources = r1
a1.channels = c1
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /var/log/secure
a1.sources.r1.channels = c1

spooling directory source

官方文檔:http://flume.apache.org/FlumeUserGuide.html#spooling-directory-source
這個source主要用來監控某個目錄下新增的文件。

spo_dir可以讀取文件夾裏的日誌,使用時指定一個文件夾,可以讀取該文件夾中的所有文件,需要注意的是該文件夾中的文件在讀取過程中不能修改,同時文件名也不能修改。下面給出一個具體的例子:

agent-1.channels = ch-1
agent-1.sources = src-1
agent-1.sources.src-1.type = spooldir
agent-1.sources.src-1.channels = ch-1
agent-1.sources.src-1.spoolDir = /var/log/apache/flumeSpool
agent-1.sources.src-1.fileHeader = true

avro source

官方文檔:http://flume.apache.org/FlumeUserGuide.html#avro-source
這個source主要用來連接兩個agent。更詳細的參數配置請參考官方文檔。
avro可以監聽和收集指定端口的日誌,使用avro的source需要說明被監聽的主機ip和端口號,下面給出一個具體的例子:

a1.sources = r1
a1.channels = c1
a1.sources.r1.type = avro
a1.sources.r1.channels = c1
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 4141

channel

官方文檔:http://flume.apache.org/FlumeUserGuide.html#flume-channel-selectors
Flume的channel種類並不多,最常用的是memory channel,下面給出例子:

a1.channels = c1
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 10000
a1.channels.c1.byteCapacityBufferPercentage = 20
a1.channels.c1.byteCapacity = 800000

sink

官方文檔:http://flume.apache.org/FlumeUserGuide.html#flume-sinks
在我們的應用場景中,最常用的sink是file roll sink,即將採集到的日誌事件寫入本地文件中保存起來。另外常用的還有logger sink,一般用於調試。avro sink則是爲了連接多個agent服務的,我們的應用場景中暫時還沒有用到。

logger sink

官方文檔:http://flume.apache.org/FlumeUserGuide.html#logger-sink
logger顧名思義,就是將收集到的日誌寫到flume的log中,是個十分簡單但非常實用的sink。參數配置請參考官方文檔。

avro sink

官方文檔:http://flume.apache.org/FlumeUserGuide.html#avro-sink
avro可以將接受到的日誌發送到指定端口,供級聯agent的下一跳收集和接受日誌,使用時需要指定目的ip和端口。更詳細的參數配置請參考官方文檔。例子如下:

a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = avro
a1.sinks.k1.channel = c1
a1.sinks.k1.hostname = 10.10.10.10
a1.sinks.k1.port = 4545

file roll sink

官方文檔:http://flume.apache.org/FlumeUserGuide.html#file-roll-sink
file_roll可以將一定時間內收集到的日誌寫到一個指定的文件中,具體過程爲用戶指定一個文件夾和一個週期,然後啓動agent,這時該文件夾會產生一個文件將該週期內收集到的日誌全部寫進該文件內,直到下一個週期再次產生一個新文件繼續寫入,以此類推,周而復始。更詳細的參數配置請參考官方文檔。下面給出一個具體的例子:

a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = file_roll
a1.sinks.k1.channel = c1
a1.sinks.k1.sink.directory = /var/log/flume
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章