Logstash詳解之——filter模塊

Logstash三個(gè)組件的第二個(gè)組件,也是整個(gè)Logstash工具中最復(fù)雜例衍,最蛋疼的一個(gè)組件昔期,當(dāng)然,也是最有作用的一個(gè)組件佛玄。

1硼一、grok插件 grok插件有非常強(qiáng)大的功能,他能匹配一切數(shù)據(jù)翎嫡,但是他的性能和對(duì)資源的損耗同樣讓人詬病欠动。

filter{


? ? grok{

? ? ? ? #只說(shuō)一個(gè)match屬性,他的作用是從message 字段中吧時(shí)間給摳出來(lái)惑申,并且賦值給另個(gè)一個(gè)字段logdate具伍。

? ? ? ? #首先要說(shuō)明的是,所有文本數(shù)據(jù)都是在Logstash的message字段中中的圈驼,我們要在過(guò)濾器里操作的數(shù)據(jù)就是message人芽。

? ? ? ? #第二點(diǎn)需要明白的是grok插件是一個(gè)十分耗費(fèi)資源的插件,這也是為什么我只打算講解一個(gè)TIMESTAMP_ISO8601正則表達(dá)式的原因绩脆。

? ? ? ? #第三點(diǎn)需要明白的是萤厅,grok有超級(jí)多的預(yù)裝正則表達(dá)式,這里是沒(méi)辦法完全搞定的靴迫,也許你可以從這個(gè)大神的文章中找到你需要的表達(dá)式

? ? ? ? #http://blog.csdn.net/liukuan73/article/details/52318243

? ? ? ? #但是惕味,我還是不建議使用它,因?yàn)樗耆梢杂脛e的插件代替玉锌,當(dāng)然名挥,對(duì)于時(shí)間這個(gè)屬性來(lái)說(shuō),grok是非常便利的主守。

? ? ? ? match => ['message','%{TIMESTAMP_ISO8601:logdate}']

? ? }

}

2禀倔、mutate插件 mutate插件是用來(lái)處理數(shù)據(jù)的格式的榄融,你可以選擇處理你的時(shí)間格式,或者你想把一個(gè)字符串變?yōu)閿?shù)字類(lèi)型(當(dāng)然需要合法)救湖,同樣的你也可以返回去做愧杯。可以設(shè)置的轉(zhuǎn)換類(lèi)型 包括: "integer"鞋既, "float" 和 "string"力九。

filter {

? ? mutate {

? ? ? ? #接收一個(gè)數(shù)組,其形式為value涛救,type

? ? ? ? #需要注意的是畏邢,你的數(shù)據(jù)在轉(zhuǎn)型的時(shí)候要合法,你總是不能把一個(gè)‘a(chǎn)bc’的字符串轉(zhuǎn)換為123的检吆。

? ? ? ? convert => [

? ? ? ? ? ? ? ? ? ? #把request_time的值裝換為浮點(diǎn)型

? ? ? ? ? ? ? ? ? ? "request_time", "float"舒萎,

? ? ? ? ? ? ? ? ? ? #costTime的值轉(zhuǎn)換為整型

? ? ? ? ? ? ? ? ? ? "costTime", "integer"

? ? ? ? ? ? ? ? ? ? ]

? ? }

}

我的logstash是從kafka中讀取數(shù)據(jù),取出來(lái)的數(shù)據(jù)格式為"zhangsan_1_25_student_15064573848"蹭沛;一個(gè)人的姓名_性別_年齡_職業(yè)_時(shí)間戳臂寝,我的需求是將每個(gè)字段分別存到elasticsearch中,所以首先需要對(duì)取出來(lái)的字符串拆分摊灭,以便模板能映射各個(gè)字段


filter{

? ? mutate{

? ? ? ? split=>["message","_"] ?//使用split以下劃線進(jìn)行拆分

? ? ? ? add_field => { ?//由于拆分完咆贬,只有值,沒(méi)有字段名帚呼,所以還要使用add_field添加字段

? ? ? ? ? "name" => "%{[message][0]}"

? ? ? ? }

? ? ? ? add_field => {

? ? ? ? ? "gender" => "%{[message][1]}"

? ? ? ? }

? ? ? ? add_field => {

? ? ? ? ? "age" => "%{[message][2]}"

? ? ? ? }

? ? ? ? add_field => {

? ? ? ? ? "job" => "%{[message][3]}"

? ? ? ? }

? ? ? ? add_field => {

? ? ? ? ? "time" => "%{[message][4]}"

? ? ? ? }

? ? ? ? remove_field => ["message"]

? ? }

? ? mutate{ //要轉(zhuǎn)換字段掏缎,請(qǐng)重新再添加一個(gè)mutate

? ? ? ? convert => { "gender" => "integer"} ??//由于拆分完每個(gè)都是字符串,而對(duì)于age等字段我想存儲(chǔ)為整型煤杀,所以要

? ? ? ? convert => { "age" => "integer"}

? ? ? ? convert => { "time" => "integer"}

? ? }

}


