首页 文章

如何从logstash修改或添加json字段以在ElasticSearch和Kibana中使用geo_point

提问于
浏览
0

我有一个这种结构的json文件:

{"vhost": "8.8.8.8", "host": "8.8.8.8", "port": 80, "ip": "189.191.116.19", "host.latitude":"40.408599853515625","host.longitude":"-3.692199945449829"}

我有一个logstash配置文件,如下所示:

input {
  stdin {
    type => "json"
  }
}
filter{
    json{
        source => "message"
    }
}

output {
        stdout{}
}

我想转换json记录,以便我可以在ES和Kibana中使用geo_point类型 . 根据https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-geo-point-type.html中的官方文档,纬度和经度字段必须采用以下格式:

"pin" : {
        "location" : {
            "lat" : 41.12,
            "lon" : -71.34
        }
    }

我的问题是,如何从logstash转换为json输入,以便我可以使用geo_point? . 我想我不能修改json结构本身,但也许我可以添加一个新的字段,其中包含geo_point类型所需的位置结构 .

谢谢

1 回答

  • 1

    实现此目的的最简单方法是将两个字段 host.latitudehost.longitude 连接到另一个可以映射为geopoint as string的字段 .

    您只需要在 json 过滤器后添加一个 mutate 过滤器,如下所示:

    filter{
        json{
            source => "message"
        }
        mutate {
           add_field => { "location" => "%{host.latitude},%{host.longitude}" }
        }
    }
    

    因此,将创建 location 字段,您可以在映射中将其映射为 geo_point 类型 .

相关问题