使用 Telegraf 将指标发送到 InfluxDB 和 Kafka
作者:Cameron Sparr / 产品
2015 年 9 月 17 日
导航至
简介
Telegraf 是一个守护进程,可以运行在任何服务器上,并从系统(cpu、内存、交换空间等)、常用服务(mysql、redis、postgres 等)或第三方 API(即将推出)收集各种指标。它采用插件驱动,用于数据收集和输出,因此易于扩展。它还使用 Go 语言编写,这意味着它是一个编译后的独立二进制文件,可以在任何系统上执行,无需外部依赖项(无需 npm、pip、gem 或其他包管理工具)。
Telegraf 最初是作为 InfluxDB 的指标收集代理而构建的,但最近已发展为将指标输出到其他数据接收器,如 Kafka、Datadog 和 OpenTSDB。这使得用户可以轻松地将 InfluxDB 集成到他们现有的监控和日志记录堆栈中,并继续使用他们现有的工具来消费 Kafka 或 Datadog 数据。
在本指南中,我们将介绍
- 如何安装和配置 Telegraf 以收集 CPU 数据
- 运行 Telegraf
- 在 Kafka 中查看 Telegraf 数据
- 在 InfluxDB 管理界面和 Chronograf 中查看 Telegraf 数据
本指南的 Kafka 部分是完全可选的。如果您只想将数据输出到 InfluxDB,只需跳过所有关于 Kafka 的步骤,并从提供的示例配置中删除 outputs.kafka
部分。
先决条件
开始之前,您需要以下内容
- InfluxDB 服务器
- 如果您还没有 InfluxDB 服务器,您可以从 Docker 容器中运行数据库。我使用 influxdb 仓库中的
build-docker.sh
脚本构建我的 Influxdb Docker 镜像。
- 如果您还没有 InfluxDB 服务器,您可以从 Docker 容器中运行数据库。我使用 influxdb 仓库中的
- Kafka Broker
- 在本演示中,我将在 Docker 容器中运行 Kafka broker,使用 spotify/kafka 发行版。假设您已安装 Docker,您可以这样做
docker run -d -p 2181:2181 -p 9092:9092 \ --env ADVERTISED_HOST=localhost \ --env ADVERTISED_PORT=9092 spotify/kafka
注意:本指南也适用于 OSX,只需将所有 localhost
替换为您的 boot2docker ip
或 docker-machine ip <name>
,并通过 Homebrew 安装 Telegraf。
步骤 1 – 安装 Telegraf
Telegraf 可以通过 github 页面上提供的 .deb 或 .rpm 包安装,但对于这个简化的演示,我将只使用一个独立二进制文件
wget http://get.influxdb.org/telegraf/telegraf_linux_amd64_0.1.8.tar.gz tar -xvf telegraf_linux_amd64_0.1.8.tar.gz mv ./telegraf_linux_amd64 /usr/local/bin/telegraf
步骤 2 – 配置 Telegraf
Telegraf 提供了一个命令来生成包含所有插件和输出的示例配置:telegraf -sample-config
,但为了本指南的目的,我们将使用一个更简单的配置文件,将下面找到的配置粘贴到一个名为 ~/telegraf.toml
的文件中。如果需要,您需要编辑两个指示的行以匹配您的环境。
[tags] dc = "us-east-1" # OUTPUTS [outputs] [outputs.influxdb] # The full HTTP endpoint URL for your InfluxDB instance url = "https://:8086" # EDIT THIS LINE # The target database for metrics. This database must already exist database = "telegraf" # required. [outputs.kafka] # URLs of kafka brokers brokers = ["localhost:9092"] # EDIT THIS LINE # Kafka topic for producer messages topic = "telegraf" # PLUGINS # Read metrics about cpu usage [cpu] # Whether to report per-cpu stats or not percpu = false # Whether to report total system cpu stats or not totalcpu = true
步骤 3 – 运行 Telegraf
现在我们可以使用 -test
标志运行 Telegraf,将来自 cpu
插件的一组指标输出到 stdout。一个需要注意的是,这还不包括 CPU 使用率百分比,因为这需要进行两次测量。
$ telegraf -config ~/telegraf.toml -test * Plugin: cpu > [cpu="cpu-total"] cpu_user value=5.75 > [cpu="cpu-total"] cpu_system value=4.59 > [cpu="cpu-total"] cpu_idle value=11226.01 [...] > [cpu="cpu-total"] cpu_busy value=12.15
我们现在准备在我们的系统上运行 Telegraf,它将开始将其测量结果发送到配置的 InfluxDB 服务器和 Kafka brokers,使用自动 host
标签和 toml 文件中配置的任何标签
$ telegraf -config telegraf.toml 2015/09/01 22:01:41 Starting Telegraf (version 0.1.8) 2015/09/01 22:01:41 Loaded outputs: influxdb kafka 2015/09/01 22:01:41 Loaded plugins: cpu 2015/09/01 22:01:41 Tags enabled: dc=us-east-1 host=myserver
正如我们所见,Telegraf 告诉我们它已加载 influxdb
和 kafka
输出接收器,以及 cpu
收集插件。
步骤 4 – 查看 Kafka 数据
我们现在可以使用 Kafka 控制台消费者 来验证我们的 Kafka broker 是否正在接收来自 Telegraf 的每个 InfluxDB 行协议消息的消息。
要运行控制台消费者,请 下载 Kafka 源代码:
wget http://apache.arvixe.com//kafka/0.8.2.0/kafka_2.10-0.8.2.0.tgz tar -zxf kafka_2.10-0.8.2.0.tgz cd kafka_2.10-0.8.2.0/
然后运行(如果需要,请将 localhost
替换为您的 Kafka broker 地址)
$ ./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic telegraf --from-beginning [...] cpu_percentageUser,cpu=cpu-total,dc=us-east-1,host=myserver value=0.4024144869214442 cpu_percentageSystem,cpu=cpu-total,dc=us-east-1,host=myserver value=0.8048289738428706 cpu_percentageIdle,cpu=cpu-total,dc=us-east-1,host=myserver value=98.6921529174951 cpu_percentageNice,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0 cpu_percentageIowait,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0 cpu_percentageIrq,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0 cpu_percentageSoftirq,cpu=cpu-total,dc=us-east-1,host=myserver value=0.10060362173035882 cpu_percentageSteal,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0 cpu_percentageGuest,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0 cpu_percentageGuestNice,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0 cpu_percentageStolen,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0 cpu_percentageBusy,cpu=cpu-total,dc=us-east-1,host=myserver value=1.3078470824946893
如上所示,Telegraf 发送到我们数据库的每个 InfluxDB 行协议 消息也被记录到我们的 Kafka broker 中,允许我们从与 Kafka 交互的任意工具中使用行协议。
步骤 5 – 在 Web UI 和 Chronograf 中查看 InfluxDB 数据
现在,如果我们导航到我们的 InfluxDB Web 界面 https://:8083,我们可以查询我们的 cpu_percentageBusy
数据,并看到 Telegraf 正在输出正确的测量结果。
SELECT * FROM cpu_percentageBusy WHERE host='myserver' AND dc='us-east-1'
虽然默认的 InfluxDB 管理界面相当基础,但 Influx 还开发了一个名为 Chronograf 的时间序列可视化工具,它可以生成如下所示的图表
这是绘制的 cpu 繁忙百分比的查询图,如下所示,也可以使用 Chronograf 的内置查询构建器创建
SELECT "value" FROM "telegraf".."cpu_percentageBusy" WHERE time > now() - 1h AND "cpu"='cpu-total'
后续步骤
Telegraf 已经拥有大量的 可用插件 和 一些输出选项。有关如何配置所有插件和输出的文档,可以通过运行 telegraf -sample-config
或针对单个插件运行 telegraf -usage PLUGIN_NAME
来找到。