热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

有一个grok过滤器创建嵌套字段作为结果

如何解决《有一个grok过滤器创建嵌套字段作为结果》经验,为你挑选了2个好方法。

我有一个drupal watchdog 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}\|(?\d+)\|\|)

然后跑 match => ['message', '%{DRUPALSYSLOG:drupal}'}

但我没有得到嵌套的响应,我得到一个文本块drupal: "ALL THE MATCHING FIELDS IN ONE STRING",然后单独的所有匹配,但不是在drupal下嵌套,而是在同一级别.



1> 小智..:

实际上,您可以在模式配置中执行类似的操作

%{WORD:[drupal][program]}

它将创建json对象

drupal:{
  program: "..."
}



2> Magnus Bäck..:

是的,这是预料之中的.我认为没有办法用grok生成嵌套字段.我怀疑你必须使用mutate过滤器将它们移动到位.

mutate {
    rename => {
      "date" => "[drupal][date]"
      "instigator" => "[drupal][instigator]"
      ...
    }
  }

如果你有很多字段,使用红宝石过滤器可能会更方便.如果您使用例如"drupal"为Drupal字段添加前缀,则尤其如此. - 然后你编写一个过滤器来将带有该前缀的所有字段移动到具有相同名称的子字段中.


推荐阅读
author-avatar
twinklezai750
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有