elasticsearch - 如何从Logstash修改或添加JSON字段以在ElasticSearch和Kibana中与geo_point一起使用

标签 elasticsearch logstash kibana

我有一个具有以下结构的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.latitudehost.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/

相关文章:

elasticsearch - Logstash Grok过滤器模式

elasticsearch - kibana:更改线程池队列大小

elasticsearch - 如何在spring data elasticsearch中管理多个用户索引

sorting - Elasticsearch-按日期返回文档计数-按日期顺序

elasticsearch - logstash索引文本文件

elasticsearch - 如何创建时间戳增量的直方图?

curl - Elasticsearch must_not 查询与正则表达式不匹配

c# - 对象内的 id 字段,用于 elasticsearch 的 NEST

java - 枚举作为映射键转换在 Spring Boot 2.4.1 和 Elastic Search 7.10 中不起作用

elasticsearch - 如何不使用文件节拍将日志获取到logstash服务器