如何将 Google Core IoT 与 InfluxData 结合使用

导航至

随着越来越多的物联网部署寻求利用基于云的解决方案的强大功能,我们在 InfluxData 一直与云服务提供商密切合作,以确保 InfluxDB 继续成为物联网的首选时间序列数据库。Google 的 Core IoT 平台也不例外,因此我们为 Google Core IoT 构建了一个新的 Telegraf 插件,以及一个关于使用 Google Core IoT 和 InfluxData 部署您的物联网解决方案的完整端到端教程。

本教程将假定您已有一个可访问的 InfluxDB 实例正在运行。

我们还将构建和安装一个支持 Google Core IoT Pub/Sub 客户端的 Telegraf 版本。该 Telegraf 实例 *必须* 在具有 SSL 加密证书的公共可访问互联网服务器上运行。**Google Pub/Sub *只能* 写入 SSL 安全的 Telegraf 实例。**

我要特别感谢 Google 的工程师们为实现这一目标提供的帮助。没有我们紧密的合作关系,这是不可能实现的。

您将需要什么

正如我所说,这是一个关于使用 Google Core IoT 构建端到端物联网应用程序的完整教程,因此我们肯定需要构建一个物联网设备。有几种方法可以做到这一点,包括*不* 构建设备,因此我们将介绍所有选项。

完成本教程您需要准备什么

您当然可以在 Google Cloud 中运行您的 InfluxDB 实例,但设置它超出了本教程的范围。

如果您想使用*真实*传感器数据,您将需要

否则,您可以使用应用程序在模拟模式下生成的*虚拟*数据。

本教程所需的所有代码都在以下 Github 存储库中提供

您将必须从源代码构建 Telegraf(从上面的链接),才能使用此集成,因为该插件尚未在 Telegraf 的官方版本中提供。下面也包含有关如何执行此操作的完整说明。

GCP 端的 IoT Core 设置

Google Cloud Platform 帐户

在您可以设置 IoT Core 之前,您需要一个 Google 帐户。如果您有 Google 帐户,您可以从您的 Google 帐户开始,或者为此教程创建一个新帐户。一旦您准备好您的 Google 帐户,您就可以运行下面的 gcloud 命令。或者,您可以使用 Google Cloud Console。有关说明,请参见下一节。

安装 ?Google Cloud 命令行工具

首先,按照 Google 的此文档安装 Google Cloud 命令行工具。您需要安装组件,验证到 Google Cloud 的身份,并创建和配置您的项目


# gcloud components install beta
# gcloud auth login
# gcloud projects create ? <YOUR_PROJECT_NAME>
# gcloud config set project ? <YOUR_PROJECT_NAME>
# gcloud beta pubsub topics create ? <iot-topic>
# gcloud beta pubsub subscriptions create --topic ? <iot-topic>? ? <iot-subscription> 

Google Cloud IoT 平台 *要求* 所有通信都使用 SSL/TLS 进行保护,因此您需要生成公钥/私钥对,以便您的设备与云通信。首先,您将生成 RSA 公钥和私钥,然后您将使用这些密钥发送数据。

只要您的计算机安装了 OpenSSL,您就可以运行以下命令来生成所需的密钥文件


# mkdir PemFiles
# cd PemFiles
# openssl req -x509 -newkey rsa:2048 -keyout private_key.pem -nodes -out public_key.pem -subj "/CN=unused"
Now that you have your Public/Private key pair, your can create a device registry and a device.
# gcloud beta iot registries create ?<iot-registry>? --region us-central1 --event-pubsub-topic=?<iot-topic>
# gcloud iot devices create <DEVICE_ID>\
 --project=<PROJECT_ID> \
 --region=<REGION> \
 --registry=<REGISTRY_ID>\
 --public-key path=public_key_file,type=rs256

注意:将 public_key_file 替换为上面生成的公钥文件的路径。

使用 Google Web Console

您需要登录您的 Google Cloud Platform 帐户。有一个很棒的入门指南可以帮助您入门。

创建注册表

您需要创建一个 Google Core IoT 注册表

GCP-Create-a-registry

 

一旦您为您的设备创建了公钥/私钥对和证书,您就可以创建一个设备来写入该注册表。

 

一旦您创建了具有适当安全证书的设备,您就可以在该设备上运行客户端应用程序。

InfluxData 组件

InfluxData Architecture

本教程将假定您已有一个可访问的 InfluxDB 实例正在运行。

我们还将构建和安装一个支持 Google Core IoT Pub/Sub 客户端的 Telegraf 版本。该 Telegraf 实例 *必须* 在具有 SSL 加密证书的公共可访问互联网服务器上运行。**Google Pub/Sub *只能* 写入 SSL 安全的 Telegraf 实例。**

构建 InfluxData Telegraf

目前,Telegraf 的 Google Core IoT 插件尚未在 Telegraf 的“发布”版本中发布。这是一个预览版本,因此必须从源代码构建后才能运行。

