首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >logstash add_field和remove_field

logstash add_field和remove_field
EN

Stack Overflow用户
提问于 2016-02-17 00:42:39
回答 2查看 11.9K关注 0票数 1

我正在尝试简化我的logstash配置。我想将程序字段分割成单独的字段(如下所示),但是我更喜欢使用一条grok语句(如果可能的话!)

在下面的两个示例中,我得到了第二个示例的_grokparsefailure,但不是第一个。由于grok具有add_field和remove_field选项,因此我假设我可以将所有这些都组合到一条grok语句中。为何不是这样呢?我是不是错过了某些排序/语法?

示例日志:

代码语言:javascript
复制
2016-02-16T16:42:06Z ubuntu docker/THISTESTNAME[892]: 172.16.229.1 - - [16/Feb/2016:16:42:06 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36" "-"

为什么这是可行的:

代码语言:javascript
复制
filter {

       # Extracts the docker name, ID, image etc elements
       mutate {
               add_field => { "[@metadata][program]" => "%{program}" }
               remove_field => "[program]"
       }

       grok {
                patterns_dir => "/logstash/patterns_dir/docker"
                match => { "[@metadata][program]" => "%{D_ID}" }
       }

}

但这不是:

代码语言:javascript
复制
filter {

        grok {
               add_field => { "[@metadata][program]" => "%{program}" }
               remove_field => "[program]"
               patterns_dir => "/logstash/patterns_dir/docker"
               match => { "[@metadata][program]" => "%{D_ID}" }
        }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-17 00:49:16

add_field和remove_field仅在底层筛选器正常工作时运行。在您的第二个示例中,@metadata还不存在,您可以对其运行grok{}。

票数 1
EN

Stack Overflow用户

发布于 2016-02-17 02:41:11

@Alan直接回答了这个问题,但是我发现这种方式更具可读性,并且更加压缩了我的代码:

代码语言:javascript
复制
grok {
    patterns_dir => "/logstash/patterns_dir/docker-patterns"
    match => { "program" => "%{D_ID}" }
    overwrite => [ "program" ]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35438156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档