vlambda博客
学习文章列表

【kibana 7.5 中的地图更好用】

7.5版本中的地图变得更好用

以下是一个实际的例子

Kibana Maps  已经在6.7版本中引入。从6.7版本开始,之后的每个版本都对之前的一些问题进行了修复,同时也新增了许多新功能和对现有功能的一些改进。


现在已经可以将颜色添加到不同地点的位置,并且还可以根据选择的document value来自定义地图颜色。对于许多用例,这种方法是简单有效的。后来,我们增加了图标的使用而不是之前的圆圈,并根据选择的具体值进行着色。


随着7.5版本的发布,我们提供了一种新的方式来设置您要放置在图层上的位置的点的样式。由于我们在Kibana的每个版本中都添加了许多这样的新功能,因此,在这篇博客中就点到为止。


具体的意思

一个简单且非常实用的示例就是公共交通位置。使用此数据集,您可以使用Kibana Maps实时(或每 X 秒/分钟)地在地图上绘制公共交通工具的位置。不仅要显示其位置,而且还要根据时间戳或位置的 'how old' 对其进行样式设置。


下图表示的是这种地图的外观。为了简单明了,我们将位置数被过滤掉。留下的暗点是最新的,并且随着时间的流逝逐渐消失。



在 7.5 版之前

无法基于Date数据类型进行样式设置。


唯一的选择是改用数值类型。即使Date数据类型也作为转换为UTC的日期存储在Elasticsearch中(如果指定了 time-zone),并存储为一个整型,表示元数据的毫秒数。Kibana Maps无法使用该信息。


有一个简单的解决措施可以使用。如果您从“现在”开始减去位置的时间戳并将值存储在单独的字段中怎么办?


使用Kibana 的scripted fields可以做到这一点。


  • 在Kibana中,导航到 “Management ”-> “Index Patterns”

  • 选择您的文档存储位置的 “Index pattern”

  • 切换到 “scripted field ”面板

  • 单击 “Add scripted field”

  • 添加 “name”,选择 “Number” 类型,然后输入所需的脚本:

    ZonedDateTime zdt = doc['date_time2'].value;
   double now = Math.abs(System.currentTimeMillis());
   return (now - zdt.toInstant().toEpochMillis());
  • 点击 “Save field” 以添加动态计算的新数值字段

【kibana 7.5 中的地图更好用】


确保时间戳始终可用或检查文档中是否存在该值。

现在,您可以转到Kibana Maps显示图层的详细信息,在其中添加地图上的位置并根据新的脚本字段更改样式,age_of_position如以下示例所示。


【kibana 7.5 中的地图更好用】


不要忘记保存所做的更改,并检查位置样式是否随时间的在变化。


在 7.5 版之后

对于最新的版本,无需创建新的”Scripted field”字段,您需要直接进入“layer Styling”选项并选择“Date”数据类型,它将显示在字段列表中。


请注意,当您访问字段列表时,“Date”字段未在以前的样式中列出。


现在,使用“Date”数据类型将执行与使用两个时间戳之间的数值差完全相同的工作。


我们持续在改进问题和添加新功能,如果您有什么我们应该实施的建议,请在Kibana GitHub[https://github.com/elastic/kibana] 上告诉我们。