尧图精选

如何用 Execd Go Shim 把 Telegraf 插件构建为独立外部插件程序?

🕒 发布时间:2026/9/15 14:11:05 📁 来源:尧图网络
如何用 Execd Go Shim 把 Telegraf 插件构建为独立外部插件程序【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf你写好了一个 Telegraf 的 Go 插件input、processor 或 output但不想等 Telegraf 官方合入发布或者插件依赖了不便放进主仓库的第三方库和大体积依赖。Telegraf 仓库自带的 Execd Go Shim 就是为这个场景设计的它让你把一个内部插件从 Telegraf 代码中“抽”到一个独立仓库构建成一个可单独运行的二进制再由 Telegraf 的execd插件之一inputs.execd、processors.execd、outputs.execd以外部程序方式拉起它。整个过程不需要修改 Telegraf 本体。Shim 的作用与适用对象docs/EXTERNAL_PLUGINS.md 对执行插件的定位是外部程序在 Telegraf 之外构建通过execd插件运行。相比内置插件它允许使用 Go 之外的语言、访问非 Go 编写的库、引入闭源许可的依赖以及承载会显著增大 Telegraf 体积的依赖。Execd Go Shim 面向的是 Go 插件它把内部 input、processor 或 output 插件变成可以单独构建、单独运行的程序。Shim 本身只负责运行一个插件——文档明确建议每个仓库只放一个插件因为 Shim 并不支持同时运行多个插件。第一步把插件外部化到独立仓库这一步的操作细节见 plugins/common/shim/README.md 的 “Steps to externalize a plugin”迁移代码到外部仓库。建议保留原有路径结构如果插件在 Telegraf 中位于plugins/inputs/cpu新仓库中也放在plugins/inputs/cpu。保留结构不是强制要求但能减少导入路径改动。复制入口文件。把仓库中的 example/cmd/main.go 复制到你项目的cmd目录下。这个文件是插件作为独立程序运行时的入口它替你把 Shim 的调用逻辑解析命令行参数、加载配置、运行插件都做好了。编辑 main.go 导入你的插件。在 Telegraf 内部这一步通常由all.go文件完成外部化后直接写在 main.go 顶部。示例文件里对应的位置是这样的// TODO: import your plugins _ github.com/influxdata/tail // Example external package for showing where you can import your plugins github.com/influxdata/telegraf/plugins/common/shim把github.com/influxdata/tail换成你插件的导入路径例如文档给出的示例写法_ github.com/me/my-plugin-telegraf/plugins/inputs/cpu其中me/my-plugin-telegraf是你的外部仓库路径。如果跳过这一步插件会“什么都不做”。可选添加 plugin.conf 保存插件专属配置。仓库中给出的 plugin.conf 示例是[[inputs.my_plugin_name]] value_name value注意文档强调这个配置文件必须与 Telegraf 的其余配置分开存放不能放在 Telegraf 会批量加载所有配置的共享目录里。如果 Telegraf 直接读取了这个文件它无法判断配置对应哪个插件Telegraf 实际上是通过 execd 配置块来找到你的插件的。Shim 入口还暴露了命令行参数见 main.go-config指定插件配置路径-poll_interval控制发指标频率-poll_interval_disabled设为 true 时禁用轮询适用于你自己控制采集节奏的插件。第二步构建并独立运行验证构建命令见 shim README “Steps to build and run your plugin”以 rand 项目为例go build -o rand cmd/main.go把二进制名换成你的插件名即可。构建完成后分两种情况做独立验证input 插件直接运行二进制例如./rand -config plugin.conf。根据轮询设置以及你的插件是 service 型还是轮询采集型数据可能立刻出现、可能需要按一次回车、或需要等待一个轮询周期指标会写到STDOUT按 Ctrl-C 结束测试。processor 或 output 插件手动运行同样可行但你需要从STDIN喂入合法的指标数据来验证其行为。文档把这称为接入 Telegraf 之前很有价值的调试手段。第三步让 Telegraf 通过 execd 启动插件以 input 为例shim README 给出的 Telegraf 配置是[[inputs.execd]] command [/path/to/rand, -config, /path/to/plugin.conf] signal none两处/path/to/...需要替换为你实际的二进制路径和 plugin.conf 路径。command要求程序和每个参数各占一个字符串。三种 execd 接入方式的关键差异均来自各插件 READMEinputs.execd把外部程序作为长期运行的守护进程拉起从stdout按指定数据格式默认influx读取指标进程stderr会转发到 Telegraf 日志默认记为 error也可以用I!、W!等前缀控制日志级别。signal决定每次采集周期如何触发进程none推荐给 service 型 input进程自行输出指标STDIN推荐给轮询型 gather input向 STDIN 发送换行触发采集。processors.execd从stdin读入指标、从stdout读回处理后的指标。目前 data_format 只支持influx且带 tracking 的指标在进入外部进程后即被标记为“delivered”。outputs.execd通过stdin把指标写入外部守护程序要求 Telegraf 1.15.0 及以上。注意它是 fire-and-forget 模型指标写入stdin管道即视为写成功若外部程序处理失败指标可能丢失不会触发 Telegraf 的重试机制。限制与后续步骤Shim 一次只运行一个插件多插件需求不要塞进同一个仓库。plugin.conf 绝不能放进 Telegraf 的共享配置目录否则会脱离 execd 的加载路径。用 outputs.execd 接入时文档明确提示该模型不提供投递保证对可靠投递有要求的场景建议改用内置 output 插件或在外部插件内自行实现确认机制。如果你的插件面向公开使用docs/EXTERNAL_PLUGINS.md 建议的收尾动作是把插件发布到独立仓库并在仓库主页写明如何用对应的 execd 插件运行它然后向 Telegraf 仓库提 PR 把插件加入 EXTERNAL_PLUGINS.md 列表提交内容包括插件名、仓库链接和简短描述。【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →