Logstash 让grok筛选器创建嵌套字段作为结果
我有一个drupal看门狗syslog文件,我想将它解析为两个嵌套字段,syslog部分和message部分,以便得到这个结果Logstash 让grok筛选器创建嵌套字段作为结果,logstash,syslog,logstash-grok,Logstash,Syslog,Logstash Grok,我有一个drupal看门狗syslog文件,我想将它解析为两个嵌套字段,syslog部分和message部分,以便得到这个结果 syslogpart: { timestamp: "", host: "", ... }, messagepart:{ parsedfield1: "", parsedfield2: "", ... } 我尝试制作一个自定义图案,如下所示: DRUPALSYSLOG(%%{SYSLOGTIMESTAMP:date}%%{SYSLOGHOST:l
syslogpart: {
timestamp: "",
host: "",
...
},
messagepart:{
parsedfield1: "",
parsedfield2: "",
...
}
我尝试制作一个自定义图案,如下所示:
DRUPALSYSLOG(%%{SYSLOGTIMESTAMP:date}%%{SYSLOGHOST:logsource}%%{WORD:program}:%%{URL:domain}\\\\\\\%%{EPOCH:EPOCH}\\\\\\\\{WORD:indicator}\\\\\\\{IP:IP}\\\\\\{URL:referer}\\\\\\\\\\\\\{URL:request}\\\\\\\(?\d+\\\\\\\\\\\\\\\\\\\\\\\\\\代码>
然后运行match=>['message','%{drupalyslog:drupal}}
但我没有得到嵌套响应,而是得到一个textblockdrupal:“一个字符串中的所有匹配字段”
然后将所有匹配项分开,但不是嵌套在drupal下,而是嵌套在同一级别上。是的,这是意料之中的。我认为没有办法用grok生成嵌套字段。我怀疑您必须使用
mutate {
rename => {
"date" => "[drupal][date]"
"instigator" => "[drupal][instigator]"
...
}
}
如果您有很多字段,那么使用a可能更方便。如果您在Drupal字段前加上前缀,例如“Drupal”,则尤其如此–然后您可以编写一个过滤器,将所有带有该前缀的字段移动到具有相同名称的子字段中。实际上,您可以在模式配置中执行类似操作
%{WORD:[drupal][program]}
它将创建json对象,如
drupal:{
program: "..."
}
模式定义中直接支持方括号语法。无需进行变异/重命名!请参见下面的Julien答案。是的,除非您要创建@元数据的子字段(或者,可能是名称中包含不寻常字符的其他字段),否则该方法确实有效。可以确认,仍然使用logstash-7.11.0
。示例:应用程序(?:\[%{WORD:[应用程序][上下文]}\]?\[%{WORD:[应用程序][消息ID]}\]\[%{WORD:[应用程序][日志类别]}\[%{WORD:[应用程序][日志优先级]}\]