如何使用 InfluxData 和 Balena 构建 IoT 网关
作者:David G. Simmons / 用例, 开发者
2017 年 7 月 10 日
导航至
注意:自本文撰写以来,resin.io 已更名为 balena。原始文章中 resin.io 的文本出现已被更新后的名称 balena.io 替换。
动机
在许多 IoT 安装中,用户希望在将数据发送到云端之前,在一个中心位置收集站点或一系列传感器的所有数据。这种基础设施通常称为网关。网关可以执行各种功能,但通常收集、聚合、存储、分析和可视化来自传感器的数据。网关还负责将所有这些数据转发到后端系统,通常是云端。InfluxData TICK Stack 能够出色地执行所有这些功能,充当完整的 IoT 数据平台。在本例中,我们将使用 Raspberry Pi,因为它们相对便宜且易于获得,但市场上还有各种可用的网关设备,例如 Samsung ARTIK 等。
架构
要求
要遵循本演练,您需要以下内容
- Raspberry Pi
- InfluxDB Cloud 实例
- 使用您的免费试用版启动 Uno,或使用现有实例。
- balena.io(原 resin.io)帐户
- 上面的入门文档适用于 Raspberry Pi 3
按照上面的说明连接您的 Raspberry Pi。当演练要求您 部署代码 时,请停止。
Fork 存储库
Fork 此存储库 到您自己的 Github 帐户,然后将其克隆到您的本地计算机,以便您拥有本地副本。然后添加 balena 远程以启用推送到您的设备
$ git remote add resin <resin_user>@git.resin.io:<resin_user>/<application_name>.git
配置堆栈
此存储库使您能够轻松配置堆栈的不同成员。每个产品的配置文件都位于 config
目录中。要更改配置,只需编辑 influxdb.conf、telegraf.conf 和 capacitor.conf 文件。
telegraf.conf
此文件控制 Telegraf 配置。Telegraf 是一种插件驱动的、基于代理的数据收集工具。它包含用于从许多标准来源收集数据的插件。此外,Telegraf 还具有许多实用程序插件,可帮助从未实现的来源收集数据。它还为构建您自己的插件提供了简单的界面。
此安装中启用的插件可以分为以下几组
- 管理传感器摄取
- 这将侦听环境中的其他传感器发布到网关的任何数据。
- 当前已启用:
http_listener
- 网络监控
- 这些插件可帮助您排除网络问题。
- 当前已启用:
nstat
,dns_query
,ping
- 主机级别监控
- 这些插件为您提供有关网关主机本身的数据。
- 当前已启用:
cpu
,mem
,diskio
,swap
,system
,disk
,kernel
,processes
- TICK Stack 监控
- 这些插件为您提供有关 TICK Stack 安装本身的更多数据
- 当前已启用:
influxdb
,kapacitor
,internal
kapacitor.conf
此文件控制 Kapacitor 配置。Kapacitor 是一种流处理工具,用于处理、监控和警报时间序列数据。您需要更改的配置将用于将指标运送到云实例。
要启用发货,请更改 [[influxdb]]name="cloudInflux"
部分中的配置。您需要为可从设备访问的正在运行的 InfluxDB 服务器提供连接凭据。在 InfluxDB Cloud 上启动 Uno 实例是尝试此操作的好方法。将带有 ???? 的行更改为您实例的正确值
[[influxdb]] enabled = true ???? default = false name = "cloudInflux" urls = ["https://{{cloud-instance}}.influxcloud.net:8086"] ???? username = "myUser" ???? password = "myPass" ???? timeout = 0 insecure-skip-verify = false startup-timeout = "5m" disable-subscriptions = true subscription-protocol = "http" subscriptions-sync-interval = "1m0s" kapacitor-hostname = "" http-port = 0 udp-bind = "" udp-buffer = 1000 udp-read-buffer = 0 [influxdb.subscriptions] [influxdb.excluded-subscriptions]
influxdb.conf
此文件控制 InfluxDB 配置。InfluxDB 是用于指标、事件和实时分析的可扩展数据存储。您应该不需要更改此文件中的任何配置。不建议启用 [[graphite]]
、[[opentsdb]]
或 [[udp]]
部分。如果您需要使用此设置写入这些格式,请使用 Telegraf 上的 socket_listener
插件来写入该数据。这确保了指标发货将按预期运行。
推送代码并完成配置
配置存储库后,只需运行 git push resin master
即可将您的代码部署到 Raspberry Pi。通过 balena 仪表板检查实例的日志。安装启动后,Chronograf 将在本地网络上的 http://<device_ip>:8888
上可用。按照说明 从第 3 步开始设置您的 Chronograf 实例。
还需要一个步骤才能启用指标发送到云端:定义和启用 Kapacitor TICK 脚本 来完成此操作。使用 balena.io 仪表板在您的实例中打开命令行并运行以下命令
$ kapacitor define shipToCloud -dbrp telegraf.autogen -tick /usr/src/app/toCloud.tick -type stream $ kapacitor enable shipToCloud
之后,您将能够在您的 InfluxDB Cloud 实例中看到您的 Telegraf 数据!
$ influx -host {{cloud-instance}}.influxcloud.net -port 8086 -username {{username}} -password {{password}} -ssl -database telegraf Connecting InfluxCLI to {{cloud-instance}}.influxcloud.net:8086 ... Connected to https://{{cloud-instance}}.influxcloud.net:8086 version 1.2.4-c1.2.4 InfluxDB shell version: v1.2.4 > use telegraf > show measurements name: measurements name ---- cpu disk diskio dns_query influxdb ...
您现在已成功构建了一个 InfluxData IoT 网关设备,用于收集、管理和存储您的本地 IoT 传感器数据流,然后将该数据转发到您的上游 InfluxDB 云实例,以进行进一步的聚合和处理。
为什么安装在网关上?
为什么要将 TICK 堆栈安装在网关上,然后将所有数据转发到您的云实例?为什么不直接将所有数据发送到云端并完成操作?两者都是好的且有效的问题,我将尝试回答。
第一个答案是这是一个架构选择。一些设计者可能选择完全不使用网关设备。有些人可能会使用,但不会在其网关上提供任何类型的数据存储/分析。这是一个完全有效的设计选择,但在高度分布式系统中,它有可能使本地数据分析模式变得困难。
这直接引出我的第二个答案,即它启用了本地化数据分析。让我们想象一下,您有一个高度分布式的 IoT 部署,在数百个位置部署了数千个传感器。在您的后端云系统上进行分析和可视化当然是可能的——而且使用 InfluxData 相当容易。但是对于根本不关心任何其他站点的本地工厂经理来说,拥有本地分析非常强大。在本地级别提供如此强大的工具的开销和成本相当低,而且好处似乎超过了这些成本。
构建您自己的
如果您看过我们的 Built with InfluxData 页面,您就知道接下来会发生什么。去构建一些东西!使用您在此处学到的知识来构建您自己的基于 InfluxDB 的 IoT 系统,让我们知道您构建了什么,我们将向您发送一些酷炫的赠品!