飞道的博客

Elastic:Elastic Maps 基于位置的警报 - 7.10

462人阅读  评论(0)

Kibana 7.10 包含一个新的位置驱动警报,称为 “跟踪阈值”。 当实体进入边界时,此警报使你可以跟踪实体的位置并触发警报操作(例如将规定格式的文档添加到索引或发送 Slack 通知)。

如上图所示,当 Elasticsearch 最新收到的文档的位置信息进入到一个边界时,就会发送一个警报。在上面是以一个蓝色的点表示的。在个在实际的生活中非常有用。比如我们想知道某个人或物非法进入一个区域,或者进入到一个危险的区域,就马上发送一个警报。另外一个应用例子就是,当我们的快递人员到达规定的区域后,我们可以自动给收件人发送一个通知说你的快件马上就要到了,请准备收件。

因为这是一个最新的功能,你需要安装 Elastic Stack 7.10 才能真正体会这个功能。在今天的演示中,我们将展示当一个实体进入到一个边界时,我们是如何通过 Kibana 发送通知的。

 

安装

针对今天的展示,我们需要安装 Elasticsearch 以及 Kibana。如果你还没有安装好它们,请参阅我之前的文章 “Elastic:菜鸟上手指南”。在安装 Kibana 时,我们需要针对 Kibana 中的配置文件 config/kibana.yml 添加如下的一句话:

xpack.trigger_actions_ui.enableGeoTrackingThresholdAlert: true

有了这个配置,我们就可以开始对跟踪阈值发送警报。等我们设置好这一切,启动 Elasticsearch 及 Kibana。

 

基于位置的警报

在展示之前,我们先来下载一个项目:

git clone https://github.com/thomasneirynck/faketracks

上面的项目是一个 nodejs 的项目。它里面包含如下的文件:


  
  1. README .md manhattan_boundaries .json package .json
  2. boundaries .json manhattan_tracks .json test .json
  3. flights .json node_modules tracks .json
  4. generate_tracks .js package-lock .json

生成边界

在上面的 manhattan_boundaries.json 文件中,它包含的是一个美国曼哈顿的一个边界文件。我们可以直接通过如下的方式导入到 Kibana 中,并形成一个层:

我们选择在电脑里的 manhattan_boundaries.json 文件。

然后,我们进行如下的操作:

这样就形成了一个叫做 manhattan_boundaries 的图层。由于数据有限,我们可能很难找到这个边界。点击上面的 Close 按钮:

点击上面的 Fit to data,那么我们就可以直接找到边界所在的位置:

在上面,我们可以看出来一些绿色形状的边界。在接下来的练习中,我们将看到实体是如何穿过这个绿色边界的,并生成警报。

 

模拟运动实体

在这个部分,我将使用上面下载的项目来模拟一个运动的实体。我们首先使用如下命令来进行安装:

npm install

等安装完后,我们使用如下命令来进行运行:

node ./generate_tracks.js -h http://localhost:9200

由于 generate_tracks.js 里的默认 host 地址是 https 的而不是 https,所以我们需要使用如上的命令来运行。在实际的使用中,我们将根据自己的 host 地址进行修改。上面的应用静生成一个叫做 tracks 的索引。我们按照如下的方式来导入这个索引到 Elastic Maps 中去:

选择上面的 tracks:

我们可能在地图上还看不出什么来,我们需要做如下的配置。把时间选择为最近15秒:

这个时候,我们可以看到三条移动的像小蚯蚓的东西。每隔三秒就更新一次。这三条小蚯蚓在穿插上面的边界。到目前为止,因为我们并没有设置警报,所以在图上你看不出来有任何的变化。这三条小蚯蚓的长度和我们在 time picker 中的时间有关系,如果你把时间设置长一些,比如最近30秒,那么你可以看到更长尾巴的蚯蚓了,这是因为有更多的数据被展示。

 

配置警报

