#讀
input {
file {
path => "文件全路徑"
type => "任意名字最好有意義"#自定義日志區(qū)分類(lèi)型
start_position => "beginning" #從文件開(kāi)始處讀寫(xiě)
}
}
#過(guò)濾
filter {
grok {
#切割后日期名字叫l(wèi)ogdate
match => ["message", "%{TIMESTAMP_ISO8601:logdate}"]
}
date {
#logdate 從上面過(guò)濾后取到的字段名,yyyy-MM-dd HH:mm:ss.SSS 日期格式條件
match => ["logdate", "yyyy-MM-dd HH:mm:ss.SSS"]
#match => ["logdate", "yyyyMMdd","yyyy-MM-dd"]
#賦值給那個(gè)key
target => "@timestamp"
#刪除不需要的字段
remove_field => ["logdate"]
}
#合并錯(cuò)誤日志
multiline {
pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
negate => true
what => "previous"
}
}
#輸出
output{
#輸出到ES
elasticsearch{
hosts=>["127.0.0.1:9200"]
#es的index名字,默認(rèn)就是這個(gè),可以更改
index => "logstash-%{+YYYY.MM.dd}"
}
#輸出到控制臺(tái)
stdout{codec => rubydebug}
}
Logstash將日志產(chǎn)生時(shí)間替換@timestamp
https://blog.csdn.net/zmx729618/article/details/80893763
2018年07月03日 09:40:21 零度anngle 閱讀數(shù):5581
<article class="baidu_pl" style="box-sizing: inherit; outline: 0px; margin: 0px; padding: 16px 0px 0px; display: block; position: relative; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">
一、跟著官網(wǎng)學(xué)習(xí)一下date插件
日期過(guò)濾器用于從字段中解析日期,然后使用該日期或時(shí)間戳作為事件的logstash時(shí)間戳。例如,syslog事件通常具有這樣的時(shí)間戳:
Bash
"Apr 17 09:32:01"
你可以使用日期格式MMM dd HH:mm:ss來(lái)解析這個(gè)。日期過(guò)濾器對(duì)于排序事件和回填舊數(shù)據(jù)尤為重要。 如果您在活動(dòng)中沒(méi)有找到正確的日期,那么稍后搜索它們可能會(huì)排序錯(cuò)亂。在沒(méi)有這個(gè)過(guò)濾器的情況下,logstash會(huì)根據(jù)第一次看到事件(在輸入時(shí)間),如果時(shí)間戳還沒(méi)有在事件中設(shè)置,選擇一個(gè)時(shí)間戳。 例如,在文件輸入的情況下,時(shí)間戳被設(shè)置為每次讀取的時(shí)間。
1.1 Date過(guò)濾器配置選項(xiàng)
該插件支持以下配置選項(xiàng)和稍后介紹的通用選項(xiàng)。
locale:
值類(lèi)型是字符串,這個(gè)設(shè)置沒(méi)有默認(rèn)值。使用IETF-BCP47或POSIX語(yǔ)言標(biāo)記指定用于日期分析的區(qū)域設(shè)置。 簡(jiǎn)單的例子是en,美國(guó)的BCP47或者en_US的POSIX。大多數(shù)情況下需要設(shè)置語(yǔ)言環(huán)境來(lái)解析月份名稱(chēng)(MMM模式)和星期幾名稱(chēng)(EEE模式)。如果未指定,則將使用平臺(tái)默認(rèn)值,但對(duì)于非英文平臺(tái)默認(rèn)情況下,英文解析器也將用作回退機(jī)制。
match:
值類(lèi)型是數(shù)組,默認(rèn)值是[]。首先有字段名稱(chēng)的數(shù)組,格式模式如下,[field,formats ...]如果你的時(shí)間字段有多種可能的格式,你可以這樣做:
Bash
match => [ "logdate", "MMM dd yyyy HH:mm:ss", "MMM d yyyy HH:mm:ss", "ISO8601" ]
#以上將匹配一個(gè)系統(tǒng)日志(rfc3164)或iso8601時(shí)間戳。
有一些特殊的例外。 以下格式文字可幫助您節(jié)省時(shí)間并確保日期解析的正確性。
Bash
ISO8601 - 應(yīng)解析任何有效的ISO8601時(shí)間戳,如2011-04-19T03:44:01.103ZUNIX - 將解析float或int值,表示自1346149001.132以及1326149001.132以來(lái)的秒數(shù)(以秒為單位)UNIX_MS - 將分析int值表示unix時(shí)間(以毫秒為單位),如1366125117000TAI64N - 將解析tai64n時(shí)間值
例如,如果您有一個(gè)字段logdate,值類(lèi)似于Aug 13 2010 00:03:44,您可以使用此配置:
Bash
filter { date { match => [ "logdate", "MMM dd yyyy HH:mm:ss" ] }}
如果您的字段嵌套在結(jié)構(gòu)中,則可以使用嵌套語(yǔ)法[foo] [bar]來(lái)匹配其值。 有關(guān)更多信息,請(qǐng)參閱字段參考[<u style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; word-wrap: break-word;">https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html#logstash-config-field-references</u>](https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html#logstash-config-field-references)
有關(guān)語(yǔ)法的更多細(xì)節(jié) :
用于解析日期和時(shí)間文本的語(yǔ)法使用字母來(lái)指示時(shí)間值(月,分等)的類(lèi)型,以及重復(fù)的字母來(lái)表示該值的形式(2位月份,全月份名稱(chēng)等)。以下是可用于解析日期和時(shí)間的內(nèi)容:
y year:
Bash
yyyy #全年號(hào)碼。 例如:2015。yy #兩位數(shù)年份。 例如:2015年的15。
M month of the year :
Bash
M #最小數(shù)字月份。 例如:1 for January and 12 for December.。MM #兩位數(shù)月份。 如果需要,填充零。 例如:01 for January and 12 for DecembeMMM #縮短的月份文本。 例如: Jan for January。 注意:使用的語(yǔ)言取決于您的語(yǔ)言環(huán)境。 請(qǐng)參閱區(qū)域設(shè)置以了解如何更改語(yǔ)言。MMMM #全月文本,例如:January。 注意:使用的語(yǔ)言取決于您的語(yǔ)言環(huán)境。
d day of the month :
Bash
d #最少數(shù)字的一天。 例如:1月份的第一天1。dd #兩位數(shù)的日子,如果需要的話可以填零.例如:01 for the 1st of the month。
H hour of the day (24-hour clock):
Bash
H #最小數(shù)字小時(shí)。 例如:0表示午夜。HH #兩位數(shù)小時(shí),如果需要填零。 例如:午夜00。
m minutes of the hour (60 minutes per hour):
Bash
m #最小的數(shù)字分鐘。 例如:0。mm #兩位數(shù)分鐘,如果需要填零。 例如:00。
s seconds of the minute (60 seconds per minute) :
Bash
s #最小數(shù)字秒。 例如:0。ss #兩位數(shù)字,如果需要填零。 例如:00。
S 秒的小數(shù)部分最大精度是毫秒(SSS)。 除此之外,零附加。
Bash
S #十分之一秒。例如:0為亞秒值012SS #百分之一秒 例如:01為亞秒值01SSS #千分之一秒 例如:012為亞秒值012
Z 時(shí)區(qū)偏移或身份
Bash
Z #時(shí)區(qū)偏移,結(jié)構(gòu)為HHmm(Zulu/UTC的小時(shí)和分鐘偏移量)。例如:-0700。ZZ #時(shí)區(qū)偏移結(jié)構(gòu)為HH:mm(小時(shí)偏移和分鐘偏移之間的冒號(hào))。 例如:-07:00。ZZZ #時(shí)區(qū)身份。 例如:America/Los_Angeles。 注意:有效的ID在列表中列出http://joda-time.sourceforge.net/timezones.html
z 時(shí)區(qū)名稱(chēng)。 時(shí)區(qū)名稱(chēng)(z)不能被分析。
w 一年中的一周
Bash
w #最小數(shù)字周。 例如:1。ww #兩位數(shù)周,如果需要填零。例如:01。
D 一年中的一天
e 星期幾(數(shù)量)
E 一周中的天(文本)
Bash
E,EE,EEE #星期幾縮寫(xiě)。 例如:Mon, Tue, Wed, Thu, Fri, Sat, Sun。 注意:這個(gè)的實(shí)際語(yǔ)言將取決于您的語(yǔ)言環(huán)境。EEEE #一周中的全文。 例如:Monday, Tuesday,...注意:這個(gè)的實(shí)際語(yǔ)言將取決于您的語(yǔ)言環(huán)境。
對(duì)于非格式化語(yǔ)法,您需要在值的周?chē)胖脝我?hào)字符。 例如,如果你解析ISO8601時(shí)間,“2015-01-01T01:12:23”這個(gè)小小的“T”不是一個(gè)有效的時(shí)間格式,而你想說(shuō)“從字面上看,一個(gè)T”,你的格式將是 這個(gè):“yyyy-MM-dd’T'HH:mm:ss”
其他不太常見(jiàn)的日期單位,如時(shí)代(G),世紀(jì)(C),上午/下午(一),和更多,可以了解joda-time文檔:<u style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; word-wrap: break-word;">http://www.joda.org/joda-time/key_format.html</u>
tag_on_failure :
值類(lèi)型是數(shù)組,默認(rèn)值是[“_dateparsefailure”]。沒(méi)有成功匹配時(shí),將值追加到標(biāo)簽字段
target :
值類(lèi)型是字符串,默認(rèn)值是“@timestamp”。將匹配的時(shí)間戳存儲(chǔ)到給定的目標(biāo)字段中。 如果未提供,則默認(rèn)更新事件的@timestamp字段。
timezone:
值類(lèi)型是字符串,這個(gè)設(shè)置沒(méi)有默認(rèn)值。指定要用于日期分析的時(shí)區(qū)標(biāo)準(zhǔn)ID。有效的ID列在Joda.org可用時(shí)區(qū)頁(yè)面上。如果時(shí)區(qū)無(wú)法從數(shù)值中提取,那么這非常有用,并且不是平臺(tái)默認(rèn)值。 如果沒(méi)有指定,將使用平臺(tái)默認(rèn)值。 Canonical ID是很好的,因?yàn)樗鼮槟?jié)省了夏令時(shí)。例如,America/Los_Angeles或Europe/Paris是有效的ID。該字段可以是動(dòng)態(tài)的,并使用%{field}語(yǔ)法包含事件的一部分
2.2 常規(guī)選項(xiàng)

