第二部分:如何在Google Cloud Platform上使用TICK Stack创建一个物联网项目

导航到

第二部分:使用InfluxDB API

InfluxDB内置了一个HTTP API,您可以使用它执行所有基本操作。该API功能强大,允许您进行数据库创建等管理操作,以及查询。

到目前为止,如果我们从第一部分回顾——我们在Google Cloud Platform上通过单个Compute Engine实例安装了InfluxDB。记得在上一部分中,InfluxDB使用了两个端口,8083(管理Web应用程序)和8086(API)。我们通过配置Google Compute Engine中的防火墙规则,使这两个端口允许流量。

InfluxDB API起始页在此处可用。它公开了三个自解释的端点。

  • /ping
  • /query
  • /write

由于HTTP服务器API在端口8086上公开,HTTP端点将具有以下格式(例如:/ping端点)。

http://:8086/ping

InfluxDB还有一个客户端库集合,您可以使用客户端编程语言来使用。这肯定会使事情变得更容易,我们也会看看这一点,但现在我们将处理基本的HTTP调用,以便我们更好地理解它。

我们将执行一些HTTP POST调用到InfluxDB API服务器以插入一些记录。记得在上一节中,我们创建了以下内容

  • 名为 temperature_db 的数据库
  • 插入了一些具有以下特性的记录
    • 名为 temperature 的测量
    • 每个测量都有一个名为 station 的单个标签,其值类似于 S1, S2 等等。
    • 每个测量都有一个值字段,它是摄氏度的温度读数。

对于InfluxDB API,这里有一个写入数据API指南

进入Google Cloud Shell

在我的书中,Google Cloud Platform中一个最有趣和有用的功能是Google Cloud Shell。它为您提供了一个带有大多数工具/语言SDK的小型Compute Engine实例,以便您可以立即使用它来执行包括但不限于以下任务:

  • 处理您的Google Cloud Platform资源。
  • 使用curl、Docker等工具。要查看为您安装的所有好东西的完整列表,请查看这里
  • 网页预览功能

虽然您可以从大多数机器上运行curl实用程序,包括您的笔记本电脑,但让我们先熟悉一下Google Cloud Shell,因为您肯定会发现它在许多其他任务中很有用。

要开始使用Cloud Shell,请转到Google开发者控制台并使用您的帐户登录,即您在其中创建Google Cloud Platform项目的帐户。

登录成功后,请查看右上角靠近项目名称的位置,您应该会看到激活Google Cloud Shell图标,如下所示

shell 点击该图标并等待一段时间,以便在第一次为虚拟机分配和激活。激活成功后,您将看到终端滑出,如下所示,那里就是您的开发机器在云中。

shell2

现在您可以使用预先安装的多个工具/开发者SDK。

你可以尝试使用标准gcloud SDK在终端中。为了查看您的Compute Engine实例列表,包括您创建以托管InfluxDB服务器的实例,您可以输入以下命令

$ gcloud compute instances list

这将列出实例,对于您的特定实例,您应该看到一个名为 EXTERNAL_IP 的列。这与我们在本系列早期部分看到的Compute Engine实例的相同公共IP。

现在,让我们开始将记录插入到InfluxDB数据库中。我们将在这里插入一些记录,所以请使用以下curl命令

我们需要执行以下 HTTP POST 操作

  • 端点是 `http://PublicIPofInfluxDBHost:8086/write`
  • 提供一个名为db的请求参数,其值将为数据库名。在我们的例子中,我们创建的数据库名为 `temperature_db`。
  • 我们需要提供记录的行协议格式数据。为了重新创建早期部分相同的场景,它将具有以下格式: `,= value=`
  • 例如,一个样本行协议将是 `temperature,Station=S1 value=29.8`

我在提示符中执行以下curl命令,并返回204响应代码,这意味着服务器已成功满足请求。请注意,您应将下面的字段 PublicIP 替换为您Compute Engine的公共IP地址。

romin_irani@mindstormclouddemo:~$ curl -i -XPOST 'http://<PublicIP>:8086/write?db=temperature_db' --data-binary 'temperature,Station=S1 value=29.8'
HTTP/1.1 204 No Content
Request-Id: f512ef7a-d307-11e5-8067-000000000000
X-Influxdb-Version: 0.10.0
Date: Sun, 14 Feb 2016 10:44:43 GMT

romin_irani@mindstormclouddemo:~$ curl -i -XPOST 'http://<PublicIP>:8086/write?db=temperature_db' --data-binary 'temperature,Station=S1 value=29.85'
HTTP/1.1 204 No Content
Request-Id: 230bed8e-d308-11e5-806f-000000000000
X-Influxdb-Version: 0.10.0
Date: Sun, 14 Feb 2016 10:46:00 GMT

romin_irani@mindstormclouddemo:~$ curl -i -XPOST 'http://<PublicIP>:8086/write?db=temperature_db' --data-binary 'temperature,Station=S1 value=29.9'
HTTP/1.1 204 No Content
Request-Id: 305bd26a-d308-11e5-8073-000000000000
X-Influxdb-Version: 0.10.0
Date: Sun, 14 Feb 2016 10:46:22 GMT

请注意,我演示的上述方法需要为每个测量发送一个HTTP请求。您也可以在一次请求中提供多个(批量)测量。InfluxDB 写入API 允许这样做。它还允许行协议数据存在于文件中,然后您可以使用curl回放该文件。有关详细信息,请查看写入API。

我们可以通过Web UI或HTTP API查询我们的记录是否已创建。

temp2

查询API

您可以使用 查询API,这是一个用于查询InfluxDB记录的HTTP API。

您将需要调用的HTTP端点如下

http://PublicIPofInfluxDBHost:8086/query/db=<dbname>&q=<query>

例如,让我们通过curl查询Google Cloud Shell中的所有 temperature 测量值,对于 Station S2(我们只有一个具有Station = S2的记录)的输出如下所示

romin_irani@mindstormclouddemo:~$ curl -G 'http://<PublicIP>:8086/query?pretty=true' --data-urlencode "db=temperature_db" 
--data-urlencode "q=SELECT * FROM temperature WHERE Station='S2'"
{
   "results": [
       {
           "series": [
               {
                   "name": "temperature",
                   "columns": [
                       "time",
                       "Station",
                       "value"
                   ],
                   "values": [
                       [
                           "2016-01-05T09:27:06.269925241Z",
                           "S2",
                           29.9
                       ]
                   ]
               }
           ]
       }
   ]
}
romin_irani@mindstormclouddemo:~$

尝试其他查询,如 COUNT(value)MEAN(value),以获取记录总数或平均温度读数(摄氏度)。

以下是一些示例查询

SELECT COUNT(value) from temperature

SELECT COUNT(value) from temperature GROUP BY Station

SELECT MEAN(value) from temperature GROUP BY Station

有关更多信息,请参阅 InfluxQL

在本部分中,我们介绍了如何使用服务器公开的HTTP API管理InfluxDB数据。为了回顾,它公开了3个端点 /ping/query/write。在下一部分中,我们将探讨如何使用客户端库执行相同的操作。

接下来是什么?

  • 这是本教程的第二部分总结。在 第三部分 中,我们将探讨使用InfluxDB客户端库。关注我们的Twitter @influxdb,以获取本系列博客的下一部分。
  • 想要提升您的InfluxDB知识?请查看我们经济实惠的 虚拟 和 公开培训