elasticsearch,logstash,logstash-grok,Regex,elasticsearch,Logstash,Logstash Grok" /> elasticsearch,logstash,logstash-grok,Regex,elasticsearch,Logstash,Logstash Grok" />

Regex 双引号Logstash Grok图案

Regex 双引号Logstash Grok图案,regex,elasticsearch,logstash,logstash-grok,Regex,elasticsearch,Logstash,Logstash Grok,我正在用Logstash及其Grok过滤器解析代理日志。日志包含带引号的字符串: 1438120705 [.....] "SEF-EDP8" - "C" "/GPM/1023/5745-7/456V/" 使用以下图案时,效果非常迷人: %{NUMBER:ts} [......] (-|"%{USERNAME:token1}") (-|%{DATA:token2}) (-|"%{WORD:token3}") (-|"%{DATA:token4}") 这不适用于Logstash的Grok,因为G

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

1438120705 [.....] "SEF-EDP8" - "C"
"/GPM/1023/5745-7/456V/"
使用以下图案时,效果非常迷人:

%{NUMBER:ts} [......] (-|"%{USERNAME:token1}") (-|%{DATA:token2}) (-|"%{WORD:token3}") (-|"%{DATA:token4}")
这不适用于Logstash的Grok,因为Grok模式中有双引号。日志存储错误日志:

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})
这也适用于,但引号是用带引号的字符串提取的。它也不能与Logstash一起工作

token1 : ""SEF-EDP8"" token2 : null token3 : ""C"" token4 :
""/GPM/1023/5745-7/456V/""
如何使其与日志存储一起工作?
如何删除这些多余的双引号?

在提取带引号的字段后,请尝试gsub

filter {
  mutate {
    gsub => [

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

如果用反斜杠“逃逸”,则效果良好

%{NUMBER:ts}[…]({USERNAME:token1}”)({DATA:token2})({WORD:token3}”)({DATA:token4})

您的新字符串将看起来像


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

将外部双引号改为单引号对我来说很有帮助:

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

希望有帮助。

如果你只是用反斜杠转义引号,会发生什么?试试
%{NUMBER:ts}\[^\]*](-“({DATA:token1})”(-“({DATA:token2})”(-“({DATA:token3})”(((-“({DATA:token3})”)(((((-“({DATA:token4})”
。我没有更多的示例输入,因此,我不确定它是否能与所有示例输入一起工作。@fafl它不喜欢它,它也不需要转义,
QS
通过设计匹配引号字符串。您需要
数据
标记。@Wiktor Stribiżew:括号不会更改日志存储行为:错误:应为#,{,}之一在第9行,过滤器{grok{match=>{“message”=>“%{NUMBER:ts}[…]之后的第204列(字节374)(“