前面翻譯好多次了這里就不翻譯了。
博文來(lái)自:www.51niux.com
二、來(lái)走一下date的小例子
2.1 先不加date過(guò)濾插件查看一下logstash的輸出:
這里搞了個(gè)三月份的舊日志來(lái)測(cè)試一下
下面是stdout { codec => rubydebug}的輸出:
Bash
"@timestamp" => 2017-12-20T08:39:07.982Z, "request_time" => "0.040", "nginx.access.method" => "GET", "nginx.access.time" => "14/Mar/2017:00:00:02 +0800",
如果不用 date 插件,那么 Logstash 將處理時(shí)間作為時(shí)間戳。時(shí)間戳字段是 Logstash 自己添加的內(nèi)置字段 @timestamp,也就是說(shuō)如果你沒(méi)有設(shè)置date過(guò)濾器,時(shí)間是因?yàn)檫@個(gè)時(shí)間是UTC時(shí)間,那么timestamp時(shí)間呢就是比北京時(shí)間采集時(shí)間少8個(gè)小時(shí),也就是說(shuō)如果我們的采集時(shí)間是16:39:07秒,那么timestamp的時(shí)間就是08:39:07。
下面是es上面的查看:



可以看到Kibana顯示的信息跟ES里面記錄的時(shí)間是不一致的,因?yàn)長(zhǎng)ogstash采集到數(shù)據(jù)之后插入到ES中,所以ES中保留的時(shí)間也是UTC的時(shí)間,創(chuàng)建索引也是按照Logstash里面的時(shí)間創(chuàng)建的。但是Kibana呢是根據(jù)你當(dāng)前瀏覽器的時(shí)區(qū)然后再在timestamp基礎(chǔ)上加減時(shí)間的,所以kibana顯示的時(shí)間是我們以為正確的。
博文來(lái)自:www.51niux.com
3.2 加上date插件之后再來(lái)試一試
[14/Mar/2017:06:57:12 +0800] #怎么在logstash里面把這個(gè)轉(zhuǎn)換成"2017-11-20 12:00:00",直接這種格式我是真不會(huì)......。在nginx里面還好直接指定日志格式'{"timestamp":"$time_iso8601",',然后logstash里面通過(guò)match => ["timestamp", "ISO8601"]匹配到。
我這里將日志傳送到ES集群里面也不是主要靠filebeat采集數(shù)據(jù)到Logstash,然后Logstash再進(jìn)行g(shù)rok轉(zhuǎn)換成json格式。如果數(shù)據(jù)很大的話grok轉(zhuǎn)換成json格式挺耗資源的,所以都是事先將日志通過(guò)程序轉(zhuǎn)換成json格式。
Bash
{"agent":"Windows 7","client_time":"2017-11-20 12:00:00","client_ip":"123.10.91.106"}
類(lèi)似于上面這種格式當(dāng)然里面的內(nèi)容要很多啊,我這里特意把日志時(shí)間往前調(diào)了一個(gè)月方便對(duì)比哈。
然后logstash直接通過(guò)file的codec => "json"格式采集就可以了,信息都是以json格式存儲(chǔ)在logstash本地的。
$ vim /home/elk/logstash/conf/date-test.conf
Bash
input { file { path => "/usr/local/nginx/logs/access.*" codec => "json" }}filter { date { match => ["client_time", "yyyy-MM-dd HH:mm:ss"] #這里是如果client_time跟后面的格式匹配上了就會(huì)去替換,替換什么呢?target默認(rèn)指的就是@timestamp,所以就是以client_time的時(shí)間更新@timestamp的時(shí)間 }}output { stdout { codec => rubydebug } elasticsearch { hosts => ["192.168.14.60","192.168.14.61","192.168.14.62","192.168.14.63","192.168.14.64"] index => "logstash-nginx-access-test-51niux-com-%{+YYYY.MM}" }}
$ /home/elk/logstash/bin/logstash -f /home/elk/logstash/conf/date-test.conf #啟動(dòng)logstash,然后插入一條測(cè)試數(shù)據(jù)類(lèi)似于我上面展示的那種json格式到被采集文件中去
logstash打印到屏幕的輸出查看:
Bash
{ "path" => "/usr/local/nginx/logs/access.log", "agent" => "Windows 7", "@timestamp" => 2017-11-20T04:00:00.000Z, #從屏幕端的數(shù)據(jù)可以看到timestamp時(shí)間已經(jīng)不是采集時(shí)間而是采集數(shù)據(jù)里面的日志時(shí)間了,只不過(guò)將時(shí)間轉(zhuǎn)變成了UTC時(shí)間。 "client_time" => "2017-11-20 12:00:00", "@version" => "1", "host" => "localhost.localdomain", "client_ip" => "123.10.91.106"}
Kibana上面的查看:

注意我特意標(biāo)紅了啊,因?yàn)楫?dāng)前是12月份所以你得把時(shí)間調(diào)整到十一月,也就是上圖右上角的地方可以選擇時(shí)間范圍。
ES上面的索引查看:

這其實(shí)挺有用的,因?yàn)槟闳罩九判虻臅r(shí)候包括分析的時(shí)候以及創(chuàng)建索引的時(shí)候如果你不用date轉(zhuǎn)換的話,默認(rèn)都是走的采集時(shí)間,如果你是實(shí)時(shí)日志那倒是差別不是太大,但是采集的日志如果不是很實(shí)時(shí)呢,比如說(shuō)是離線轉(zhuǎn)換格式日志,還比如說(shuō)filebeat會(huì)把日志存會(huì)再發(fā)送等等,那你日志產(chǎn)生的時(shí)間戳就不對(duì)了,然后呢實(shí)現(xiàn)的思路肯定有很多,重點(diǎn)就是date插件這個(gè)知識(shí)點(diǎn),了解掌握住就哦了,剩下的就是看需求去嗨了。
</article>
Logstash詳解之——filter模塊
ritit 2017-08-01 17:57:58 瀏覽18869 評(píng)論0
摘要: Logstash三個(gè)組件的第二個(gè)組件,也是真?zhèn)€Logstash工具中最復(fù)雜,最蛋疼的一個(gè)組件,當(dāng)然,也是最有作用的一個(gè)組件。 1、grok插件 grok插件有非常強(qiáng)大的功能,他能匹配一切數(shù)據(jù),但是他的性能和對(duì)資源的損耗同樣讓人詬病。
Logstash三個(gè)組件的第二個(gè)組件,也是真?zhèn)€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)然需要合法),同樣的你也可以返回去做??梢栽O(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"
]
}
}
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字段??梢栽谙旅娴腸oed屬性里面使用。
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)的弊端:
[圖片上傳失敗...(image-a3c912-1556457723389)]
對(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)使用反法看字段名就可以知道。不如你也試試吧。。。。