带双引号的Logstash Grok模式

时间:2016-02-24 10:35:56

标签: regex elasticsearch logstash logstash-grok

我正在使用Logstash及其Grok过滤器解析代理日志。日志包含带引号的字符串:

1438120705 [.....] "SEF-EDP8" - "C"
"/GPM/1023/5745-7/456V/"

使用Grok Debugger,以下模式就像魅力一样:

%{NUMBER:ts} [......] (-|"%{USERNAME:token1}") (-|%{DATA:token2}) (-|"%{WORD:token3}") (-|"%{DATA:token4}")

这不适用于Logstash的Grok,因为grok模式中有双引号。 Logstash错误日志:

Error: Expected one of #, {, } at line 9, column 204 (byte 374) after
filter {
    grok {
        match => { "message" => "%{NUMBER:ts} [......] ("

所以我使用QuotedString grok模式代替:

%{NUMBER:ts} [......] (-|%{QS:token1}) (-|%{DATA:token2}) (-|%{QS:token3}) (-|%{QS:token4})

这也适用于Grok Debugger,但引号是用引号字符串提取的。它无法与Logstash一起使用

token1 : ""SEF-EDP8"" token2 : null token3 : ""C"" token4 :
""/GPM/1023/5745-7/456V/""

如何使用 Logstash ? 我如何删除这些不需要的额外双引号

3 个答案:

答案 0 :(得分:7)

如果你使用反斜杠逃脱,那么它可以正常工作。

%{NUMBER:ts} [......]( - |“%{USERNAME:token1}”)( - |%{DATA:token2})( - |“%{WORD:token3}” )( - |“%{DATA:token4}”)

您的新字符串将显示为

%{NUMBER:ts} [......]( - | \“%{USERNAME:token1} \”)( - |%{DATA:token2})( - | \“%{WORD: token3}“)( - | \”%{DATA:token4} \“)

答案 1 :(得分:4)

将外部双引号更改为单引号代替了我:

grok {
  match => { "message" => 'SOME "TEXT QUOTED"' }
}

希望它有所帮助。

答案 2 :(得分:0)

使用引号

提取字段后尝试使用gsub
filter {
  mutate {
    gsub => [

      "fieldname", "\"", ""
    ]
  }
}

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