Telegraf适配GaussDB开源开发任务心得
代码仓库
https://github.com/qixia1998/telegraf-input-gaussdb
开发过程
参考https://github.com/influxdata/telegraf/blob/master/docs/EXTERNAL_PLUGINS.md
这里开发了是一个 External 的 input plugin
External Plugin是在 Telegraf 之外构建的外部程序,可以通过execd
插件运行。与内部 Telegraf 插件相比,这些外部插件具有更大的灵活性。
- 外部插件可以用任何语言编写(内部 Telegraf 插件只能用 Go 编写)
- 外部插件可以访问不是用 Go 编写的库
- 使用开源社区无法获得的许可软件
- 可以包含较大的依赖项,否则会导致 Telegraf 臃肿
- 无需等待 Telegraf 团队发布插件并开始使用它。
- 使用shim,您可以轻松地在内部和外部使用之间转换插件
- 使用需要 CGO 支持的第三方库
编写inputs plugin的指南参考https://github.com/influxdata/telegraf/blob/master/docs/INPUTS.md 重点关注这两点
- 插件必须符合telegraf.Input接口。
- 输入插件应调用
inputs.Add
其init
函数来注册自身。
除了AddFields
函数之外,累加器还支持添加类型化指标的函数:AddGauge
、AddCounter
等。指标类型会被 InfluxDB 输出忽略,但可以用于其他输出。
对于 Go 插件,有一个Execd Go Shim,它可以轻松地将内部输入、处理器或输出插件从主 Telegraf 存储库提取到独立存储库。此 shim 允许任何人使用以下插件之一将其作为单独的应用程序构建和运行execd
:
按照外部化插件的步骤和 构建并运行插件的步骤,使用 Execd Go Shim 正确操作。
总结
Telegraf 的外部插件允许你使用外部程序或者脚本来获取数据,并将其通过标准输出(stdout)返回给 Telegraf。Telegraf 内置了 inputs.execd
插件来支持执行外部程序。对于 Go 开发的外部插件,Telegraf 提供了 Execd Go Shim,它使得将 Go 插件独立出来作为可执行程序变得更加简单。
外部插件的基本工作流程:
- 数据采集:外部插件通过执行外部命令(如查询数据库)来收集指标数据。
- 数据输出:插件将采集到的数据通过可以指定输出格式,并由 Telegraf 处理。
- 配置管理:Telegraf 配置文件中的
inputs.execd
插件配置将指定外部插件的路径和执行方式。
验证截图
验证思路
这里我们使用的是PG_STAT_ACTIVITY视图, 它显示和当前用户查询相关的信息,字段保存的是上一次执行的信息。
通过在插件中配置SQL,然后将查询字段指标通过插件添加到Telegraf进行处理,然后通过配置Telegraf的插件配置来执行,最后我们通过/metrics接口或者web UI界面查看InfluxDB写入的数据。
/metrics 接口
InfluxDB 的 Web UI
- 点赞
- 收藏
- 关注作者
评论(0)