1. 程式人生 > >生產環境flume日誌採集方案

生產環境flume日誌採集方案

Flume簡介

Flume是一個分散式、可靠、和高可用的海量日誌採集、聚合和傳輸的系統。
支援在日誌系統中定製各類資料傳送方,用於收集資料;
同時,Flume提供對資料進行簡單處理,並寫到各種資料接受方(比如文字、HDFS、Hbase等)的能力。
名詞介紹:
Flume OG:Flume original generation,即Flume0.9x版本
Flume NG:Flume next generation,即Flume1.x版本
官網:http://flume.apache.org

Flume體系結構

image

1、Flume有一個簡單、靈活的基於流的資料流結構
2、Flume具有故障轉移機制和負載均衡機制
3、Flume使用一個簡單可擴充套件的資料模型(source
、channel、sink) 目前,flume-ng處理資料有兩種方式:avro-client、agent avro-client:一次性將資料傳輸到指定的avro服務的客戶端 agent:一個持續傳輸資料的服務 Agent主要的元件包括:Source、Channel、Sink Source:完成對日誌資料的手機,分成transtion和event打入到channel之中。 Channel:主要提供一個佇列的功能,對source提供的資料進行簡單的快取。 Sink:取出Channel中的資料,進行相應的儲存檔案系統,資料庫或是提交到遠端伺服器。 資料在元件傳輸的單位是Event。

Flume基本元件

Source

   source意為來源、源頭。
主要作用:從外界採集各種型別的資料,將資料傳遞給Channel。
   比如:監控某個檔案只要增加資料就立即採集新增的資料、監控某個目錄一旦有新檔案產生就採集新檔案的內容、監控某個埠等等。
常見採集的資料型別:
   Exec Source、Avro Source、NetCat Source、Spooling Directory Source等
詳細檢視:
  http://flume.apache.org/FlumeUserGuide.html#flume-sources
  或者自帶的文件檢視。

Source具體作用:
AvroSource:監聽一個avro服務埠,採集Avro資料序列化後的資料;
Thrift Source:監聽一個Thrift 服務埠,採集Thrift資料序列化後的資料;
Exec Source:基於Unix的command
在標準輸出上採集資料; tail -F 和tail -f 區別。基於log4j切割檔案時的能否讀取問題。 JMS Source:Java訊息服務資料來源,Java訊息服務是一個與具體平臺無關的API,這是支援jms規範的資料來源採集; Spooling Directory Source:通過資料夾裡的新增的檔案作為資料來源的採集; Kafka Source:從kafka服務中採集資料。 NetCat Source: 繫結的埠(tcp、udp),將流經埠的每一個文字行資料作為Event輸入 HTTP Source:監聽HTTP POST和 GET產生的資料的採集

Channel

Channel
    一個數據的儲存池,中間通道。
主要作用
    接受source傳出的資料,向sink指定的目的地傳輸。Channel中的資料直到進入到下一個channel中或者進入終端才會被刪除。當sink寫入失敗後,可以自動重寫,不會造成資料丟失,因此很可靠。
channel的型別很多比如:記憶體中、jdbc資料來源中、檔案形式儲存等。
常見採集的資料型別:
    Memory Channel
    File Channel
    Spillable Memory Channel等
詳細檢視:
    http://flume.apache.org/FlumeUserGuide.html#flume-channels

Channel具體作用:
Memory Channel:使用記憶體作為資料的儲存。速度快
File Channel:使用檔案來作為資料的儲存。安全可靠
Spillable Memory Channel:使用記憶體和檔案作為資料的儲存,即:先存在記憶體中,如果記憶體中資料達到閥值則flush到檔案中。
JDBC Channel:使用jdbc資料來源來作為資料的儲存。
Kafka Channel:使用kafka服務來作為資料的儲存。

Sink

Sink:資料的最終的目的地。
主要作用:接受channel寫入的資料以指定的形式表現出來(或儲存或展示)。
sink的表現形式很多比如:列印到控制檯、hdfs上、avro服務中、檔案中等。
常見採集的資料型別:
      HDFS Sink
      Hive Sink
      Logger Sink
      Avro Sink
      Thrift Sink
      File Roll Sink
      HBaseSink
      Kafka Sink等
詳細檢視:
      http://flume.apache.org/FlumeUserGuide.html#flume-sinks
