2017-02-14 60 views
1

我在使用Grok過濾器時遇到了問題。下面是我的過濾器正在按預期工作,直到在課程名稱中沒有$。當線程名稱如PropertiesReader $它失敗。我還能使用什麼,以便它可以用特殊字符解析類名?

filter { 
     grok { 
      match => [ "message", "%{TIMESTAMP_ISO8601:LogDate} %{LOGLEVEL:loglevel} %{WORD:threadName}:%{NUMBER:ThreadID} - %{GREEDYDATA:Line}" ] 
     } 
     json { 
      source => "Line" 
     } 
     mutate { 
      remove_field => [ "Line" ] 
     } 
} 

回答

0

您正在使用WORD作爲不含特殊字符的線程名稱模式。爲了證實這一點,讓我們看看這種模式:WORD \b\w+\b

使用自定義模式。只是descibe它在這樣的文件:

MYPATTERN ([A-z]+\$?) 

然後你可以使用它在你的配置是這樣的:

grok { 
    patterns_dir => ["/path/to/pattern/dor"] 
    match => [ "message", "%{TIMESTAMP_ISO8601:LogDate} %LOGLEVEL:loglevel} %{MYPATTERN:threadName}:%{NUMBER:ThreadID} - %GREEDYDATA:Line}" ] 
    } 

可以找到有關在docs

+0

謝謝它的工作。 – BobCoder

2

您不限於grok模式名稱。你可以做任何正則表達式。例如,代替%{WORD:threadName},您可以輸入(?<threadName>[^:]+),該字符表示匹配任何不是:的字符,並將其指定給threadName

0

定製模式的更多信息如果您的threadName不包含空格或冒號,您也可以使用%{DATA:threadName}而不是%{WORD:threadName}