宣布 Telegraf 0.10.0 版本发布
作者:Cameron Sparr / 产品
2016年1月12日
导航至
今天我们正式发布 Telegraf 0.10.0 版本。从现在起,同一主版本下的所有 InfluxData 产品将保证相互兼容,因此 Telegraf 将升级到 0.10.x,以与即将发布的 0.10.0 版 InfluxDB 保持一致(1月下旬)。
0.10.0 版本带来了许多新变化和改进,其中许多是破坏性更改。以下是进行破坏性发布的原因,以下将详细介绍。请参考本博客文章末尾的指南,了解如何从 Telegraf 0.2.x 迁移到 0.10.0。
字段代替测量值
Telegraf之前几乎将收集到的每个指标都放入一个单独的测量值中,称为value
字段,例如:cpu_usage_idle value=100
,cpu_usage_guest value=0
。从现在起,Telegraf(大部分情况下)将所有插件放入一个单独的测量值中,每个指标一个字段,例如:cpu usage_guest=0,usage_idle=100
。这有很多好处,其中之一是用户可以轻松地对插件内部不同指标之间的关系进行数学查询。例如,使用内存插件,您可以这样计算总内存缓存的百分比:
SELECT buffered/total FROM mem
另一个显著的优点是这将减少每个Telegraf实例产生的网络流量。原因主要是现在每个插件只发送一次时间戳和标签,而不是每次测量只发送一次。您看到的减少将取决于您使用的插件,但大多数用户可以预期至少减少50%的网络流量。
重命名插件 -> 输入
Telegraf最初是一个从插件收集指标并将它们写入InfluxDB的代理。自然,输入插件只是称为“插件”。然而,由于我们现在除了“输入插件”外还有“输出插件”,Telegraf这个名字已经不再适用。未来我们还将有“聚合插件”和“过滤器插件”的计划。因此,我们将“插件”重命名为“输入”,并重构它们在存储库中的位置。输入和输出现在都位于根存储库中的plugins/目录下。这也意味着每个输入的配置已经从[[plugins.cpu]]
更改为[[inputs.cpu]]
。
输入配置
对于0.10.0,有一些新的输入配置选项
- name_override:覆盖测量值的基准名称。(默认为插件名称)。
- name_prefix:指定要附加到测量名称的前缀。
- name_suffix:指定要附加到测量名称的后缀。
- tags:要应用于特定输入测量的标签映射。
示例
此插件将发出名为cpu_total
的测量值,而不是仅发出cpu
[[inputs.cpu]]
name_suffix = "_total"
percpu = false
totalcpu = true
这将发出名为foobar
的测量值,而不是cpu
[[inputs.cpu]]
name_override = "foobar"
percpu = false
totalcpu = true
此插件将发出具有两个额外标签的测量值:tag1=foo
和tag2=bar
[[inputs.cpu]]
percpu = false
totalcpu = true
[inputs.cpu.tags]
tag1 = "foo"
tag2 = "bar"
插件并行化
在过去9个月中,Telegraf增加了很多新的功能,其中一些功能并没有真正适合Telegraf的结构和组织方式。随着时间的推移,我们越来越清楚,我们需要为同一插件的多个实例创建一个运行途径。
许多贡献者通过设置内部配置列表和线程来解决这个问题。以exec插件为例,它最初是这样配置的
# telegraf.conf
[inputs.exec]
# specify commands via an array of tables
[[inputs.exec.commands]]
# the command to run
command = "/usr/bin/mycollector --foo=bar"
# name of the command (used as a prefix for measurements)
name = "mycollector"
# Only run this command if it has been at least this many
# seconds since it last ran
interval = 10
[[inputs.exec.commands]]
command = "/usr/bin/othercollector"
name = "othercollector"
interval = 15
这是一个好的解决方案,允许exec
插件的用户指定要执行的多台二进制文件。但这里有几个问题。由于每个exec.command
都在插件内部定义,它无法访问Telegraf的一般插件配置选项。您上面看到的interval
参数是针对exec
插件特定实现的自定义实现。另一个问题是,它要求插件编写者内部处理线程和错误,而这些功能已经内置到Telegraf代理中。
因此,从现在起,这种内部线程已经大量从使用它的输入中删除。相反,用户现在可以定义输入列表,允许上述配置更改为
# telegraf.conf
[[inputs.exec]]
# the command to run
command = "/usr/bin/mycollector --foo=bar"
# name_prefix is a new parameter in 0.10.0 available to all inputs
name_prefix = "mycollector_"
# This is the general interval parameter available to all inputs.
interval = "10s"
[[inputs.exec]]
command = "/usr/bin/othercollector"
name_prefix = "othercollector_"
interval = "15s"
遗憾的是,这也意味着使用这些输入的用户需要重新编写他们的配置才能与Telegraf 0.10.0兼容。使用telegraf -sample-config
查看您特定输入的新配置示例。
以下输入受到此更改的影响
- exec
- httpjson
- jolokia
- postgresql
- procstat
- rabbitmq
- twemproxy
Linux软件包从`/opt`目录移出
应广大用户的要求,我们将停止使用 Telegraf(我们之前已经对 InfluxDB 和 Kapacitor 做过这样处理)的 opt
目录。
以下是 Linux 软件包更改的摘要:
- 二进制文件现在位于 `/usr/bin/`
- 配置文件现在位于 `/etc/telegraf`
- 对 `init.sh` 脚本进行了一些修复和更新
- 对 `telegraf.service` 单元文件进行了小的更新,以纠正变量使用错误
- 添加了 `post-install.sh` 和 `pre-install.sh` 来处理升级和其他维护工作
从 Telegraf 0.2.x 迁移
配置文件
如果您目前使用的是 Telegraf 0.2.x,您应该先安装版本 0.10.0 并生成一个新的配置文件
$ telegraf -sample-config > /tmp/test.0.10.0.conf
在您选择的编辑器中打开文件,并找到您希望配置的插件。检查旧配置和新配置之间的差异,并将新配置合并到您的配置中。请确保将 plugin
重命名为 input
。大多数插件将具有相同的配置选项,但有一些会有实质性的不同。以下插件的配置有实质性不同。
- exec
- httpjson
- jolokia
- postgresql
- procstat
- rabbitmq
- twemproxy
如果您需要配置这些插件的额外帮助,请参阅上面的插件并行化部分,并查看 变更日志。
字段而非度量
当您开始使用 Telegraf 0.10.0 时,您会注意到您之前的度量将不再获得新的指标。这是因为几乎所有插件都已更改为在单个度量上报告多个字段作为指标。
为了了解变更,尝试在两个版本中都以测试模式运行 telegraf
# Telegraf 0.2.x
$ telegraf -config /etc/opt/telegraf/telegraf.conf -test
# Telegraf 0.10.0
$ telegraf -config /etc/telegraf/telegraf.conf -test
并比较输出,您应该看到度量减少但字段增多。例如,mem
插件过去会将所有指标作为它们自己的度量报告(即,mem_free
,mem_used
,mem_buffered
)。所以从 influxdb 查询您的缓冲内存将看起来像这样
# Telegraf 0.2.x
SELECT value FROM mem_buffered
从 Telegraf 0.10.0 开始,插件将报告一个名为 mem
的单个度量,并为每个指标提供字段。所以从 influxdb 查询您的缓冲内存现在看起来像这样
# Telegraf 0.10.0
SELECT buffered FROM mem
您需要在您的 InfluxDB 仪器和客户端中更改这些查询。有关字段、度量和标签之间差异的更多信息,请参阅 文档。
其他变更
查看 变更日志 了解所有变更的概述。