【问题标题】:logstash extract and move nested fields into new parent fieldlogstash 提取嵌套字段并将其移动到新的父字段中
【发布时间】:2018-10-19 11:39:55
【问题描述】:

如果在我的日志中打印给定点的纬度和经度,我如何捕获此信息以便在弹性搜索中将其作为地理空间数据处理?

下面我展示了一个 Elasticsearch 中对应于日志行的文档示例:

{
  "_index": "memo-logstash-2018.05",
  "_type": "doc",
  "_id": "DDCARGMBfvaBflicTW4-",
  "_version": 1,
  "_score": null,
  "_source": {
    "type": "elktest",
    "message": "LON: 12.5, LAT: 42",
    "@timestamp": "2018-05-09T10:44:09.046Z",
    "host": "f6f9fd66cd6c",
    "path": "/usr/share/logstash/logs/docker-elk-master.log",
    "@version": "1"
  },
  "fields": {
    "@timestamp": [
      "2018-05-09T10:44:09.046Z"
    ]
  },
  "highlight": {
    "type": [
      "@kibana-highlighted-field@elktest@/kibana-highlighted-field@"
    ]
  },
  "sort": [
    1525862649046
  ]
}

【问题讨论】:

  • 您的意思是将LONLAT 捕获为其单独的称为地理空间数据的字段吗?
  • 是的,我想将 lat 和 lon 处理为地理空间字段

标签: elasticsearch logstash logstash-grok


【解决方案1】:

你可以先将LONLAT分开成各自的字段如下,

grok {
  match => {"message" => "LON: %{NUMBER:LON}, LAT: %{NUMBER:LAT}"}
}

一旦它们被分离,你可以使用 mutate 过滤器在它们周围创建一个父字段,像这样,

filter {
  mutate {
    rename => { "LON" => "[location][LON]" }
    rename => { "LAT" => "[location][LAT]" }
  }
}

如果这有帮助,请告诉我。

【讨论】:

  • @AlessioFrabotta,更新了答案:) 您可以将 LON 和 LAT 创建为单独的字段并添加父字段 location。请阅读更新的答案
  • 谢谢!最后一个问题:在logstash日志中,我看到位置字段是这样的:“location”=> {“LAT”=>“42”,“LON”=>“13.5”} 42 和 13.5 是字符串,请注意我希望数字,否则 Kibana 中的可视化不起作用。这是正确的 ?或者,我应该以这种方式构造“位置”字段:“位置”:“42, 13.5”
  • 它们不是STRING,因为我使用了NUMBER
  • 如果它的字符串,你也可以强制类型像这样浮动:) %{NUMBER:LON:float}
  • 谢谢!但是通过设置坐标地图视图,我在 Kibana 上看不到任何东西:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
相关资源
最近更新 更多