HDFSSink需要有hdfs的配置檔案和類庫。一般採取多個sink匯聚到一臺採集機器負責推送到hdfs。

Sink具體作用:
Logger Sink:將資料作為日誌處理(根據flume中的設定的日誌的級別顯示)。
HDFS Sink:將資料傳輸到hdfs叢集中。
Avro Sink:資料被轉換成Avro Event,然後傳送到指定的服務埠上。
Thrift Sink:資料被轉換成Thrift Event,然後傳送到指定的的服務埠上。
File Roll Sink:資料傳輸到本地檔案中。
Hive Sink:將資料傳輸到hive的表中。
IRC Sink:資料向指定的IRC服務和埠中傳送。
Null Sink:取消資料的傳輸,即不傳送到任何目的地。
HBaseSink:將資料發往hbase資料庫中。
MorphlineSolrSink:資料傳送到Solr搜尋伺服器(叢集)。
ElasticSearchSink:資料傳送到Elastic Search搜尋伺服器(叢集)。
Kafka Sink:將資料傳送到kafka服務中。(注意依賴類庫)

Event

event是Flume NG傳輸的資料的基本單位,也是事務的基本單位。
在文字檔案,通常是一行記錄就是一個event。
網路訊息傳輸系統中,一條訊息就是一個eventevent裡有header、body
Event裡面的header型別:Map<String, String>
我們可以在source中自定義header的key:value,在某些channel和sink中使用header。

練習1:
   一個需求:怎麼實時監聽一個檔案的資料增加呢?列印到控制檯上。
如果這個檔案增加的量特別大呢?

Avro client

avro客戶端:
往指定接收方相應的主機名:埠 傳送本機要監聽傳送的原始檔或者資料夾。
bin/flume-ng avro-client --conf conf/ -H master -p 41414 -F /opt/logs/access.log
需要提供 avro-source
注意:--headerFile選項:追加header資訊,檔案以空格隔開。
bin/flume-ng avro-client  --conf conf/ --host slave01 --port 41414  --filename /opt/logs/access.log --headerFile /opt/logs/kv.log 
如果指定了--dirname。則傳輸後此資料夾裡的檔案會加上fileSuffix字尾。
練習02:
    監控檔案的新增內容向另一臺機器的source傳送資料。怎麼處理?

Flume安裝

系統要求:
    1、JRE:JDK1.6+(推薦使用1.7)
    2、記憶體:沒有上限和下限,能夠配置滿足source、channel以及sink即可
    3、磁碟空間:同2
    4、目錄許可權:一般的agent操作的目錄必須要有讀寫許可權
    這裡採用的Flume版本為1.8.0,也是目前最新的版本,下載地址為:
    http://archive.apache.org/dist/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz

安裝步驟:
    解壓縮:[[email protected] ~]$ tar -zxvf soft/apache-flume-1.8.0-bin.tar.gz -C app/
    重新命名:[[email protected] ~]$ mv app/apache-flume-1.8.0-bin/ app/flume
    新增到環境變數中
        vim ~/.bash_profile
        export FLUME_HOME=/home/uplooking/app/flume
        export PATH=$PATH:$FLUME_HOME/bin
    修改配置檔案
        conf]# cp flume-env.sh.template flume-env.sh
    新增JAVA_HOME
        export JAVA_HOME=/opt/jdk

Flume Agent案例

偵聽網路埠資料

定義flume agent配置檔案:

#####################################################################
## this's flume log purpose is listenning a socket port which product
## data of stream
## this agent is consists of source which is r1 , sinks which is k1,
## channel which is c1
## 
## 這裡面的a1 是flume一個例項agent的名字
#####################################################################
#定義了當前agent的名字叫做a1
a1.sources = r1     ##定了該agent中的sources元件叫做r1
a1.sinks = k1       ##定了該agent中的sinks元件叫做k1
a1.channels = c1    ##定了該agent中的channels元件叫做c1

# 監聽資料來源的方式,這裡採用監聽網路埠
a1.sources.r1.type = netcat         #source的型別為網路位元組流
a1.sources.r1.bind = uplooking01    #source監聽的網路的hostname
a1.sources.r1.port = 52019          #source監聽的網路的port

# 採集的資料的下沉(落地)方式 通過日誌
a1.sinks.k1.type = logger   #sink的型別為logger日誌方式,log4j的級別有INFO、Console、file。。。

