摄入和可视化的API数据与史迪仔图表

汤姆·霍兰德

#技术 #缝 #Atlas #Charts

介绍

我们生活在一个充满API的世界 - 一个地方有关设备的任何数据,你的社区,甚至自己只是一个HTTP调用了。不过,虽然从API传回的数据可以是非常有用的,它往往只是一个点即时快照,使得它不可能得到什么事情的全貌。为了得到你所需要的洞察力,一个有用的模式是从API的数据摄取到数据库,然后分析和可视化数据,以了解它是如何随时间变化。由于大多数API数据以JSON表示,MongoDB是这些数据的理想数据库。亚博贵宾会贴吧这篇文章描述了如何使用MongoDB的针摄取和MongoDB图表可视化来完成这个故事。亚博贵宾会贴吧

该模式

我们将要使用的模式是非常简单的,并且可以用许多不同的技术来实现:

  • 一种调度踢落过程以一定间隔(如必要由问题空间),例如每隔一小时
  • 一个食入功能查询API,检索(也许变换)的数据,并在数据库中保存它
  • 数据库存储最新从API检索历史数据
  • 可视化工具查询数据库(利用适当的过滤器)和数据的显示图表,以及它如何随时间变化

使用MongoDB的堆栈实现亚博贵宾会贴吧

由于这是MongoDB的博客,你会不亚博贵宾会贴吧会感到惊讶,我们存储MongoDB中的数据。鉴于现代的API数据通常在JSON代表,您可以直接存储,无需转换在原来的结构中定义的数据或失去丰富。但是,我们的解决方案的其他组件?

内容撷取功能不常运行,所以它非常适合于无服务器计算平台。你肯定可以使用AWS一样LAMBDA或Azure的功能平台完成这个任务,但因为我们的目标是写的MongoDB,最快的路径将是使用MongoDB的针。亚博贵宾会贴吧这使您能够MongoDB的集合,而无需担心连接的URI,驱动程序或包管理简单,基于规则的亚博贵宾会贴吧访问。

十字绣目前还没有一个内置的调度。然而,针可以让你揭露一个函数作为HTTP网络挂接,允许它通过您所选择的调度很容易地调用。

最后,查询,过滤器和可视化,我们将使用MongoDB的测试图表中的数据。亚博贵宾会贴吧这个工具可以让您快速轻松地创建存储在MongoDB中数据的图表,而无需扁平化架构或转换数据。亚博贵宾会贴吧

教程:天气数据

举一个简单的例子,让我们建立一个解决方案,从天气API摄取和可视化数据 - 我们将使用OpenWeatherMap这是免费的基本方案(虽然你仍然需要注册一个帐户来获得一个App ID调用API)。我们的目标是建立自己的个人仪表盘的天气,就像这样:

设置针迹应用

首先,确保你有一个亚博贵宾会贴吧阿特拉斯的MongoDB集群(自由层会工作得很好),并针对该集群创建针应用。

接下来,我们将添加包含需要调用API的一些元数据的针价值。这是一个JSON文件,哪个城市,我们希望从(我使用的是“悉尼,AU”)和OpenWeatherMap应用程序ID天气读数指定要调用API时(从他们的网站上提供您注册一个帐号后)使用。

因为我们正在处理一个HTTP API,我们需要创建一个针HTTP服务,这是负责发出请求。我们会拨打我们的服务“HTTP”,我们将创建一个规则,因此它可对任何URL的GET请求。

最后,我们将添加一个传入网络挂接的服务,这是一个可以从针的外部调用函数。我们会打电话给我们的网络挂接“ingestWeatherData”,将其配置为运行的系统用户,使其通过一个HTTP POST可调用,并且使用作为查询字符串参数提供了一个秘密。不要忘了你的秘密设置为一个不错的随机值。

一旦你配置好网络挂接,您需要提供每个网络挂接调用时运行的代码。此函数调用与我们的十字绣值的参数OpenWeatherMap API。一旦接收到一个结果,它增加了一个新的observationDate场到文档(从派生DT场,但用适当的日期数据类型),然后将更新的文件存储到weather.observations我们的MongoDB阿特拉斯集群内集合。亚博贵宾会贴吧

