第二部分:如何在Google Cloud Platform上使用TICK Stack创建一个物联网项目
作者:Todd Persen / 产品,用例
2016年2月24日
导航到
第二部分:使用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图标,如下所示
点击该图标并等待一段时间,以便在第一次为虚拟机分配和激活。激活成功后,您将看到终端滑出,如下所示,那里就是您的开发机器在云中。
现在您可以使用预先安装的多个工具/开发者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查询我们的记录是否已创建。
查询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
。在下一部分中,我们将探讨如何使用客户端库执行相同的操作。