c-v*_*val 5 regex elasticsearch logstash logstash-grok
我正在使用Logstash及其Grok过滤器解析代理日志.日志包含带引号的字符串:
1438120705 [.....] "SEF-EDP8" - "C"
"/GPM/1023/5745-7/456V/"
Run Code Online (Sandbox Code Playgroud)
使用Grok Debugger,以下模式就像魅力:
%{NUMBER:ts} [......] (-|"%{USERNAME:token1}") (-|%{DATA:token2}) (-|"%{WORD:token3}") (-|"%{DATA:token4}")
Run Code Online (Sandbox Code Playgroud)
这不适用于Logstash的Grok,因为grok模式中有双引号.Logstash错误日志:
Error: Expected one of #, {, } at line 9, column 204 (byte 374) after
filter {
grok {
match => { "message" => "%{NUMBER:ts} [......] ("
Run Code Online (Sandbox Code Playgroud)
所以我使用QuotedString grok模式代替:
%{NUMBER:ts} [......] (-|%{QS:token1}) (-|%{DATA:token2}) (-|%{QS:token3}) (-|%{QS:token4})
Run Code Online (Sandbox Code Playgroud)
这也适用于Grok调试器,但引号是用带引号的字符串提取的.它也不适用于Logstash:
token1 : ""SEF-EDP8"" token2 : null token3 : ""C"" token4 :
""/GPM/1023/5745-7/456V/""
Run Code Online (Sandbox Code Playgroud)
如何使其与Logstash一起使用?如何删除这些不需要的额外双引号?
小智 8
如果你逃避"反斜杠,那么它工作正常.
%{NUMBER:ts} [......]( - |"%{USERNAME:token1}")( - |%{DATA:token2})( - |"%{WORD:token3}")( - | "%{DATA:token4}")
你的新字符串看起来像
%{NUMBER:ts} [......]( - | \"%{USERNAME:token1} \")( - |%{DATA:token2})( - | \"%{WORD:token3}" )( - | \"%{DATA:token4} \")
将外部双引号更改为单引号对我有用:
grok {
match => { "message" => 'SOME "TEXT QUOTED"' }
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
提取带引号的字段后尝试 gsub
filter {
mutate {
gsub => [
"fieldname", "\"", ""
]
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14369 次 |
| 最近记录: |