我正在从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 ?
答案 0 :(得分:0)
如果您通过在your_bundle_alias:
param1: the_users_value
param2: another_value
"ignore_malformed": true
字段中指定orig_port
来修改模板,那么它应该有效。
long