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

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

使用Grok Debugger时,以下模式就像一个吊饰一样工作:
%{NUMBER:ts} [......] (-|"%{USERNAME:token1}") (-|%{DATA:token2}) (-|"%{WORD:token3}") (-|"%{DATA:token4}")

由于grok模式中的双引号,因此这不适用于Logstash的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 一起使用?
我如何删除这些多余的双引号

最佳答案

如果您使用反斜杠转义了“,那么它可以正常工作。

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

您的新字符串将如下所示

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

关于regex - Logstash Grok模式带双引号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35599688/

10-13 07:52