追逐天空:使用 InfluxDB 监控航班

导航至

我们身处一个每一步都被监控的时代,粉丝们追踪泰勒·斯威夫特的每一次喷气式飞机旅行。虽然有些人可能梦想在 30,000 英尺的高空偶遇名人,但航空爱好者和技术专业人士看到了更广阔的飞行交通和监控前景。

InfluxDB 是一款强大的时序数据库,正在改变我们实时监控航班的方式。无论是密切关注流行歌星的私人飞机,还是确保商业航班按计划运行,InfluxDB 都能为航空数据提供前所未有的洞察力。

在这篇博文中,我们将学习如何利用 FlightAwareInfluxDB Cloud 3.0 来监控私人/通用航空航班和机场延误。然后,我们将使用 Grafana 构建航班监控仪表板。在此处查找相应的 repo

要求

要运行此示例,您需要以下内容

您还需要从您的 InfluxDB 和 FlightAware 帐户收集身份验证凭据。请按照这些文档了解更多关于如何获取这些凭据的信息

请注意,InfluxDB Cloud 3.0 提供免费层级,但您需要付费购买 Standard FlightAware 层级才能访问该 API。但是,您也可以利用 repo 中的测试 JSON 文件和测试 python 脚本来试用此示例,然后再为从 FlightAware 获取实时数据付费。

使用 InfluxDB v3 Python 客户端库获取航班数据

此示例的核心是一个 Python 脚本 flightAware.py。此 Python 脚本使用 FlightAware AeroAPI 和 InfluxDB(一个时序数据库)持续监控和收集特定地理边界内航班的数据。该脚本每 5 分钟获取一次实时航班数据。以下是其关键组件的分解

  1. 环境和库:首先,我们导入所有库和模块,例如 os、requests、pandas 和 influxdb_client_3。我们还导入 datetime、timezone 和自定义 secret 模块,以安全地处理 API 密钥等敏感信息。
  2. 配置变量:接下来,我们设置数据库 (db)、组织 (org) 和 API (url) 配置的变量。我们还使用环境变量和一个自定义的 secret.py 文件检索身份验证令牌 (token) 和 API 密钥 (apikey)。此示例假设您创建了一个 secret.py 并将您的凭据存储在那里。
  3. 配置 InfluxDB v3 Python 客户端:我们使用指定的主机 URL、令牌和组织详细信息初始化 InfluxDBClient3 对象以进行数据存储。
python
influxdbClient = InfluxDBClient3(host=url, token=token, org=org)
  1. API 配置和标头:使用 API 密钥,定义 FlightAware AeroAPI 端点和身份验证标头。指定 API 请求的参数,包括用于航班跟踪的地理边界框和返回的页面数量限制。
  2. 时间转换函数:包含一个 convert_to_utc 函数以确保所有时间戳都采用 UTC 格式。这有助于在 Grafana 中更轻松地进行数据管理和可视化。
  3. 数据收集主循环:这将执行一个永久循环,该循环向 FlightAware AeroAPI 发送请求以检索指定参数范围内的航班数据。它还会检查响应是否成功并提取航班详细信息,特别是忽略没有声明目的地的航班。对于每个有效航班,它都会构建一个详细的字典,包括航班标识符、时间、地理坐标和其他相关的航班数据。该脚本还处理航路点,为简单起见,仅提取第一个和最后一个。
  4. 数据处理和存储:在这里,我们将所有收集的航班数据合并到一个字典中,并将其转换为 Pandas DataFrame。然后,我们将此 DataFrame 写入 InfluxDB,指定测量和标记配置。
python
 for d in flight_data:
                        merged_data.update(d)
                    flight_df = pd.DataFrame([merged_data])
                    flight_df['timestamp'] = flight_df['last_position']
                    influxdbClient._write_api.write(bucket=db, record=flight_df, data_frame_measurement_name='flight', data_frame_tag_columns=['ident', 'fa_flight_id'], data_frame_timestamp_column='timestamp')

在 Grafana 中可视化航班数据

现在,您可以导入 FlightAware Grafana Dashboard JSON 以在 Grafana 中构建航班监控仪表板。有关在 Grafana 中从 JSON 导入仪表板的更多信息,请参阅此文档。要从 InfluxDB Cloud 3.0 免费层级帐户查询数据,请利用 Grafana InfluxDB v3 Data Source

在这里,我们可以看到我们特定区域内的飞机,如本仪表板左上角面板上的地图所可视化。在本示例中,我们关注拉斯维加斯。我们还可以查看飞机类型、目的地城市和始发城市(右上角面板)。我们还监控平均海拔、空中航班数量和平均地速等统计数据。我们还有一个飞机地速时序可视化,以查看飞机如何着陆和起飞。

我不太了解不同的飞机,但我认为大型飞机的着陆和起飞速度更陡峭。最后,我们还按主要航空公司可视化航班,其中西南航空公司在当时在拉斯维加斯拥有最多的航班。

附加资源和结论

我们希望本教程能帮助您开始使用 InfluxDB 可视化航班数据。我们还鼓励您查看以下相关资源,以了解更多关于如何将 InfluxDB 与 Grafana 和 Python 结合使用的信息

注意:关于此演示的另一个很酷的事情是,InfluxData 的 DevRel 团队可以使用 Github Actions 完全远程运行它,因此如果您在会议展位看到 InfluxData 运行此演示,则很可能我们正在远程运行它。

与往常一样,请从这里开始使用 InfluxDB Cloud 3.0。如果您需要帮助,请联系我们的社区网站Slack 频道