# 描述channel的部分,使用記憶體做資料的臨時儲存
a1.channels.c1.type = memory                #channel的型別使用記憶體進行資料快取,這是最常見的一種channel
a1.channels.c1.capacity = 1000              #定義了channel對的容量
a1.channels.c1.transactionCapacity = 100    #定義channel的最大的事務容量

# 使用channel將source和sink連線起來
# 需要將source和sink使用channel連線起來,組成一個類似流水管道
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

啟動flume agent:

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

-c conf:使用配置檔案的方式
-n a1:指定agent的名稱為a1
-f:指定配置檔案

因為資料落地是通過日誌,所以後面需要指定日誌的相關配置選項。

通過telnet或者nc向埠傳送資料

安裝telnet或nc:

yum isntall -y telent
yum install -y nc

向埠傳送資料:

# 使用telnet
[[email protected] ~]$ telnet uplooking01 52019
Trying 192.168.43.101...
Connected to uplooking01.
Escape character is '^]'.
wo ai ni
OK
sai bei de xue
OK

# 使用nc
[[email protected] ~]$ nc uplooking01 52019
heihei
OK
xpleaf
OK

此時可以檢視flume agent啟動終端的輸出:

2018-03-24 20:09:34,390 (lifecycleSupervisor-1-0) [INFO - org.apache.flume.source.NetcatSource.start(NetcatSource.java:166)] Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/192.168.43.101:52019]
2018-03-24 20:10:13,022 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 77 6F 20 61 69 20 6E 69 0D                      wo ai ni. }
2018-03-24 20:10:24,139 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 73 61 69 20 62 65 69 20 64 65 20 78 75 65 0D    sai bei de xue. }
2018-03-24 20:13:26,190 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 68 65 69 68 65 69                               heihei }
2018-03-24 20:13:26,463 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 78 70 6C 65 61 66                               xpleaf }
2018-03-24 20:17:01,694 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 68 65 6C 6C 6F                                  hello }

偵聽目錄中的新增檔案

配置檔案如下:

#####################################################################
## 監聽目錄中的新增檔案
## this agent is consists of source which is r1 , sinks which is k1,
## channel which is c1
## 
## 這裡面的a1 是flume一個例項agent的名字
#####################################################################
a1.sources = r1
a1.sinks = k1
a1.channels = c1

            
           

相關推薦

生產環境flume日誌採集方案

Flume簡介Flume是一個分散式、可靠、和高可用的海量日誌採集、聚合和傳輸的系統。 支援在日誌系統中定製各類資料傳送方,用於收集資料; 同時,Flume提供對資料進行簡單處理,並寫到各種資料接受方(比如文字、HDFS、Hbase等)的能力。 名詞介紹: Flume OG:

大資料技術學習筆記之網站流量日誌分析專案:Flume日誌採集系統1

一、網站日誌流量專案     -》專案開發階段:         -》可行性分析         -》需求分析  

Flume日誌採集系統與Logstash對比

本文就從如下的幾個方面講述下我的使用心得: 初體驗——與Logstash的對比 安裝部署 啟動教程 引數與例項分析 Flume初體驗 Flume的配置是真繁瑣,source,channel,sink的關係在配置檔案裡面交織在一起,沒有Logstash那麼簡單明瞭。

Flume日誌採集多級Agent

flume的簡介 任何一個系統在執行的時候都會產生大量的日誌資訊,我們需要對這些日誌進行分析,在分析日誌之前,我們需要將分散在生產系統中的日誌收集起來。Flume就是這樣的日誌採集系統 主要有三個元件: Source:消費web系統這樣的外部資料來源中

flume採集方案nginx日誌到hdfs上

######################################################### ##主要作用是監聽目錄中的新增檔案,採集到資料之後,輸出到hdfs ######################################

基於Flume+Log4j+Kafka的日誌採集架構方案

Flume 基本概念 Flume是一個完善、強大的日誌採集工具,關於它的配置,在網上有很多現成的例子和資料,這裡僅做簡單說明不再詳細贅述。 Flume包含Source、Channel、Sink三個最基本的概念: Source——日誌來源,其中包括:Avro Source、

(轉)企業生產環境用戶權限集中管理方案案例

網管 pac 成本 local 6.2 whoami start blog 員工 https://wenku.baidu.com/view/0acd163d4a73f242336c1eb91a37f111f1850d94.html http://blog.51cto.com

