结果有一个 grok 过滤器创建嵌套字段
have a grok filter create nested fields as a result
我有一个 drupal 看门狗 syslog 文件,我想将其解析为两个嵌套字段,syslog 部分和消息部分,以便获得此结果
syslogpart: {
timestamp: "",
host: "",
...
},
messagepart:{
parsedfield1: "",
parsedfield2: "",
...
}
我尝试制作一个如下所示的自定义图案:
DRUPALSYSLOG (%{SYSLOGTIMESTAMP:date} %{SYSLOGHOST:logsource} %{WORD:program}: %{URL:domain}\|%{EPOCH:epoch}\|%{WORD:instigator}\|%{IP:ip}\|%{URL:referrer}\|%{URL:request}\|(?<user_id>\d+)\|\|)
然后是运行match => ['message', '%{DRUPALSYSLOG:drupal}'}
但我没有得到嵌套的响应,我得到一个文本块 drupal: "ALL THE MATCHING FIELDS IN ONE STRING"
然后所有的匹配项也分开但不是嵌套在 drupal 下而是在同一级别。
是的,这是预期的。我认为没有办法用 grok 生成嵌套字段。我怀疑您必须使用 mutate filter 将它们移动到位。
mutate {
rename => {
"date" => "[drupal][date]"
"instigator" => "[drupal][instigator]"
...
}
}
如果您有很多字段,使用 ruby filter 可能更方便。如果您在 Drupal 字段前加上例如前缀,则尤其如此。 "drupal." – 然后您将编写一个过滤器,将所有具有该前缀的字段移动到具有相同名称的子字段中。
实际上,您可以在模式配置中做类似的事情
%{WORD:[drupal][program]}
它会像
一样创建json对象
drupal:{
program: "..."
}
我有一个 drupal 看门狗 syslog 文件,我想将其解析为两个嵌套字段,syslog 部分和消息部分,以便获得此结果
syslogpart: {
timestamp: "",
host: "",
...
},
messagepart:{
parsedfield1: "",
parsedfield2: "",
...
}
我尝试制作一个如下所示的自定义图案:
DRUPALSYSLOG (%{SYSLOGTIMESTAMP:date} %{SYSLOGHOST:logsource} %{WORD:program}: %{URL:domain}\|%{EPOCH:epoch}\|%{WORD:instigator}\|%{IP:ip}\|%{URL:referrer}\|%{URL:request}\|(?<user_id>\d+)\|\|)
然后是运行match => ['message', '%{DRUPALSYSLOG:drupal}'}
但我没有得到嵌套的响应,我得到一个文本块 drupal: "ALL THE MATCHING FIELDS IN ONE STRING"
然后所有的匹配项也分开但不是嵌套在 drupal 下而是在同一级别。
是的,这是预期的。我认为没有办法用 grok 生成嵌套字段。我怀疑您必须使用 mutate filter 将它们移动到位。
mutate {
rename => {
"date" => "[drupal][date]"
"instigator" => "[drupal][instigator]"
...
}
}
如果您有很多字段,使用 ruby filter 可能更方便。如果您在 Drupal 字段前加上例如前缀,则尤其如此。 "drupal." – 然后您将编写一个过滤器,将所有具有该前缀的字段移动到具有相同名称的子字段中。
实际上,您可以在模式配置中做类似的事情
%{WORD:[drupal][program]}
它会像
一样创建json对象drupal:{
program: "..."
}