
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。
本节我们分享一个基于Golang实现的用于收集、处理、聚合和编写指标的代理telegraf

image.png
它有四种不同类型的插件:
Telegraf与 Go具有相同的最低要求:
inputs.Add它们的init函数来注册自己。请参阅下面的快速示例。github.com/influxdata/telegraf/plugins/inputs/all/all.go文件中。sample.conf其中包含 TOML 格式的插件示例配置。请查阅示例配置页面以获取最新的样式指南。README.md文件都应该通过在表单中sample.conf指定一个部分来将文件包含在描述配置的部分中。然后将指定的文件自动注入自述文件中。toml``toml @sample.conf //go:generate ../../../tools/readme_config_includer/generator
package simple
import (
_ "embed"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/plugins/inputs"
)
// DO NOT REMOVE THE NEXT TWO LINES! This is required to embed the sampleConfig data.
//go:embed sample.conf
var sampleConfig string
type Simple struct {
Ok bool `toml:"ok"`
Log telegraf.Logger `toml:"-"`
}
func (*Simple) SampleConfig() string {
return sampleConfig
}
// Init用于设置和验证配置。
func (s *Simple) Init() error {
return nil
}
func (s *Simple) Gather(acc telegraf.Accumulator) error {
if s.Ok {
acc.AddFields("state", map[string]interface{}{"value": "pretty good"}, nil)
} else {
acc.AddFields("state", map[string]interface{}{"value": "not great"}, nil)
}
return nil
}
func init() {
inputs.Add("simple", func() telegraf.Input { return &Simple{} })
}更多详细文档可以参考官方提供的文档说明
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。