如何替换logstash中的字段

时间:2015-08-07 03:28:23

标签: replace elasticsearch filter logstash grok

我正在从Logstash插入ElasticSearch。我的问题是我在ES中使用了一个模板来布局数据类型,当我在ES中声明它们应该是双倍时,我有时会从Logstash中获取值为空值(或破折号)的值。

所以有时候,ES会得到一个' - '而不是像“2342”这样的东西,它拒绝它并导致错误。现在,如果我可以用'null'替换' - ',那么ES工作正常。

我该怎么做?我认为它适用于红宝石过滤器。我需要能够在适当的时候将' - '字段替换为null。

修改

我被要求提供样本配置。

因此,例如,假设下面的配置是logstash,然后将数据发送到ES:

filter {
    if [type] == "transaction" {
        match => ["message", "%{BASE16FLOAT:ts}\t%{IP:orig_ip}\t%{NOTSPACE:orig_port}" ]
    }
}

现在我的ES模板说:

"transaction" : {
    "properties" :
    {
        "ts" : {
            "format" : "dateOptionalTime",
            "type" : "date"
        },
        "orig_ip" : {
            "type" : "ip"
        },
        "orig_port" : {
            "type" : "long"
        },
   }
}

因此,如果我抛出一个像这两个中的任何一个的数据集,它会传递:

{"ts" : "123456789.123234", "orig_ip" : "10.0.0.1", "orig_port" : "2342" }
{"ts" : "123456789.123234", "orig_ip" : "10.0.0.1", "orig_port" : null }

我获得了成功。但是,以下[显然]失败了:

{"ts" : "123456789.123234", "orig_ip" : "10.0.0.1", "orig_port" : "-" }

如何确保“ - ”(带引号)变为 null

1 个答案:

答案 0 :(得分:0)

如果您通过在your_bundle_alias: param1: the_users_value param2: another_value "ignore_malformed": true字段中指定orig_port来修改模板,那么它应该有效。

long