Observability:使用 Elastic Stack 分析地理空间数据 (二)

2024-02-04 01:40

本文主要是介绍Observability:使用 Elastic Stack 分析地理空间数据 (二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在之前的文章 “Observability:使用 Elastic Stack 分析地理空间数据 (一)”,我详述了如何从 OpenSky Network API 接口把数据导入到 Elasticsearch,并对这些数据进行可视化分析。也许针对很对的情况这个已经很满足了,因为它确实可以帮我们从很多实时数据中提取很多有用的东西。

在今天的文章中,我们将参考之前的文章 “如何使用 Elasticsearch ingest 节点来丰富日志和指标” 。我们可以利用 Elasticsearch ingest 节点来更加丰富我们的数据,并对这些数据做更进一步的的分析。

为了达到这个目的,我们必须首先了解在之前索引中的 icao 字段。这个字段的意思是:

ICAO 机场代码或位置指示器是由四个字母组成的代码,用于指定世界各地的机场。 这些代码由国际民用航空组织定义并发布在国际民航组织7910号文件:位置指示器中,供空中交通管制和航空公司运营(例如飞行计划)使用。

我们之前的每个文档是这样的:

{"velocity" : 0.0,"icao" : "ad0851","true_track" : 264.38,"time_position" : 1591190152,"callsign" : "AAL2535","origin_country" : "United States","position_source" : "ADS-B","spi" : false,"request_time" : 1591190160,"last_contact" : 1591190152,"@timestamp" : "2020-06-03T13:16:03.723Z","on_ground" : true,"location" : "32.7334,-117.2035"
}

另外,我们可以在地址 https://opensky-network.org/datasets/metadata/ 找到一个如下文件:

在这里,我们可以找到一个叫做 aircraftDatabase.csv 的文件。它里面的内容如下:

在上面的表格中,我们发现有一个叫做 icao24 的字段。这个字段和我们之前的文档可以进行关联,从而我们可以得到更多关于某个航班的更多信息。

创建 enrich index

由于下载的文档时一个是一个 csv 的文件。我们可以使用 data visualizer 来导入。

点击上面的 Override settings 链接:

点击 Apply 按钮:

点击上面的 Import 按钮:

我们把这个索引的名字称作为 aircraft。点击 Advaned:

再次确认 mapping,如果没有问题的话,点击 Import 按钮:

由于这个文件比较大,所以需要一点时间来进行导入:

等完成后,我们可以在 Elasticsearch 中找到一个叫做 aircraft 的索引:

GET _cat/indices

上面显示有一个新的 aircraft 的索引生成了。

创建 Enrich policy

接下来,我们来创建 enrich policy。它告诉我们如何丰富数据。在 Kibana 中打入如下的命令:

PUT /_enrich/policy/flights_policy
{"match": {"enrich_fields": ["acars","adsb","built","category_description","engines","first_flight_date","icao_aircraft_type","line_number","manufacturer_icao","manufacturer_name","model","modes","notes","operator","operator_callsign","operator_iata","operator_icao","owner","reg_until","registered","registration","seat_configuration","serial_number","status","test_reg","type_code"],"indices": ["aircraft"],"match_field": "icao"}
}

我们使用 execute enrich policy API 为该策略创建enrich索引:

POST /_enrich/policy/flights_policy/_execute

接着,我们创建一个叫做 flights_aircraft_enrichment 的 pipeline:

PUT /_ingest/pipeline/flights_aircraft_enrichment
{"description": "joins incoming ADSB state info with richer aircraft metadata","processors": [{"enrich": {"field": "icao","policy_name": "flights_policy","target_field": "aircraft"}}]
}

到此为止,我们已经成功地创建了 丰富策略。接下来,我们将展示如何使用这个 pipeline 来丰富我们的数据。

 

丰富数据

为了能够使用我们上面定义好的 pipeline,我们重参考之前的文章 “Observability:使用 Elastic Stack 分析地理空间数据 (一)”里的 fligths_logstash.conf 文件,并修改如下的 output 部分:

output {stdout { codec => rubydebug}elasticsearch {manage_template => "false"index => "flights"# pipeline => "flights_aircraft_enrichment"hosts => "localhost:9200"}
}

我们把上面的这一行的注释拿掉:

# pipeline => "flights_aircraft_enrichment"

这样变成了:

output {stdout { codec => rubydebug}elasticsearch {manage_template => "false"index => "flights"pipeline => "flights_aircraft_enrichment"hosts => "localhost:9200"}
}

在启动 Logstash 之前,我们可以先删除之前的 flights 索引:

DELETE flights

再接着执行如下的命令:

PUT flights
{"mappings": {"properties": {"@timestamp": {"type": "date"},"baro_altitude": {"type": "float"},"callsign": {"type": "keyword"},"geo_altitude": {"type": "float"},"icao": {"type": "keyword"},"last_contact": {"type": "long"},"location": {"type": "geo_point"},"on_ground": {"type": "boolean"},"origin_country": {"type": "keyword"},"position_source": {"type": "keyword"},"request_time": {"type": "long"},"spi": {"type": "boolean"},"squawk": {"type": "long"},"time_position": {"type": "long"},"true_track": {"type": "float"},"velocity": {"type": "float"},"vertical_rate": {"type": "float"}}}
}

重新运行 Logstash:

​
sudo ./bin/logstash -f fligths_logstash.conf

我们在 Kibana 中检查 flights 的 mapping:

GET flights/_mapping

我们可以看到一些新增加的各个新字段:

我们可以通过 search:

        "_source" : {"aircraft" : {"owner" : "Wells Fargo Trust Co Na Trustee","reg_until" : "2021-04-30","modes" : false,"built" : "1984-01-01","acars" : false,"manufacturer_icao" : "BOEING","serial_number" : "23018","manufacturer_name" : "Boeing","icao_aircraft_type" : "L2J","operator_callsign" : "GIANT","operator_icao" : "GTI","engines" : "GE CF6-80 SERIES","icao" : "a8a763","registration" : "N657GT","model" : "767-281","type_code" : "B762","adsb" : false},"true_track" : 272.81,"velocity" : 5.14,"spi" : false,"origin_country" : "United States","@timestamp" : "2020-06-04T10:41:00.558Z","request_time" : 1591267250,"time_position" : 1591267168,"last_contact" : 1591267168,"callsign" : "GTI165","icao" : "a8a763","location" : "39.0446,-84.6505","on_ground" : true,"position_source" : "ADS-B"}}

我们可看到一个叫做 aircraft 的字段,它含有这个飞机所有被丰富的信息。

运用 Kibana 分析数据

找出前10的飞机型号

因为有新的字段进来,所以我们必须重新创建新的 inde pattern:

我们可以看到最多的是 PC-12/47E 这个机型。

 

找出飞机制造商的分布

我们看到 BOING 公司的市场份额是最大的。AIRBUS 处于第二的位置。

 

飞机机龄分布

我们可以看出来最多的飞机是2019年生产的。

 

飞机机型和飞行高度的关系

可以看出来 A320-214 飞机飞的是最高的。

Graph

运用 Graph 来找出数据直接的关系。如果你对 Graph 还不是很了解的话,请参阅我之前的教程 “Elastic Graph 介绍”。

点击 Create graph:

点击 Select a data source:

选择 flights* :

点击 Add fields:

添加 fields:

我们需要保持这个 graph。然后进行搜索:

从上面,我们可看出来 BOING 和我们想要的各个字段之间的关系。

我们从收集的数据可以有更多的其它的分析。在这里,我就不一一枚举了。你们可以做任何你想要的分析。

这篇关于Observability:使用 Elastic Stack 分析地理空间数据 (二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/676034

相关文章

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是