Telegraf 更新 - 1.3 版本和如何编写插件

导航到

Telegraf Tiger

我们最近发布了 Telegraf 1.3 版本

拥有获取一些自定义指标的 Python 脚本吗?使用 exec 插件。拥有包含指标的日志文件?使用 logparser 插件。需要测量 API 响应时间?ping 插件为您保驾护航。Telegraf 拥有超过 300 个不同贡献者和 100 多个插件,是您需要的数据瑞士军刀。

是什么让 Telegraf 如此活跃的项目?插件开发的便捷性。以下我将简要描述该架构,并展示如何轻松为 Telegraf 贡献。

Telegraf 架构

Telegraf 是一个配置驱动的代理。每个输入插件都满足一个 简单的 golang 接口

type Input interface {
  // SampleConfig returns the default configuration of the Input
  SampleConfig() string
  // Description returns a one-sentence description on the Input
  Description() string
  // Gather takes in an accumulator and adds the metrics that the Input
  // gathers. This is called every "interval"
  Gather(Accumulator) error
}

在生成配置文件时使用 SampleConfig()Description() 函数。真正的魔法发生在 Gather() 函数中。传递给 Accumulator 的内容由所有插件共享。它从插件获取单个指标表示,并将其传递给 Telegraf

Accumulator.AddFields(measurement, fields, tags, time)

在配置文件中设置的间隔时间内([agent]interval),Gather 函数会被调用。每隔一个间隔,Telegraf 调用 Gather 函数为其每个插件,并将所有 AddFields 调用的结果存储在指标缓冲区中。

输出接口比输入接口稍微复杂一些,因为它需要处理数据库连接和写入。

type Output interface {
  // Connect to the Output
  Connect() error
  // Close any connections to the Output
  Close() error
  // Description returns a one-sentence description on the Output
  Description() string
  // SampleConfig returns the default configuration of the Output
  SampleConfig() string
  // Write takes in group of points to be written to the Output
  Write(metrics []Metric) error
}

每个配置的输出插件会在刷新间隔([agent]flush_interval)时通过 Write() 调用清除指标缓冲区。Connect() 和 Close() 帮助管理指标输出的连接,并由 Telegraf 在启动和关闭时调用。

这个简单而强大的架构非常易于扩展,并使得 Telegraf 易于贡献。

配置生成

上述架构允许的一个酷特性是配置文件生成,这使得 Telegraf 自动文档化。我发现它在启动新项目监控或查看我可以从现有系统中获取哪些指标方面特别有用。

例如,如果您正在尝试查看 Telegraf 可以从您的数据库中生成哪些类型的指标,您可能会生成以下配置

$ telegraf -sample-config -input-filter elasticsearch:mysql:mongodb -output-filter influxdb

如果您有一个想要在前往InfluxDB的过程中路由数据的RabbitMQ实例,Telegraf也能让这变得非常简单。

$ telegraf -sample-config -input-filter elasticsearch:mysql:mongodb -output-filter amqp
$ telegraf -sample-config -input-filter amqp_consumer -output-filter influxdb

我本可以继续介绍处理器和聚合器插件、队列集成、输入和输出服务插件,以及无数让Telegraf变得酷炫的特性,但我会将这些主题留到另一天再谈!

贡献者

我也想借此机会感谢1.3版本中的贡献者:@ablagoev, @AntoineAugusti, @bullshit, @calerogers, @cosmopetrich, @d-ulyanov, @danielnelson, @ddryden, @djjorjinho, @einhirn, @francois2metz, @gioxchopper, @j-vizcaino, @jackzampolin, @JamesClonk, @jeremydenoun, @johnrengelman, @ldep30, @lpic10, @lrsmith, @martinseener, @nevins-b, @nfirvine, @njwhite, @pdcleyn, @phemmer, @PierreF, @ririsoft, @rossmcdonald, @sebito91, @seuf, @sparrc, @ssorathia, @tjmcs, @vlasad, @vtg

有帮助的资源

我们提供了一些优秀的资源,帮助您开始使用Telegraf,以及如何构建您自己的插件的相关信息。