replace - 如何替换Logstash中的字段

标签 replace elasticsearch filter logstash grok

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

因此有时候,ES得到的是'-'而不是诸如“2342”之类的东西,并且拒绝它并导致错误。现在,如果我可以将“-”替换为“null”,那么ES可以正常工作。

我该怎么做呢?我认为它可以与 ruby 过滤器一起使用。我需要能够在适当的时候用空值替换'-'字段。

编辑:

我被要求提供示例配置。

因此,例如,说下面的配置是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?

最佳答案

如果您通过在"ignore_malformed": true orig_port字段中指定long来修改模板,则模板应该可以使用。

"transaction" : {
    "properties" :
    {
        "ts" : {
            "format" : "dateOptionalTime",
            "type" : "date"
        },
        "orig_ip" : {
            "type" : "ip"
        },
        "orig_port" : {
            "type" : "long"
            "ignore_malformed": true     <---- add this line
        }
   }
}

关于replace - 如何替换Logstash中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31869232/

相关文章:

java - 随机字母字符替换

elasticsearch - elasticsearch不返回预期 yield

javascript - 在 Ramda 中有条件地根据另一个数组/字符串过滤一个数组

java - 根据流中的匹配条件返回元素

javascript - Angular 选择过滤器 显示全部

python - 通过 Python 替换文件中的更新版本字符串

JavaScript 正则表达式替换 - 但只是匹配字符串的一部分?

javascript - 根据字符串中的前两个数字对字符串中的行进行重新排序

Elasticsearch 删除多个快照

ruby-on-rails - 轮胎 gem 的搜索方法的参数是什么?