news 2026/9/15 14:11:03

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 Execd Go Shim 把 Telegraf 插件构建为独立外部插件程序?

如何用 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”:

  1. 迁移代码到外部仓库。建议保留原有路径结构:如果插件在 Telegraf 中位于plugins/inputs/cpu,新仓库中也放在plugins/inputs/cpu。保留结构不是强制要求,但能减少导入路径改动。

  2. 复制入口文件。把仓库中的 example/cmd/main.go 复制到你项目的cmd目录下。这个文件是插件作为独立程序运行时的入口,它替你把 Shim 的调用逻辑(解析命令行参数、加载配置、运行插件)都做好了。

  3. 编辑 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是你的外部仓库路径。如果跳过这一步,插件会“什么都不做”。

  4. (可选)添加 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 接入方式的关键差异(均来自各插件 README):

  • inputs.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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 14:09:43

第三方H5页面自定义随机安全键盘:WebView注入与原生键盘叠层实战

1. 第三方H5页面里的密码框,到底藏着什么风险先还原一个真实场景。你手上有一个银行系或证券系的App,里面嵌了不少合作方的H5页面——比如贷款申请页、开户资料页、积分兑换页。这些页面是第三方团队维护的,你们拿不到源码,改不了…

作者头像 李华
网站建设 2026/9/15 14:09:42

Loop 窗口管理工具使用指南:用径向菜单快速排版 macOS 窗口

Loop 窗口管理工具使用指南:用径向菜单快速排版 macOS 窗口 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop Loop 是一款免费、开源的 macOS 窗口管理工具,适配 macOS 13 及以上系…

作者头像 李华
网站建设 2026/9/15 14:09:33

2026最新icp备案网站服务内容避坑指南

2026最新icp备案网站服务内容避坑指南 刚拿到服务器,域名也解析好了,结果在备案页面卡了三天?别急,这种“备案流程一头雾水”的焦虑,我见过太多。很多做市场推广的朋友,技术底子薄,一看到工信部那个复杂的表单就头大。其实,2026年最新的ICP备案逻辑虽然更严,但核心没变:…

作者头像 李华
网站建设 2026/9/15 14:08:59

PLC编程标准到底是什么?ISA88与IEC 61131-3详解

逛工控论坛的时候,经常能看到一类帖子,讨论PLC编程有没有标准,底下一定会有人搬出ISA88,再带上一句“全球公认”。最近有条帖子的标题很有代表性:《0913【万泉河】PLC编程标准,全球公认的标准 ISA88&#x…

作者头像 李华
网站建设 2026/9/15 14:08:57

Java对接海康SDK实现浏览器实时预览与录像回放实战

最近接手了一个园区安防平台的项目,需求本身听起来不复杂:在网页上实时预览海康摄像头画面,同时支持按时间段拉录像回放。但真正落地的过程中,涉及到的选型、取流、转码、前后端配合,问题远比想象中多。如果你也在做 j…

作者头像 李华