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 的项目。它里面包含如下的文件:
-
README
.md
manhattan_boundaries
.json
package
.json
-
boundaries
.json
manhattan_tracks
.json
test
.json
-
flights
.json
node_modules
tracks
.json
-
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:
-
PUT
alerts
-
{
-
"mappings": {
-
"properties": {
-
"CrossingEntityId": {
-
"type":
"keyword"
-
},
-
"CrossingTimeOfDetection": {
-
"type":
"date"
-
},
-
"CrossingLine": {
-
"type":
"geo_shape"
-
},
-
"AfterCrossingPointId": {
-
"type":
"keyword"
-
},
-
"AfterCrossingPointLocation": {
-
"type":
"geo_point"
-
},
-
"AfterCrossingTime": {
-
"type":
"date"
-
},
-
"BeforeCrossingPointId": {
-
"type":
"keyword"
-
},
-
"BeforeCrossingPointLocation": {
-
"type":
"geo_point"
-
},
-
"BeforeCrossingTime": {
-
"type":
"date"
-
},
-
"CurrentBoundaryId": {
-
"type":
"keyword"
-
},
-
"CurrentBoundaryName": {
-
"type":
"keyword"
-
},
-
"PreviousBoundaryId": {
-
"type":
"keyword"
-
},
-
"PreviousBoundaryName": {
-
"type":
"keyword"
-
}
-
}
-
}
-
}
这个 mapping 定义了当实体进入到边界的时候将要写入到 alerts 这个索引文档的数据格式。其中最为关注就是那个 geo_point 的地理位置数据。
我们接下来创建一个 alert:
点击 Save 按钮。这样我们就创建我们的 log 连接器。
接下来,我们创建一个警报:
当实体进入边界时,我们通过 log 连接器可以写入如下格式的数据到 alerts 索引中:
-
{
-
"CrossingEntityId":
"{{context.entityId}}",
-
"CrossingTimeOfDetection":
"{{context.timeOfDetection}}",
-
"CrossingLine":
"{{context.crossingLine}}",
-
"BeforeCrossingPointId":
"{{context.fromEntityDocumentId}}",
-
"BeforeCrossingPointLocation":
"{{context.fromEntityLocation}}",
-
"BeforeCrossingTime":
"{{context.fromEntityDateTime}}",
-
"AfterCrossingPointId":
"{{context.toEntityDocumentId}}",
-
"AfterCrossingPointLocation":
"{{context.toEntityLocation}}",
-
"AfterCrossingTime":
"{{context.toEntityDateTime}}",
-
"CurrentBoundaryId":
"{{context.toBoundaryId}}",
-
"CurrentBoundaryName":
"{{context.toBoundaryName}}",
-
"PreviousBoundaryId":
"{{context.fromBoundaryId}}",
-
"PreviousBoundaryName":
"{{context.fromBoundaryName}}"
-
}
点击上面的 Save 按钮。这样我们的警报就已经被成功创建了。
我们接下来需要为 alerts 索引创建一个索引模式。这里就一笔带过。如果你不知道如何创建一个索引模式,请阅读我之前的文章。
检查边界警报
在上面我们已经成功地创建了一个基于位置的警报。当实体穿越边界时就会生成一个索引,并保存于一个叫做 alerts 的索引中。我们在上面的地图界面中再添加这个索引的显示:
点击 Add layer:
我们记得设置一个我们喜欢的颜色。好的,到目前位置,我们所有的设置都已经配置好了。点击上面的 Close 按钮。当我们的小蚯蚓穿越边界时,我们可以看到一个红色的点出现了:
这是因为穿越时,在 alerts 里生成了新的文档,并且是在15秒之内的。这也清楚地表明了警报是起作用的。
当然在实际的很多应用中,我们更喜欢使用邮件或者 Slack 这样的实时工具来接到警报。如果你们对这个感兴趣,请在我之前的文章 “Elastic:菜鸟上手指南” 寻找 “通知及警报” 章节。里面有相应的例子供你参考。
转载:https://blog.csdn.net/UbuntuTouch/article/details/112535618