Flume學習系列(四)---- Interceptors(攔截器)

前言:flume通過使用Interceptors(攔截器)實現(xiàn)修改和過濾事件的功能棋傍。舉個栗子救拉,一個網站每天產生海量數(shù)據(jù),但是可能會有很多數(shù)據(jù)是不完整的(缺少重要字段)舍沙,或冗余的近上,如果不對這些數(shù)據(jù)進行特殊處理,那么會降低系統(tǒng)的效率拂铡。這時候攔截器就派上用場了壹无。


一、flume內置的攔截器

先列個flume內置攔截器的表:


table1.png

????由于攔截器一般針對Event的Header進行處理感帅,那我先介紹一Event吧斗锭。Event結構如下圖:


001.jpg
  • event是flume中處理消息的基本單元,由零個或者多個header和正文body組成失球。
  • Header 是 key/value 形式的岖是,可以用來制造路由決策或攜帶其他結構化信息(如事件的時間戳或事件來源的服務器主機名)帮毁。你可以把它想象成和 HTTP 頭一樣提供相同的功能——通過該方法來傳輸正文之外的額外信息。
  • Body是一個字節(jié)數(shù)組,包含了實際的內容。
  • flume提供的不同source會給其生成的event添加不同的header韵丑。

????這些攔截器實際都是往Event的header里插數(shù)據(jù)背捌,比如Timestamp Interceptor攔截器就是可以往event的header中插入關鍵詞為timestamp的時間戳伯铣。

1.1 timestamp攔截器

下面是官網的timestamp的配置:

a1.sources = r1
a1.channels = c1
a1.sources.r1.channels =  c1
a1.sources.r1.type = seq
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = timestamp

測試例子:
????在flume的conf目錄下新建timestamp.conf文件,輸入以下代碼:

#配置文件:timestamp.conf
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
 
# Describe/configure the source
a1.sources.r1.type = syslogtcp
a1.sources.r1.port = 50000
a1.sources.r1.host = 0.0.0.0
a1.sources.r1.channels = c1
 
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.preserveExisting= false
a1.sources.r1.interceptors.i1.type = timestamp
 
 
# Describe the sink
a1.sinks.k1.type = logger
a1.sinks.k1.channel = c1
 
# Use a channel which buffers events inmemory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

????打開一個終端,進入flume的bin目錄,輸入./flume-ng agent -c ../conf -f ../conf/timestamp.conf -Dflume.root.logger=INFO,console -n a1
????啟動成功后灯抛,flume開始監(jiān)控本主機上的所有IP地址,再開一個終端音瓷,向50000端口發(fā)TCP數(shù)據(jù)对嚼,命令如下:echo "TimestampInterceptor" | nc 127.0.0.1 50000
????此時绳慎,flume的終端會接收到這個消息纵竖,如下:

002.png

我們可以清楚地看到header中有timestamp的影子。成功了杏愤。

003.jpg

1.2 host攔截器

????再說一個host interceptor磨确,該攔截器可以往event的header中插入關鍵詞默認為host的主機名或者ip地址(注意是agent運行的機器的主機名或者ip地址)。官網配置如下:

a1.sources = r1
a1.channels = c1
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = host

測試例子

#配置文件:host.conf
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
 
# Describe/configure the source
a1.sources.r1.type = syslogtcp
a1.sources.r1.port = 50000
a1.sources.r1.host = 0.0.0.0
a1.sources.r1.channels = c1
 
a1.sources.r1.interceptors = i2
# a1.sources.r1.interceptors.i1.preserveExisting= false
# a1.sources.r1.interceptors.i1.type =timestamp
a1.sources.r1.interceptors.i2.type = host
a1.sources.r1.interceptors.i2.hostHeader =hostname
a1.sources.r1.interceptors.i2.useIP = false
 
# Describe the sink
a1.sinks.k1.type = logger
a1.sinks.k1.channel = c1
 
# Use a channel which buffers events inmemory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

????進入flume的bin目錄声邦,執(zhí)行./flume-ng agent -c ../conf -f ../conf/host.conf -Dflume.root.logger=INFO,console -n a1
然后在新的終端輸入echo "HostInterceptor" | nc 127.0.0.1 50000
????結果如下:

