第二部分:如何在 Google Cloud Platform 上使用 TICK Stack 创建 IoT 项目

导航至

第二部分:使用 InfluxDB API

InfluxDB 自带内置的 HTTP API,您可以使用它来执行所有基本操作。该 API 功能强大,既允许您进行管理操作(如创建数据库),又允许您进行数据管理操作以及查询。

回顾第一部分 - 我们已经在 Google Cloud Platform 上通过单个 Compute Engine 实例安装了 InfluxDB。请记住,正如我们在上一部分中看到的,InfluxDB 使用 2 个端口:8083(管理 Web 应用程序)和 8086(API)。并且我们已经通过在 Google Compute Engine 中配置防火墙规则来开放了这两个端口以允许流量。

InfluxDB API 起始页在此处提供。它公开了 3 个不言自明的端点

  • /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。它为您提供了一个小型 Compute Engine 实例,其中安装了大多数工具/语言 SDK,以便您可以立即将其用于多项任务,包括

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

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

要开始使用 Cloud Shell,请转到 Google Developers Console 并使用您的帐户登录,即您创建 Google Cloud Platform 项目的同一帐户。

成功登录后,查看项目名称右上角,您应该会看到“激活 Google Cloud Shell”图标,如下所示

shell 单击它并等待一段时间,让 VM 首次配置并激活。成功激活后,您将看到一个终端向上滑动,如下所示,您的云端开发机器就在那里

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
  • 我们需要为记录提供 Line Protocol 格式的数据。要重现与前面部分相同的场景,它将采用以下格式:,= value=
  • 例如,一个示例 Line Protocol 将是 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 Write API 允许这样做。它还允许 Line Protocol 数据存在于文件中,然后您可以通过 curl 重放该文件。查看 Write API 了解更多详情。

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

temp2

查询 API

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

您将必须调用的 HTTP 端点如下

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

例如,让我们在 Google Cloud Shell 中通过 curl 查询 Station S2 的所有 temperature 测量值(我们只有 1 条 Station = S2 的记录)。curl 命令的输出如下所示

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 知识吗?查看我们价格实惠的虚拟公开培训