如何使用InfluxData和Balena构建IoT网关
作者:David G. Simmons / 用例,开发者
2017年7月10日
导航到
注意: 自本文编写以来,resin.io 已更名为 balena。原文中出现的resin.io文本现在已替换为更新的名称balena.io。
动机
在许多物联网(IoT)部署中,用户希望在将数据发送到云端之前,在中心位置收集站点或一系列传感器的所有数据。这种基础设施通常被称为网关。网关可以执行多种功能,但通常收集、汇总、存储、分析和可视化来自传感器的数据。网关还负责将所有这些数据转发到后端系统,通常是云端。InfluxData TICK Stack能够有效地执行所有这些功能,充当一个完整的物联网数据平台。在这个例子中,我们将使用树莓派(Raspberry Pi),因为它们相对便宜且容易获取,但市场上还有来自三星ARTIK等公司的各种网关设备。
架构
要求
要完成本指南,您需要以下内容:
- 一个树莓派
- InfluxDB Cloud实例
- 使用免费试用启动一个Uno,或者使用现有的实例。
- 一个balena.io(原名resin.io)账户
- 上述入门文档适用于树莓派3
按照上述说明连接您的树莓派。当指南要求您部署代码时,请停止。
分支仓库
将此仓库分支到您的GitHub账户,然后将其克隆到您的本地机器上,以便您有一个本地副本。然后添加balena远程,以便将代码推送到您的设备。
$ git remote add resin <resin_user>@git.resin.io:<resin_user>/<application_name>.git
配置堆栈
此仓库允许您轻松配置堆栈的不同成员。每个产品的配置文件都位于config
目录中。要更改配置,只需编辑influxdb.conf、telegraph.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
将您的代码部署到RaspberryPi。通过balena仪表板检查实例的日志。一旦安装启动,Chronograf将可在您的本地网络上的http://<设备_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
在此之后,您将能够看到您的Telegraf数据在InfluxDB Cloud实例中!
$ 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 ...
您现在已成功构建了一个Influx Data物联网网关设备,用于收集、管理和存储您的本地物联网传感器数据流,然后将该数据转发到您的InfluxDB云实例以进行进一步聚合和处理。
为什么安装在网关上?
为什么要在网关上安装TICK堆栈,然后转发所有这些数据到您的云实例?为什么不一开始就直接将所有数据发送到云并完成呢?这两个都是很好的问题,我将尝试回答。
第一个答案是,这是一个架构选择。一些设计者可能根本不会使用网关设备。有些人可能会使用,但不会在其网关上提供任何类型的数据存储/分析。这是一个完全合理的设计选择,但它有可能使在高度分布式系统中进行本地数据分析变得困难。
这直接导致我的第二个答案,即它使本地数据分析成为可能。让我们假设您有一个高度分布的物联网部署,有成千上万的传感器分布在数百个位置。在Influx Data的帮助下,在您的后端云系统中进行分析和可视化当然是可以的。但对于对其他任何地方都不感兴趣的本地工厂经理来说,本地分析功能非常强大。在本地提供这样一个强大工具的开销和成本相当低,而好处似乎足以抵消这些成本。
自己动手
如果您已经看到了我们的Built with InfluxData页面,您知道接下来会发生什么。去构建一些东西吧!使用您在这里学到的知识来构建自己的基于InfluxDB的物联网系统,让我们知道您构建了什么,我们将给您一些酷炫的周边产品!