Telegraf 更新 - 1.3 及如何编写插件
作者:Jack Zampolin / 用例, 产品
2017 年 6 月 9 日
导航至
我们最近发布了 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)
Gather 函数在配置文件中设置的间隔([agent]interval
)被调用。每隔“interval”,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
如果您有一个 RabbitMQ 实例,您想在数据传输到 InfluxDB 的过程中路由数据,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, @lpic10, @lrsmith, @martinseener, @nevins-b, @nfirvine, @njwhite, @pdcleyn, @phemmer, @PierreF, @ririsoft, @rossmcdonald, @sebito91, @seuf, @sparrc, @ssorathia, @tjmcs, @vlasad, @vtg
有用的资源
我们有许多很棒的资源可以帮助您开始使用 Telegraf,以及关于如何构建您自己的插件的信息。