使用 Telegraf 将指标发送到 InfluxDB 和 Kafka

导航至

警告!请注意,此博客已超过 1 年,请查看文档中关于 Kafka 的最新信息,并访问 GitHub 上的 Kafka 插件仓库

简介

Telegraf 是一个守护进程,可以运行在任何服务器上,并从系统(cpu、内存、交换空间等)、常用服务(mysql、redis、postgres 等)或第三方 API(即将推出)收集各种指标。它采用插件驱动,用于数据收集和输出,因此易于扩展。它还使用 Go 语言编写,这意味着它是一个编译后的独立二进制文件,可以在任何系统上执行,无需外部依赖项(无需 npm、pip、gem 或其他包管理工具)。

Telegraf 最初是作为 InfluxDB 的指标收集代理而构建的,但最近已发展为将指标输出到其他数据接收器,如 KafkaDatadogOpenTSDB。这使得用户可以轻松地将 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 镜像。
  • 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 ipdocker-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 告诉我们它已加载 influxdbkafka 输出接收器,以及 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'

Influx UI

虽然默认的 InfluxDB 管理界面相当基础,但 Influx 还开发了一个名为 Chronograf 的时间序列可视化工具,它可以生成如下所示的图表

chrono

这是绘制的 cpu 繁忙百分比的查询图,如下所示,也可以使用 Chronograf 的内置查询构建器创建

SELECT "value" FROM "telegraf".."cpu_percentageBusy" WHERE time > now() - 1h AND "cpu"='cpu-total'

后续步骤

Telegraf 已经拥有大量的 可用插件一些输出选项。有关如何配置所有插件和输出的文档,可以通过运行 telegraf -sample-config 或针对单个插件运行 telegraf -usage PLUGIN_NAME 来找到。