这个步骤也是最为繁琐的一步。首先,我们来定义如下的一个索引 mapping:


  
  1. PUT alerts
  2. {
  3. "mappings": {
  4. "properties": {
  5. "CrossingEntityId": {
  6. "type": "keyword"
  7. },
  8. "CrossingTimeOfDetection": {
  9. "type": "date"
  10. },
  11. "CrossingLine": {
  12. "type": "geo_shape"
  13. },
  14. "AfterCrossingPointId": {
  15. "type": "keyword"
  16. },
  17. "AfterCrossingPointLocation": {
  18. "type": "geo_point"
  19. },
  20. "AfterCrossingTime": {
  21. "type": "date"
  22. },
  23. "BeforeCrossingPointId": {
  24. "type": "keyword"
  25. },
  26. "BeforeCrossingPointLocation": {
  27. "type": "geo_point"
  28. },
  29. "BeforeCrossingTime": {
  30. "type": "date"
  31. },
  32. "CurrentBoundaryId": {
  33. "type": "keyword"
  34. },
  35. "CurrentBoundaryName": {
  36. "type": "keyword"
  37. },
  38. "PreviousBoundaryId": {
  39. "type": "keyword"
  40. },
  41. "PreviousBoundaryName": {
  42. "type": "keyword"
  43. }
  44. }
  45. }
  46. }

这个 mapping 定义了当实体进入到边界的时候将要写入到 alerts 这个索引文档的数据格式。其中最为关注就是那个 geo_point 的地理位置数据。

我们接下来创建一个 alert:

点击 Save 按钮。这样我们就创建我们的 log 连接器。

接下来,我们创建一个警报:

当实体进入边界时,我们通过 log 连接器可以写入如下格式的数据到 alerts 索引中:


  
  1. {
  2. "CrossingEntityId": "{{context.entityId}}",
  3. "CrossingTimeOfDetection": "{{context.timeOfDetection}}",
  4. "CrossingLine": "{{context.crossingLine}}",
  5. "BeforeCrossingPointId": "{{context.fromEntityDocumentId}}",
  6. "BeforeCrossingPointLocation": "{{context.fromEntityLocation}}",
  7. "BeforeCrossingTime": "{{context.fromEntityDateTime}}",
  8. "AfterCrossingPointId": "{{context.toEntityDocumentId}}",
  9. "AfterCrossingPointLocation": "{{context.toEntityLocation}}",
  10. "AfterCrossingTime": "{{context.toEntityDateTime}}",
  11. "CurrentBoundaryId": "{{context.toBoundaryId}}",
  12. "CurrentBoundaryName": "{{context.toBoundaryName}}",
  13. "PreviousBoundaryId": "{{context.fromBoundaryId}}",
  14. "PreviousBoundaryName": "{{context.fromBoundaryName}}"
  15. }

点击上面的 Save 按钮。这样我们的警报就已经被成功创建了。

我们接下来需要为 alerts 索引创建一个索引模式。这里就一笔带过。如果你不知道如何创建一个索引模式,请阅读我之前的文章。

 

检查边界警报

在上面我们已经成功地创建了一个基于位置的警报。当实体穿越边界时就会生成一个索引,并保存于一个叫做 alerts 的索引中。我们在上面的地图界面中再添加这个索引的显示:

点击 Add layer:

我们记得设置一个我们喜欢的颜色。好的,到目前位置,我们所有的设置都已经配置好了。点击上面的 Close 按钮。当我们的小蚯蚓穿越边界时,我们可以看到一个红色的点出现了:

这是因为穿越时,在 alerts 里生成了新的文档,并且是在15秒之内的。这也清楚地表明了警报是起作用的。

当然在实际的很多应用中,我们更喜欢使用邮件或者 Slack 这样的实时工具来接到警报。如果你们对这个感兴趣,请在我之前的文章 “Elastic:菜鸟上手指南” 寻找 “通知及警报” 章节。里面有相应的例子供你参考。


转载:https://blog.csdn.net/UbuntuTouch/article/details/112535618
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场