elasticsearch,filter,logstash,grok,Replace,elasticsearch,Filter,Logstash,Grok" /> elasticsearch,filter,logstash,grok,Replace,elasticsearch,Filter,Logstash,Grok" />

Replace 如何替换logstash中的字段

Replace 如何替换logstash中的字段,replace,elasticsearch,filter,logstash,grok,Replace,elasticsearch,Filter,Logstash,Grok,我正在从Logstash插入ElasticSearch。我的问题是,我在ES中使用了一个模板来布局数据类型,有时我从Logstash中获取的值是空值(或破折号),而我在ES中声明它们应该是双精度的 所以有时候,ES会得到一个“-”,而不是像“2342”这样的东西,它会拒绝它并导致错误。现在,如果我可以将“-”替换为“null”,ES就可以了 我该怎么做?我假设它与ruby过滤器一起工作。我需要能够在适当的时候用null替换“-”字段 编辑: 我被要求提供样品配置 例如,假设下面的配置为logst

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

所以有时候,ES会得到一个“-”,而不是像“2342”这样的东西,它会拒绝它并导致错误。现在,如果我可以将“-”替换为“null”,ES就可以了

我该怎么做?我假设它与ruby过滤器一起工作。我需要能够在适当的时候用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" : "-" }

如何确保“-”(带引号)更改为空?

如果您通过在
源端口
字段中指定
忽略格式错误:true
来修改模板,它应该可以工作

"transaction" : {
    "properties" :
    {
        "ts" : {
            "format" : "dateOptionalTime",
            "type" : "date"
        },
        "orig_ip" : {
            "type" : "ip"
        },
        "orig_port" : {
            "type" : "long"
            "ignore_malformed": true     <---- add this line
        }
   }
}
“交易”:{
“财产”:
{
“ts”:{
“格式”:“dateOptionalTime”,
“类型”:“日期”
},
“原始ip”:{
“类型”:“ip”
},
“原始端口”:{
“类型”:“长”

“ignore_malformed”:true如果您通过在
原始端口
long
字段中指定
“ignore_malformed”:true来修改模板,它应该可以工作

"transaction" : {
    "properties" :
    {
        "ts" : {
            "format" : "dateOptionalTime",
            "type" : "date"
        },
        "orig_ip" : {
            "type" : "ip"
        },
        "orig_port" : {
            "type" : "long"
            "ignore_malformed": true     <---- add this line
        }
   }
}
“交易”:{
“财产”:
{
“ts”:{
“格式”:“dateOptionalTime”,
“类型”:“日期”
},
“原始ip”:{
“类型”:“ip”
},
“原始端口”:{
“类型”:“长”

“忽略格式不正确的”:true您可以显示您的日志存储配置、映射类型和示例文档吗?我已经包括了一个示例配置。谢谢。您可以显示您的日志存储配置、映射类型和示例文档的可能副本吗?我已经包括了一个示例配置。谢谢。可能的副本将起作用,但我仍然希望有一个具有fi的替代方案阿尔特,这会改变我的值。我会继续寻找,如果我发现了什么,我会发布它。所以这会起作用,但我仍然希望有一个过滤器,它会改变我的值。我会继续寻找,如果我发现了什么,我会发布它。