004.jpg

????可以發(fā)現(xiàn)header中增加了一個hostname的值:192.168.1.105。使用ifconfig命令摆舟,正是我電腦的IP地址亥曹,因為flume的agent運行在這個IP上嘛。


1.3 Regex Filtering Interceptor攔截器

????還有比較重要的Regex Filtering Interceptor恨诱,Regex Filtering Interceptor攔截器用于過濾事件媳瞪,篩選出與配置的正則表達式相匹配的事件≌毡Γ可以用于包含事件和排除事件蛇受。常用于數(shù)據(jù)清洗,通過正則表達式把數(shù)據(jù)過濾出來厕鹃。

測試例子:

#配置文件:regex_filter.conf
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
 
# Describe/configure the source
a1.sources.r1.type = syslogtcp
a1.sources.r1.port = 50000
a1.sources.r1.host = 0.0.0.0
a1.sources.r1.channels = c1
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type =regex_filter
#全部是數(shù)字的數(shù)據(jù)
a1.sources.r1.interceptors.i1.regex =^[0-9]*$
#排除符合正則表達式的數(shù)據(jù)
a1.sources.r1.interceptors.i1.excludeEvents =true
 
# Describe the sink
a1.sinks.k1.type = logger
 
# Use a channel which buffers events inmemory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
 
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

????這樣的配置將會過濾掉所有純數(shù)字的數(shù)據(jù)兢仰。
????進入bin目錄啟動flume,執(zhí)行./flume-ng agent -c ../conf -f ../conf/regex_filter.conf -Dflume.root.logger=INFO,console -n a1
????新開終端輸入
echo "1234" | nc 127.0.0.1 50000
echo "1234" | nc 127.0.0.1 50000
echo "1234" | nc 127.0.0.1 50000
????在flume的終端會輸出如下內容剂碴,但是沒有數(shù)據(jù)把将,因為被我們過濾掉了。

005.png


二忆矛、總結

????本文介紹了flume中的interceptor攔截器察蹲,并針對具體的三個攔截器進行了測試,驗證其功能。后面我們還會編寫符合自己需求的自定義攔截器洽议。敬請期待宗收。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市亚兄,隨后出現(xiàn)的幾起案子混稽,更是在濱河造成了極大的恐慌,老刑警劉巖儿捧,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荚坞,死亡現(xiàn)場離奇詭異,居然都是意外死亡菲盾,警方通過查閱死者的電腦和手機颓影,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懒鉴,“玉大人诡挂,你說我怎么就攤上這事×倨祝” “怎么了璃俗?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悉默。 經常有香客問我城豁,道長,這世上最難降的妖魔是什么抄课? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任唱星,我火速辦了婚禮,結果婚禮上跟磨,老公的妹妹穿的比我還像新娘间聊。我一直安慰自己,他們只是感情好抵拘,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布哎榴。 她就那樣靜靜地躺著,像睡著了一般僵蛛。 火紅的嫁衣襯著肌膚如雪尚蝌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天充尉,我揣著相機與錄音驼壶,去河邊找鬼。 笑死喉酌,一個胖子當著我的面吹牛热凹,可吹牛的內容都是我干的泵喘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼般妙,長吁一口氣:“原來是場噩夢啊……” “哼纪铺!你這毒婦竟也來了?” 一聲冷哼從身側響起碟渺,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鲜锚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后苫拍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芜繁,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年绒极,在試婚紗的時候發(fā)現(xiàn)自己被綠了骏令。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡垄提,死狀恐怖榔袋,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情铡俐,我是刑警寧澤凰兑,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站审丘,受9級特大地震影響吏够,放射性物質發(fā)生泄漏。R本人自食惡果不足惜滩报,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一稿饰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧露泊,春花似錦、人聲如沸旅择。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽生真。三九已至沉噩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柱蟀,已是汗流浹背川蒙。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留长已,地道東北人畜眨。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓昼牛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親康聂。 傳聞我的和親對象是個殘疾皇子贰健,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容