2016-06-28 38 views
0

刪除日誌消息所以我日誌格式的消息:含有的特定字符串

[INFO] <blah.blah>  2016-06-27 21:41:38,263 some text 
[INFO] <blah.blah>  2016-06-28 18:41:38,262 some other text 

現在我想丟棄不包含特定字符串「XYZ」,並保持所有其餘的所有日誌。我也想索引時間戳。

grokdebug幫助不大。

這是我的嘗試:

input { 
    file { 
     path => "/Users/username/Desktop/validateLogconf/logs/*" 
     start_position => "beginning" 

    } 
} 

filter { 

    grok { 
     match => { 
     "message" => '%{SYSLOG5424SD:loglevel} <%{JAVACLASS:job}>  %{GREEDYDATA:content}' 
     } 
    } 

    date { 
    match => [ "Date", "YYYY-mm-dd HH:mm:ss" ] 
    locale => en 
    } 

} 

output { 
    stdout { 
codec => plain { 
         charset => "ISO-8859-1" 
       } 

} 
    elasticsearch { 
     hosts => "http://localhost:9201" 
     index => "hello" 

    } 
} 

我是新來神交上方,圖案可能不決策意識。請幫忙。

+0

你應該問兩個問題,而不是隻有一個。 – baudsp

回答

4

要刪除不包含字符串的消息:xyz

if ([message] !~ "xyz") { 
     drop { } 
    } 

您的grok模式不是抓取日誌的日期部分。
一旦你從包含日期的Grok模式中獲得一個字段,就可以在該字段上輸入日期過濾器。
所以你神交過濾器應該是這樣的:

grok { 
     match => { 
     "message" => '%{SYSLOG5424SD:loglevel} <%{JAVACLASS:job}>  %{TIMESTAMP_ISO8601:Date} %{GREEDYDATA:content}' 
     } 
    } 

我加了部分搶日期,這將是在該領域Date。然後你可以使用日期過濾器:

date { 
    match => [ "Date", "YYYY-mm-dd HH:mm:ss,SSS" ] 
    locale => en 
    } 

我添加了,SSS,這樣的格式匹配來自Date視野中的一個。 解析日期將存儲在@timestamp字段中,除非與target參數指定的值不同。

+0

我可以做'target =>「Date」嗎?......它會覆蓋最初的「日期」? – PuRaK

+0

是的,它會覆蓋'Date'字段,用日期替換字符串。如果目標選項不存在,它將覆蓋'@ timestamp'字段 – baudsp

+0

酷!謝謝! :) – PuRaK

1

檢查,如果您的郵件中包含一個子,你可以這樣做:

if [message] =~ "a" { 
     mutate { 
      add_field => { "hello" => "world" } 
     } 
} 

所以你的情況,你可以使用,如果調用下降{}過濾器,也可以在其包裝你的輸出插件。

剖析的日期,並把它寫回你的時間戳字段,你可以使用這樣的事情:

date { 
      locale => "en" 
      match => ["timestamp", "ISO8601"] 
      timezone => "UTC" 
      target => "@timestamp" 
      add_field => { "debug" => "timestampMatched"} 
} 

這是我的時間戳匹配:

  • 源字段:「時間戳」(看匹配)
  • 格式爲「ISO ...」,您可以使用與您的時間戳相匹配的自定義格式
  • 時區 - 自我解釋
  • 目標 - 寫回事件的「@timestamp」字段
  • 添加調試現場檢查已正確匹配

希望幫助,

阿圖爾

相關問題