前提条件:Golang

安装和配置 Go 超出了本教程的范围,但您可以在此处找到适用于您操作系统的详细说明。

注意:可以在您的本地计算机上构建 Telegraf,并通过设置一些 GO 环境变量(我们稍后也将介绍)在您的可访问互联网的服务器上运行它。

构建 Telegraf

首先,您需要将 Telegraf 的 GoogleIoTCore 分支克隆到您的计算机,然后您需要构建 telegraf


$ git clone https://github.com/davidgs/telegraf/tree/GoogleIoT
$ cd GoogleIoT
$ make

上面的代码将为您的平台构建 Telegraf 代理。如果您在 Mac OS X 机器上构建,但计划在 Linux 机器上运行它,您仍然可以在本地构建它


$ export GOOS=linux
$ export GOARCH=amd64
$ make

上面的代码将构建一个 64 位 Linux 版本的 Telegraf。

配置 Telegraf

构建 telegraf 后,您需要创建并编辑配置文件以调整 Google 特定部分。


$ telegraf config > telegraf.conf

## Server listens on <server name>:port
## Address and port to host HTTP listener on
service_address = ":9999"
## Path to serve
## default is /write
## path = "/write"
## maximum duration before timing out read of the request
read_timeout = "10s"
## maximum duration before timing out write of the response
write_timeout = "10s"
## precision of the time stamps. can be one of the following:
	# second, millisecond, microsecond, nanosecond
	# Default is nanosecond
precision = "nanosecond"
# Data Format is either line protocol or json
protocol="line protocol"
## Set one or more allowed client CA certificate file names to
## enable mutually authenticated TLS connections
## tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"]
## Add service certificate and key
tls_cert = "/etc/telegraf/cert.pem"
tls_key = "/etc/telegraf/key.pem"
## You **must** provide the certificate and key files!

完成此文件后,将其保存到 /etc/telegraf/telegraf.conf,然后您可以启动 telegraf


$ sudo telegraf -config /etc/telegraf/telegraf.conf

您可以使用以下命令验证您的 telegraf 代理是否正在监听


$ netstat -nlp

并查找输出行


tcp6 129 0 :::9999 :::* LISTEN -

运行客户端应用程序

客户端应用程序也完全用 Go 编写,因此您应该能够在几乎任何支持 Golang 的设备上运行它。在本示例中,我一直在 Raspberry Pi 3 上运行它,但任何具有网络连接并可以运行 Go 代码的设备都可以。


$ git clone https://github.com/davidgs/GoogleIoTClient
$ cd GoogleIoTClient
$ go build GoogleIoT.go 
$ ./GoogleIoT -ca_certs roots.pem -device [deviceName] -private_key [privatekey.pem] -project [projectID] -region [region] -registry [registryName] -format json -virtual

上面的命令(在您替换 [] 之间的值后)将以 JSON 格式发布“虚拟”(随机)值。

在没有 K30 传感器的设备上的示例输出

$ ./GoogleIoT -ca_certs roots.pem -device [deviceName] -private_key [privatekey.pem] -project [projectID] -region [region] -registry [registryName] -format line

将发布实时传感器数据(假设您有上述传感器)并显示以下输出


2018/09/15 12:45:58 [main] Humidity: 66.24 Temperature: 22.56
2018/09/15 12:45:59 [main] Humidity: 66.26 Temperature: 22.56
2018/09/15 12:46:01 [main] Humidity: 66.24 Temperature: 22.57
2018/09/15 12:46:02 [main] Humidity: 66.23 Temperature: 22.56
2018/09/15 12:46:04 [main] testingGoogle,sensor=bme_280 temp_c=22.56,humidity=66.24 1537029958025504878
testingGoogle,sensor=bme_280 temp_c=22.56,humidity=66.26 1537029959527147539
testingGoogle,sensor=bme_280 temp_c=22.57,humidity=66.24 1537029961028724629
testingGoogle,sensor=bme_280 temp_c=22.56,humidity=66.23 1537029962530306772

请注意,输出是 4 行 Influx Line Protocol,因此每次迭代都会写入 4 个温度和湿度点。

这会将数据写入 Google Core IoT MQTT 代理,然后将其发送到 Google Pub/Sub 代理,该代理会推送到 Telegraf(使用来自 davidgs 的 Telegraf 的 GoogleIoT 分支)

查看结果

如果您已正确配置所有内容并正在运行客户端应用程序,您应该能够启动 Chronograf 并看到数据实时流入数据库。

现在,您拥有一个完整的端到端数据管道,从设备到 Google Core IoT,再到 InfluxDB,用于您的 IoT 传感器数据!

致谢

感谢 Daz Wilkins 的文章贡献了 90% 的代码!在他的 Github 上找不到它,所以……优秀的开发者复制,伟大的开发者粘贴。 :-)