我有一个具有以下结构的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类型所需的位置estructure的新字段。
谢谢
最佳答案
实现此目的的最简单方法是将两个字段host.latitude
和host.longitude
连接到另一个可以映射为geopoint as string的字段中。
您只需要在mutate
过滤器之后再添加一个json
过滤器,如下所示:
filter{
json{
source => "message"
}
mutate {
add_field => { "location" => "%{host.latitude},%{host.longitude}" }
}
}
结果,将创建
location
字段,您可以在映射中将其映射为geo_point
类型。
关于elasticsearch - 如何从Logstash修改或添加JSON字段以在ElasticSearch和Kibana中与geo_point一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32555966/