是否可以通过logstash中的先前值更改字段

时间:2017-05-17 15:42:48

标签: elasticsearch logstash logstash-grok

我在互联网上搜索一种方法,将一个变量放在logstash中,如果一个术语与一个模式相对应,则使用或修改该值。

这是我的数据源示例:

   2017-04-12 15:49:57,641|OK|file1|98|||
   2017-04-12 15:49:58,929|OK|file2|1387|null|msg_fils|
   2017-04-12 15:49:58,931|OK|file3|2|msg_pere|msg_fils|
   2017-04-12 15:50:17,666|OK|file1|25|||
   2017-04-12 15:50:17,929|OK|file2|1387|null|msg_fils|

我使用这个grok代码解析我的来源。

grok {
    match => {"message" =>  '%{TIMESTAMP_ISO8601:msgdates:date}\|%{WORD:verb}\|%{DATA:component}\|%{NUMBER:temps:int}\|%{DATA:msg_pere}\|%{DATA:msg_fils}\|'}
}

但实际上我想用包含file1

的行的前一个值修改第一个字段

你能告诉我它是否可能吗?

由于

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。我正在与您分享解决问题的方法。 我正在使用名为 logstash-filter-memorize 的插件,它可以通过命令安装:

logstash-plugin install logstash-filter-memorize

所以我的过滤器是这样的:

grok {
    match => {"message" =>  '%{TIMESTAMP_ISO8601:msgdates:date}\|%{WORD:verb}\|%{DATA:component}\|%{NUMBER:temps:int}\|%{DATA:msg_pere}\|%{DATA:msg_fils}\|'}
}
if [component] =~  "file1" {
    mutate {
        add_field => [ "msg_id", "%{msgdates}" ]
    }
    memorize {
        fields => [ "msg_id" ]
        default => { "msg_id" => "NOTFOUND" } 
    }           }   
memorize {
    fields => [ "msg_id9" ]
}

我希望它对其他人有用。