企業生產環境不同業務linux系統分區方案

ali linux UC .html 系統分區 watermark roc htm linux系統 轉自:http://edu.51cto.com/lession/id-11842.html 企業生產環境不同業務linux系統分區方案

11g生產環境監聽日誌告警問題處理-Subscription?for

Subscription listener.ora listener.log 1、系統報錯 Command:?failed????????stdout:?yes???????????stderr:?no Before?command?completion,?additional?instructi

tomcat8.5生產環境不輸出catalina.out,即不輸出日誌

由於最近專案需要部署到外網環境,之前在內網測試看日誌都是在catalina.out,但是現在修改了一下,不需要看這個了,而且如果專案在外網環境部署,這個檔案一直會增大,浪費空間,所有墨跡了半天,才重網上找到一個比較好的方法,不輸出到catalina.out. 找到tomcat下的 

Elk日誌採集分析系統 搭建elasticsearch環境 6.4 環境

https://www.elastic.co/cn/blog/elasticsearch-6-4-0-released 1 官網下載 elasticsearch 安裝包 https://artifacts.elastic.co/downloads/elasticsearch/elasti

單機版的redis的安裝以及redis生產環境啟動方案

▌大綱 1、安裝單機版的redis 2、redis的生產環境啟動方案 3、redis cli的使用   ▌1、安裝單機版redis wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz tar -zx

Linux企業生產環境使用者許可權集中管理專案方案案例

企業生產環境使用者許可權集中管理專案方案案例: 1 問題現狀 當前我們公司裡伺服器上百臺,各個伺服器上的管理人員很多(開發+運維+架構+DBA+產品+市場),在大家登入使用Linux伺服器時,不同職能的員工水平不同,因此導致操作很不規範

Linux企業生產環境用戶權限集中管理項目方案案例

最大 -h 賬戶 comm min border scrip 架構 調查 企業生產環境用戶權限集中管理項目方案案例: 1 問題現狀 當前我們公司裏服務器上百臺,各個服務器上的管理人員很多(開發+運維+架構+DBA+產品+市場),在大家登錄使用Linux服務器

Spark Streaming實時流處理筆記(3)——日誌採集Flume

1 Flume介紹 1.1 設計目標 可靠性 擴充套件性 管理性 1.2 同類產品 Flume: Cloudera/Apache,Java Scribe: Facebook ,C/C++(不維護了) Chukwa: Yahoo

服務日誌收集方案開發環境搭建

在ubuntu 16.04虛擬機器上安裝Elasticsearch,Kibana,Filebeat.版本:6.5.1 Elasticsearch預設是開發模式.只能在本機訪問. Kibana可外部訪問.漢化Kibana介面. Filebeat直接輸出到Elasticsearch. 以下說明各元件

Flume+Kafka雙劍合璧玩轉大資料平臺日誌採集

概述 大資料平臺每天會產生大量的日誌,處理這些日誌需要特定的日誌系統。 一般而言,這些系統需要具有以下特徵: 構建應用系統和分析系統的橋樑,並將它們之間的關聯解耦; 支援近實時的線上分析系統和類似於Hadoop之類的離線分析系統; 具有高可擴充套件性。即:當資料量增加時,可以通過增加節點

日誌採集系統flume和kafka有什麼區別及聯絡?

日誌採集系統flume和kafka有什麼區別及聯絡,它們分別在什麼時候使用,什麼時候又可以結合? 觀點一: 簡言之:這兩個差別很大,使用場景區別也很大。 先說flume: 日誌採集。線上資料一般主要是落地檔案或者通過socket傳輸給另外一個系統。這種情況下,你很難推動線上應用或服務去修改介

flume 1.6 安裝及配置 日誌採集配置

1.下載flume1.6 2.安裝jdk和Hadoop 具體參照以前wen'文章 3.flume 配置檔案修改 修改conf目錄下的flume-env.sh檔案   export JA

日誌採集框架Flume

在一個完整的大資料處理系統中,除了hdfs+mapreduce+hive組成分析系統的核心之外,還需要資料採集、結果資料匯出、任務排程等不可或缺的輔助系統,而這些輔助工具在hadoop生態體系中都有便捷的開源框架,如圖所示: 1、Flume介紹 1.1、概述 Flu