第 7 部分:如何在 Google Cloud Platform 上使用 TICK Stack 创建 IoT 项目
作者:Todd Persen / 产品, 用例
2016 年 3 月 8 日
导航至
第 7 部分:使用 Telegraf 收集系统传感器数据
本教程的最后一部分着眼于 Telegraf,TICK Stack 中的“T”。 Telegraf 是一个代理,用于从各种输入通道收集指标并将它们写入输出通道。它支持超过 60 个插件,这些插件可以用作数据的输入源或输出目标。
该代理完全由插件驱动,虽然它开箱即用地支持多个插件,但您也可以编写自己的插件。
到目前为止,我们的教程着眼于从多个气象站收集温度数据,并将数据持久化在 InfluxDB 中。除此之外,我们还研究了如何设置 Chronograf 以通过仪表板查看温度数据,以及如何通过 Kapacitor 设置警报,以便在温度超过某个限制时将通知推送到 Slack。
此时,数据正在通过 Raspberry Pi 站点收集,这些站点具有温度数据,并且流程几乎到位。我们将考虑利用 Telegraf 的领域是监控 InfluxDB 服务器的 CPU、内存和其他系统参数。
- Telegraf 附带一个名为 `system` 的输入插件。此插件捕获有关其运行系统的各种指标,例如内存使用情况、CPU、磁盘使用情况等。我们将使用此插件捕获 InfluxDB 服务器上的 cpu 和内存指标。
- 输入指标捕获后需要发送到输出系统。在我们的例子中,我们将把这些数据推送到 InfluxDB 本身。这将帮助我们将这些指标捕获到 InfluxDB 数据库中,我们可以在该数据库上通过 Chronograf 和 Kapacitor 构建仪表板和警报。听起来不错。因此,输出插件将是 InfluxDB。
下图描述了我们将要做的事情
安装 Telegraf
我们将在 InfluxDB 服务器实例上安装 Telegraf。目前我们只有一个在 Google Cloud 中运行的实例,我们将在该实例上进行设置。
如前所述,VM 运行 Debian Linux,我们可以按照官方文档站点给出的步骤安装 Telegraf。按照下面给出的说明安装最新版本的 Telegraf
wget http://get.influxdb.org/telegraf/telegraf_0.10.2-1_amd64.deb
sudo dpkg -i telegraf_0.10.2-1_amd64.deb
配置 Telegraf
我们需要为 Telegraf 提供一个配置文件。此配置文件不仅包含 Agent 配置参数,还包含您希望配置的输入和输出插件。
Telegraf 支持大量的输入和输出插件,它确实提供了一个命令来生成 telegraf.conf(配置文件),该文件创建所有输入和输出插件配置部分。这对于您来说是一件有用的东西,但不是我们需要的。
我们将使用以下通用命令为我们生成 Telegraf 配置文件
telegraf -sample-config -input-filter <pluginname>[:<pluginname>] -output-filter <outputname>[:<outputname>] > telegraf.conf
在我们的例子中,我们有以下内容
- 输入过滤器是来自 system 输入插件的过滤器。我们对 cpu 和 mem 感兴趣。
- 输出过滤器只有一个,它是 InfluxDB 输出插件。
我们生成一个如下所示的 telegraf.conf
telegraf -sample-config -input-filter cpu:mem -output-filter influxdb > telegraf.conf
让我们看一下生成的 telegraf.conf
文件中的关键部分
- [agent]:这是 Telegraf 代理本身的部分。理想情况下,我们不想在这里进行太多调整。请注意,您可以通过 `interval` 属性更改所有输入的频率(时间间隔)数据收集。
- 下一节是一个或多个 `outputs`。在我们的例子中,它只是 `influxdb output`,即 `[[outputs.influxdb]]`。两个属性在这里是关键,urls 和 database。 urls 属性是 influxdb 实例的列表。在我们的例子中只有一个,并且我们在与 InfluxDB 实例相同的机器上运行 Telegraf,因此端点指向 `http://localhost:8086` 的 InfluxDB API 端点。同样,database 属性是输入指标将被收集到的数据库。默认情况下,它设置为 `telegraf`,但您可以将其更改为另一个数据库。我将使用默认数据库。
- 下一节是输入部分。您可以看到它创建了 `[[inputs.cpu]]` 和 `[[inputs.mem]]` 输入。查看 cpu 和 mem 输入的文档。
启动 Telegraf 并收集指标
现在让我们通过以下命令启动 Telegraf Agent
telegraf -config telegraf.conf
我们可以将生成的 telegraf.conf
推送到 /etc/telegraf
文件夹并将其作为服务启动,但为了本文教程的解释,这样做就可以了。
成功启动后,它会显示如下所示的输出
$ telegraf -config telegraf.conf
2016/02/15 04:36:39 Starting Telegraf (version 0.10.2)
2016/02/15 04:36:39 Loaded outputs: influxdb
2016/02/15 04:36:39 Loaded inputs: cpu mem
2016/02/15 04:36:39 Tags enabled: host=instance-1
2016/02/15 04:36:39 Agent Config: Interval:10s, Debug:false, Quiet:false, Hostname:"instance-1", Flush Interval:10s
回想一下,Telegraf Agent 的属性之一是 interval 属性,该属性设置为 10 秒。这是它将轮询所有输入以获取数据的时间间隔。
以下是来自多个数据收集间隔的输出
2016/02/15 04:36:40 Gathered metrics, (10s interval), from 2 inputs in 531.909µs
2016/02/15 04:36:50 Gathered metrics, (10s interval), from 2 inputs in 447.937µs
2016/02/15 04:36:50 Wrote 4 metrics to output influxdb in 3.39839ms
2016/02/15 04:37:00 Gathered metrics, (10s interval), from 2 inputs in 482.658µs
2016/02/15 04:37:00 Wrote 3 metrics to output influxdb in 4.324979ms
2016/02/15 04:37:10 Gathered metrics, (10s interval), from 2 inputs in 775.612µs
2016/02/15 04:37:10 Wrote 3 metrics to output influxdb in 7.472159ms
2016/02/15 04:37:20 Gathered metrics, (10s interval), from 2 inputs in 438.388µs
2016/02/15 04:37:20 Wrote 3 metrics to output influxdb in 3.219223ms
2016/02/15 04:37:30 Gathered metrics, (10s interval), from 2 inputs in 419.607µs
2016/02/15 04:37:30 Wrote 3 metrics to output influxdb in 3.159644ms
2016/02/15 04:37:40 Gathered metrics, (10s interval), from 2 inputs in 426.761µs
2016/02/15 04:37:40 Wrote 3 metrics to output influxdb in 3.894155ms
2016/02/15 04:37:50 Gathered metrics, (10s interval), from 2 inputs in 449.508µs
2016/02/15 04:37:50 Wrote 3 metrics to output influxdb in 3.192695ms
2016/02/15 04:38:00 Gathered metrics, (10s interval), from 2 inputs in 498.035µs
2016/02/15 04:38:00 Wrote 3 metrics to output influxdb in 3.831951ms
2016/02/15 04:38:10 Gathered metrics, (10s interval), from 2 inputs in 448.709µs
2016/02/15 04:38:10 Wrote 3 metrics to output influxdb in 3.246991ms
2016/02/15 04:37:30 Gathered metrics, (10s interval), from 2 inputs in 419.607µs
2016/02/15 04:38:20 Gathered metrics, (10s interval), from 2 inputs in 514.15µs
2016/02/15 04:38:20 Wrote 3 metrics to output influxdb in 3.838368ms
2016/02/15 04:38:30 Gathered metrics, (10s interval), from 2 inputs in 520.263µs
2016/02/15 04:38:30 Wrote 3 metrics to output influxdb in 3.76034ms
2016/02/15 04:38:40 Gathered metrics, (10s interval), from 2 inputs in 543.151µs
2016/02/15 04:38:40 Wrote 3 metrics to output influxdb in 3.917381ms
2016/02/15 04:38:50 Gathered metrics, (10s interval), from 2 inputs in 487.683µs
2016/02/15 04:38:50 Wrote 3 metrics to output influxdb in 3.787101ms
2016/02/15 04:39:00 Gathered metrics, (10s interval), from 2 inputs in 617.025µs
2016/02/15 04:39:00 Wrote 3 metrics to output influxdb in 4.364542ms
2016/02/15 04:39:10 Gathered metrics, (10s interval), from 2 inputs in 517.546µs
2016/02/15 04:39:10 Wrote 3 metrics to output influxdb in 4.595062ms
2016/02/15 04:39:20 Gathered metrics, (10s interval), from 2 inputs in 542.686µs
2016/02/15 04:39:20 Wrote 3 metrics to output influxdb in 3.680957ms
2016/02/15 04:39:30 Gathered metrics, (10s interval), from 2 inputs in 526.083µs
2016/02/15 04:39:30 Wrote 3 metrics to output influxdb in 4.32718ms
2016/02/15 04:39:40 Gathered metrics, (10s interval), from 2 inputs in 504.632µs
2016/02/15 04:39:40 Wrote 3 metrics to output influxdb in 3.676524ms
2016/02/15 04:39:50 Gathered metrics, (10s interval), from 2 inputs in 640.896µs
2016/02/15 04:39:50 Wrote 3 metrics to output influxdb in 3.773236ms
2016/02/15 04:40:00 Gathered metrics, (10s interval), from 2 inputs in 491.794µs
2016/02/15 04:40:00 Wrote 3 metrics to output influxdb in 3.608919ms
2016/02/15 04:40:10 Gathered metrics, (10s interval), from 2 inputs in 571.12µs
2016/02/15 04:40:10 Wrote 3 metrics to output influxdb in 3.739155ms
2016/02/15 04:40:20 Gathered metrics, (10s interval), from 2 inputs in 505.122µs
2016/02/15 04:40:20 Wrote 3 metrics to output influxdb in 4.151489ms
由于我们运行了 InfluxDB 服务器以及 Admin 界面的端点,我们可以从 Admin 界面本身调查 telegraf
数据库(您也可以通过 InfluxDB shell 完成!)
以下是一些
cpu
测量记录
以下是一些
mem
测量记录
下一步,您可以将可视化(Chronograf)或警报(Kapacitor)连接到此 Telegraf 数据库。
结论
这结束了关于使用 InfluxDB 的 TICK 堆栈的 7 部分教程。 TICK 堆栈提供了一流的组件集,用于在时间序列数据库上构建现代且可扩展的解决方案。我们希望本教程能让您了解其潜力,并帮助您开始创建成功的应用程序。