更多更詳細(xì)的配置說(shuō)明眷蜈,請(qǐng)見(jiàn)

https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-update


3、ruby插件 官方對(duì)ruby插件的介紹是——無(wú)所不能沈自。ruby插件可以使用任何的ruby語(yǔ)法酌儒,無(wú)論是邏輯判斷,條件語(yǔ)句枯途,循環(huán)語(yǔ)句忌怎,還是對(duì)字符串的操作,對(duì)EVENT對(duì)象的操作酪夷,都是極其得心應(yīng)手的榴啸。

filter {

? ? ruby {

? ? ? ? #ruby插件有兩個(gè)屬性,一個(gè)init 還有一個(gè)code

? ? ? ? #init屬性是用來(lái)初始化字段的晚岭,你可以在這里初始化一個(gè)字段插掂,無(wú)論是什么類(lèi)型的都可以,這個(gè)字段只是在ruby{}作用域里面生效。

? ? ? ? #這里我初始化了一個(gè)名為field的hash字段辅甥。可以在下面的coed屬性里面使用燎竖。

? ? ? ? init => [field={}]

? ? ? ? #code屬性使用兩個(gè)冒號(hào)進(jìn)行標(biāo)識(shí)璃弄,你的所有ruby語(yǔ)法都可以在里面進(jìn)行。

? ? ? ? #下面我對(duì)一段數(shù)據(jù)進(jìn)行處理构回。

? ? ? ? #首先夏块,我需要在把message字段里面的值拿到,并且對(duì)值進(jìn)行分割按照“|”纤掸。這樣分割出來(lái)的是一個(gè)數(shù)組(ruby的字符創(chuàng)處理)脐供。

? ? ? ? #第二步,我需要循環(huán)數(shù)組判斷其值是否是我需要的數(shù)據(jù)(ruby條件語(yǔ)法借跪、循環(huán)結(jié)構(gòu))

? ? ? ? #第三步政己,我需要吧我需要的字段添加進(jìn)入EVEVT對(duì)象。

? ? ? ? #第四步掏愁,選取一個(gè)值歇由,進(jìn)行MD5加密

? ? ? ? #什么是event對(duì)象?event就是Logstash對(duì)象果港,你可以在ruby插件的code屬性里面操作他沦泌,可以添加屬性字段,可以刪除辛掠,可以修改谢谦,同樣可以進(jìn)行樹(shù)脂運(yùn)算。

? ? ? ? #進(jìn)行MD5加密的時(shí)候萝衩,需要引入對(duì)應(yīng)的包回挽。

? ? ? ? #最后把冗余的message字段去除。

? ? ? ? code => "

? ? ? ? ? ? array=event欠气。get('message').split('|')

? ? ? ? ? ? array.each do |value|

? ? ? ? ? ? ? ? if value.include? 'MD5_VALUE'

? ? ? ? ? ? ? ? ? ? then

? ? ? ? ? ? ? ? ? ? ? ? require 'digest/md5'

? ? ? ? ? ? ? ? ? ? ? ? md5=Digest::MD5.hexdigest(value)

? ? ? ? ? ? ? ? ? ? ? ? event.set('md5',md5)

? ? ? ? ? ? ? ? end

? ? ? ? ? ? ? ? if value.include? 'DEFAULT_VALUE'

? ? ? ? ? ? ? ? ? ? then

? ? ? ? ? ? ? ? ? ? ? ? event.set('value',value)

? ? ? ? ? ? ? ? end

? ? ? ? ? ? end

? ? ? ? ? ? remove_field=>"message"

? ? ? ? "

? ? }

}

?4厅各、date插件 這里需要合前面的grok插件剝離出來(lái)的值logdate配合使用(當(dāng)然也許你不是用grok去做)。