出口=函数(有效载荷){常量的HTTPService = context.services.get( 'HTTP');VAR weatherApiInfo = context.values.get( 'weatherApiInfo');让URL =`http://api.openweathermap.org/data/2.5/weather?q=$ {weatherApiInfo.city}&单位=度量&的appid = $ {weatherApiInfo.appId}`;的console.log( “正在获取” + URL);返回httpService.get({URL:URL})。然后(响应=> {让JSON = JSON.parse(response.body.text()); json.observationDate =新日期(json.dt * 1000); VAR收集。= context.services.get(亚博贵宾会贴吧'的mongodb-Atlas公司)分贝( '天气')收集( '观察'); collection.insertOne(JSON);的console.log( '插入的文档!');});};

要安排我们的提取功能,我们可以使用任何我们想要的调度,包括像AWS或者Azure中或作为VM cron作业云提供商之一。一个简单的自由选择是使用IFTTT它可以让你打造“小程序”与触发器和行动。在这个例子中,我用“每小时”触发从日期/时间类别和“网络挂接”行动。无论调度您决定使用,选择一个HTTP POST和复制从针的URL网络挂接设置页面,确保您附加“?秘密= ”到URL的结束。

建立你的仪表板

虽然你可能渴望得到你的仪表盘开始,请记住,读数只有未来通过一小时一次,所以你可能要等几天,直到你有足够的数据可视化。在等待的时候,你可以下载和配置亚博贵宾会贴吧MongoDB的图表公测,并了解该工具通过以下的教程

一旦你有你的收集数据的临界质量,它的时间来建立自己的仪表板!在里面截图本文前面,你可以看到我已经创建了一些不同的图表显示的数据的不同意见。在本文中,我们将经历如何创建顶级图表 - 在那之后,它给你复制其他图表或拿出自己的想法。

为了在图表可视化的数据,你首先需要创建一个数据源,只需导航到数据源标签并点击新数据源按钮。在此对话框的第一步,你需要连接URI(包括用户名和密码)到您的阿特拉斯集群。您可以通过点击在Atlas Web控制台连接按钮得到这个。当你在这里,一定要配置好IP白名单(阿特拉斯安全选项卡上),以允许访问从图表的服务器集群。

早在图表,一旦你成功连接到群集,您可以选择您的数据源`weather.observations`集合。最后,你可以决定是否要与其他图表用户共享的数据源,数据源将被创建。

现在,我们已经有了一个数据源,它的时间来创建仪表板。转至仪表板选项卡上,单击新建仪表盘,然后输入一个合适的名称和说明(“天气”会做很好!)。你现在将可以用一张空白的画布提出,准备添加第一个图表。

单击添加图表将带您进入图表生成器。这是所有的魔法发生。构建图表包括以下步骤,虽然你有时可能会做的事情以不同的顺序或迭代,直到你满意的结果:

  1. 选择数据源
  2. 选择一个图表类型
  3. 从现场面板拖动字段到编码信道
  4. 应用过滤器,如果需要的话
  5. 给你的图表的标题
  6. 图表保存到您的仪表板

选择数据源始终是第一步。一旦你这样做,图表将采样数据源,并显示在现场面板所产生的场在窗口的左侧。注意,场板还示出了类型每个字段的,并且识别在文档的结构的嵌套文件和数组。

接下来,我们会选择我们的图表类型。为了表示我们的温度如何随时间变化曲线图,我们将选择行类别,然后选择连续线图。连续图显示用于从所述集合中的每个单个文档,而不是离散的图表时,他们共享相同的类别值,其聚合的多个点一起的数据点。

完成这些步骤后,您的图表看起来就像这样:

现在是时候来编码某些字段。拖动observationDate场到X轴通道,然后展开主要嵌套的文件揭示其子女。我们将拖动温度场到Y轴,你应该会看到一个有用的图表的开端!

为了提供更多的信息添加到图表,让我们添加更多的系列展示整个城市的最低和​​最高气温观测。图表让您通过两种方式创建多系列图表:你可以从不同的领域创造每一个系列,你可以使用一个“系列”字段拆分值从单个字段分为多个系列。对于这个集合中的数据的形状,我们将与第一个选项去。我们将通过拖动做到这一点temp_mintemp_max字段作为Y轴信道的附加字段:

这是开始看起来不错!但请注意,图表当前显示的所有集合中的数据。虽然我们只是在一瞬间有数据几天在系统中,每过一个小时,我们会得到另一个数据点,逐渐产生了更混乱的图表和性能下降英寸为了解决这个问题,我们可以创建一个过滤器来限制数据的滑动时间窗口,如之前的5天。您在图表使用指定过滤器MQL查询文档。要指定相对日期查询,你需要做一点算术创建基于相对于当前日期的毫秒数一个新的Date对象,按日期()表示。要在指定的最后5天,请使用以下过滤器:

{observationDate:{$ GTE:日期(日期() -  5 * 24 * 60 * 60 * 1000)}}

应用过滤器后,你可以给你的图表的标题,我们就大功告成了!

保存图表后,你可以调整它在你的仪表板,然后开始创造更多的图表,让您更深入了解在所在城市的天气。

又如:Home电池数据

我选择了主例如天气情况在这篇文章中,因为它很容易获得工作和东西我们都可以涉及到。然而,在实践中,你也许可以得到很多从天气网站的这个信息的。真正的价值是没有这么多在这个一个具体的例子,但在模式和使用MongoDB的平台,它的实现。亚博贵宾会贴吧

无论你的兴趣是什么,没准还有的API返回的数据是给你的价值,你可以使用来自天气例子同样的方法采集和可视化这些数据。下面的截图显示一个我创建展示我的家用电池存储系统的状态和历史。你可以看到过去一周的存储级别,目前的储存水平和了解使用情况如何改变了季节。

我们希望,这会给你,你想创建仪表盘的一些想法。尽情探索和可视化您的数据!