elasticsearch - 是否可以通过Logstash中的先前值更改字段

标签 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的行的先前值修改第一个字段

你能告诉我是否可行吗?

谢谢

最佳答案

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

logstash-plugin安装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" ]
}

我希望它对其他人有用。

关于elasticsearch - 是否可以通过Logstash中的先前值更改字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44029393/

相关文章:

elasticsearch - 使用嵌套的Should运算符构造ElasticSearch查询

elasticsearch - 无服务器功能 cloudwatch 日志到 elasticsearch

elasticsearch - 聚合术语使用计数

html - 从Logstash输入中删除HTML标记

logstash - 将日期格式从YYYY/MM/DD HH :MM:SS format in Logstash for nginx error logs转换为YYYY-MM-DD

elasticsearch es_rejected_execution_exception

regex - Logstash Grok过滤器Apache模式

ssl - 无法将 Filebeat 连接到 Logstash

elasticsearch - 由于指定了模块或命令行选项,因此忽略 'pipelines.yml' 文件

nginx - nginx 错误日志的 Logstash 模式