filter{

? ? date{

? ? ? ? #還記得grok插件剝離出來(lái)的字段logdate嗎预柒?就是在這里使用的队塘。你可以格式化為你需要的樣子总处,至于是什么樣子巩剖。就得你自己取看啦。

? ? ? ? #為什什么要格式化鲜滩?

? ? ? ? #對(duì)于老數(shù)據(jù)來(lái)說(shuō)這非常重要淋袖,應(yīng)為你需要修改@timestamp字段的值鸿市,如果你不修改,你保存進(jìn)ES的時(shí)間就是系統(tǒng)但前時(shí)間(+0時(shí)區(qū))

? ? ? ? #單你格式化以后,就可以通過(guò)target屬性來(lái)指定到@timestamp焰情,這樣你的數(shù)據(jù)的時(shí)間就會(huì)是準(zhǔn)確的陌凳,這對(duì)以你以后圖表的建設(shè)來(lái)說(shuō)萬(wàn)分重要。

? ? ? ? #最后内舟,logdate這個(gè)字段合敦,已經(jīng)沒(méi)有任何價(jià)值了,所以我們順手可以吧這個(gè)字段從event對(duì)象中移除验游。

? ? ? ? match=>["logdate","dd/MMM/yyyy:HH:mm:ss Z"]

? ? ? ? target=>"@timestamp"

? ? ? ? remove_field => 'logdate'

? ? ? ? #還需要強(qiáng)調(diào)的是充岛,@timestamp字段的值,你是不可以隨便修改的耕蝉,最好就按照你數(shù)據(jù)的某一個(gè)時(shí)間點(diǎn)來(lái)使用崔梗,

? ? ? ? #如果是日志,就使用grok把時(shí)間摳出來(lái)垒在,如果是數(shù)據(jù)庫(kù)蒜魄,就指定一個(gè)字段的值來(lái)格式化,比如說(shuō):"timeat", "%{TIMESTAMP_ISO8601:logdate}"

? ? ? ? #timeat就是我的數(shù)據(jù)庫(kù)的一個(gè)關(guān)于時(shí)間的字段爪膊。

? ? ? ? #如果沒(méi)有這個(gè)字段的話权悟,千萬(wàn)不要試著去修改它。

? ? }

}

5推盛、json插件峦阁,這個(gè)插件也是極其好用的一個(gè)插件,現(xiàn)在我們的日志信息耘成,基本都是由固定的樣式組成的榔昔,我們可以使用json插件對(duì)其進(jìn)行解析,并且得到每個(gè)字段對(duì)應(yīng)的值瘪菌。

filter{

? ? #source指定你的哪個(gè)值是json數(shù)據(jù)撒会。

? ? json {

? ? ? ? source => "value"

? ? }

? ? #注意:如果你的json數(shù)據(jù)是多層的,那么解析出來(lái)的數(shù)據(jù)在多層結(jié)里是一個(gè)數(shù)組师妙,你可以使用ruby語(yǔ)法對(duì)他進(jìn)行操作诵肛,最終把所有數(shù)據(jù)都裝換為平級(jí)的。

}

?json插件還是需要注意一下使用的方法的默穴,下圖就是多層結(jié)構(gòu)的弊端:

對(duì)應(yīng)的解決方案為:

ruby{

? ? ? ? ? ? ? ? code=>"

? ? ? ? ? ? ? ? ? kv=event.get('content')[0]

? ? ? ? ? ? ? ? ? kv.each do |k,v|

? ? ? ? ? ? ? ? ? event.set(k,v)

? ? ? ? ? ? ? ? ? end"

? ? ? ? ? ? ? ? ? remove_field => ['content','value','receiptNo','channelId','status']

? ? ? ? ? ? }

?Logstash filter組件的插件基本介紹到這里了怔檩,這里需要明白的是:

add_field、remove_field蓄诽、add_tag薛训、remove_tag 是所有 Logstash 插件都有。相關(guān)使用方法看字段名就可以知道仑氛。不如你也試試吧乙埃。

-?

原文:https://blog.csdn.net/xcl119xcl/article/details/89241388

版權(quán)聲明:本文為博主原創(chuàng)文章闸英,轉(zhuǎn)載請(qǐng)附上博文鏈接!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末介袜,一起剝皮案震驚了整個(gè)濱河市甫何,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌米酬,老刑警劉巖沛豌,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異赃额,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)叫确,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)跳芳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人竹勉,你說(shuō)我怎么就攤上這事飞盆。” “怎么了次乓?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵吓歇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我票腰,道長(zhǎng)城看,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任杏慰,我火速辦了婚禮测柠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缘滥。我一直安慰自己轰胁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布朝扼。 她就那樣靜靜地躺著赃阀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪擎颖。 梳的紋絲不亂的頭發(fā)上榛斯,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音肠仪,去河邊找鬼肖抱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛异旧,可吹牛的內(nèi)容都是我干的意述。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼荤崇!你這毒婦竟也來(lái)了拌屏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤术荤,失蹤者是張志新(化名)和其女友劉穎倚喂,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瓣戚,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡端圈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了子库。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舱权。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖仑嗅,靈堂內(nèi)的尸體忽然破棺而出宴倍,到底是詐尸還是另有隱情,我是刑警寧澤仓技,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布鸵贬,位于F島的核電站,受9級(jí)特大地震影響脖捻,放射性物質(zhì)發(fā)生泄漏阔逼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一郭变、第九天 我趴在偏房一處隱蔽的房頂上張望颜价。 院中可真熱鬧,春花似錦诉濒、人聲如沸周伦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)专挪。三九已至,卻和暖如春片排,著一層夾襖步出監(jiān)牢的瞬間寨腔,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工率寡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迫卢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓冶共,卻偏偏與公主長(zhǎng)得像乾蛤,于是被迫代替她去往敵國(guó)和親每界。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容