ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Telegraf Clone 处理器插件:克隆指标并应用覆盖式修改的完整指南

2026/9/14 22:52:11 拓冰建站 浏览量
Telegraf Clone 处理器插件:克隆指标并应用覆盖式修改的完整指南 Telegraf Clone 处理器插件克隆指标并应用覆盖式修改的完整指南【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf导读Telegraf 的processors.clone插件会在每条指标通过处理器时为它创建一个完整副本原始指标保持原样透传而副本可以独立应用名称修改name_override、name_prefix、name_suffix与标签添加tags等覆盖式override修改。本文以 plugins/processors/clone/README.md 为骨架结合 clone.go 源码与 clone_test.go 测试完整讲解该插件的配置参数、底层实现原理与实战用法帮助你在一份采集数据上同时产出原始与变形两种指标视图。插件是什么Clone 处理器插件的职责非常简单清晰为流经它的每一条指标创建一份拷贝原始指标被原样保留并继续向下游传递而拷贝出的那份副本则可以应用各类指标修改器metric modifiers例如重命名、加前缀/后缀、补充标签。其典型应用场景包括在保留原始指标的同时额外产出一份镜像指标供不同输出端使用在副本上应用与原始数据不同的命名或打标策略而无需复制整套输入/输出配置为聚合或告警链路单独定制指标的标签视图。该插件从 Telegraf v1.13.0 开始提供属于transformation数据转换类别适用于全部平台all。一个需要特别留意的行为是metric filtering指标过滤选项同时作用于克隆副本和原始指标。也就是说如果你在处理器上配置了fieldinclude、tagexclude之类的过滤规则过滤会对两条指标一视同仁地生效而不是只过滤其中一条。详见 docs/CONFIGURATION.md#metric-filtering。配置详解Clone 处理器同样支持 Telegraf 处理器插件通用的全局配置项用于修改指标、标签、字段、创建别名、控制插件执行顺序等详见 docs/CONFIGURATION.md#plugins。插件自身的配置结构如下对应仓库中的 sample.conf# Apply metric modifications using override semantics. [[processors.clone]] ## All modifications on inputs and aggregators can be overridden: # name_override new_name # name_prefix new_name_prefix # name_suffix new_name_suffix ## Tags to be added (all values must be strings) # [processors.clone.tags] # additional_tag tag_value参数说明参数类型说明默认值name_overridestring将克隆副本的测量名称整体替换为指定值即覆盖原名。通常默认值为输入插件的名称。空不修改name_prefixstring在克隆副本的测量名称前追加指定前缀。空不追加name_suffixstring在克隆副本的测量名称后追加指定后缀。空不追加tagsmap[string]string添加到克隆副本上的标签集合所有值必须是字符串。空不添加需要说明的是name_override、name_prefix、name_suffix与tags同样也是 Telegraf 各类插件输入、处理器、聚合器、输出通用的指标修改器modifiers概念可参考 docs/CONFIGURATION.md#modifiers。在 Clone 插件中这些修改器被专门用于修改克隆副本从而在不影响原始指标的前提下实现覆盖式override semantics修改。与普通插件修改器的区别在常规输入插件上直接配置name_override/name_prefix/name_suffix/tags会直接修改该插件产出的指标本身而在processors.clone上配置这些项则只影响克隆出来的副本。原始指标始终以未修改的面貌继续向下游流动。这也是该插件被描述为使用覆盖语义应用指标修改的原因你可以在副本上安全地覆盖名称、追加标签而原始数据不受任何污染。源码实现一次 Copy 加两次输出Apply 处理流程从源码结构看clone.go 的实现非常简洁核心逻辑全部集中在Apply方法中type Clone struct { NameOverride string toml:name_override NamePrefix string toml:name_prefix NameSuffix string toml:name_suffix Tags map[string]string toml:tags } func (c *Clone) Apply(in ...telegraf.Metric) []telegraf.Metric { out : make([]telegraf.Metric, 0, 2*len(in)) for _, original : range in { m : original.Copy() if len(c.NameOverride) 0 { m.SetName(c.NameOverride) } if len(c.NamePrefix) 0 { m.AddPrefix(c.NamePrefix) } if len(c.NameSuffix) 0 { m.AddSuffix(c.NameSuffix) } for key, value : range c.Tags { m.AddTag(key, value) } out append(out, m) } return append(out, in...) }其处理流程可拆解为预分配输出容量make([]telegraf.Metric, 0, 2*len(in))预分配两倍于输入数量的容量因为每条输入指标最终都会产出两条副本 原始。深拷贝原始指标对每条输入调用original.Copy()得到独立副本m。按配置依次修改副本SetName整体替换名称、AddPrefix追加前缀、AddSuffix追加后缀、AddTag追加标签。副本优先输出先append(out, m)追加所有副本最后append(out, in...)把原始指标整体接在后面。因此输出顺序为所有副本在前所有原始指标在后这一点由 clone_test.go 中的各项测试用例严格验证。底层指标操作方法副本修改依赖的SetName、AddPrefix、AddSuffix、AddTag以及深拷贝Copy均实现在 metric/metric.go 中SetName(name)metric.go#L131-L133直接将测量名替换为给定值AddPrefix(prefix)metric.go#L135-L137在测量名头部拼接前缀AddSuffix(suffix)metric.go#L139-L141在测量名尾部拼接后缀AddTag(key, value)metric.go#L143-L161按 key 有序插入新标签若 key 已存在则覆盖原值这正是测试用例TestOverwritesPresentTagValues验证的行为Copy()metric.go#L251-L268对 tags 与 fields 逐个元素新建telegraf.Tag/telegraf.Field结构属于真正的深拷贝副本与原指标互不影响。由于Copy是深拷贝后续对副本的任何修改都不会回流到原始指标两条指标在时间戳、测量类型、标签与字段上各自独立可以放心地把副本投入不同的下游处理链路。插件注册clone.go末尾通过init()注册func init() { processors.Add(clone, func() telegraf.Processor { return Clone{} }) }processors.Add会将插件注册进 Telegraf 的处理器插件注册表plugins/processors这也是配置文件中[[processors.clone]]表头能被正确解析到本插件实现的原因。行为验证测试用例解读clone_test.go 从多个维度锁定了插件的正确行为可作为你理解与实际使用时的行为基准测试用例验证点TestRetainsTags未配置任何修改时克隆副本与原始指标完全一致且输出恰好两条顺序为副本在前、原始在后。TestAddTags通过Tags配置添加的新标签会出现在副本上包括空字符串值another_tag: 而原始指标保持原样。TestOverwritesPresentTagValues若Tags中配置的 key 已存在于原指标副本上该标签值被覆盖为配置值原始指标不受影响。TestOverridesNamename_override overridden时副本名称被整体替换原始指标名称保持不变。TestNamePrefix/TestNameSuffixname_prefix Pre-与name_suffix -suff分别验证前缀拼接与后缀拼接原始指标名称均不受影响。TestTracking使用metric.WithTracking包装带投递确认delivery info的指标后副本与原始指标都能在Accept()后被正确确认投递说明插件对 Telegraf 的指标追踪机制是兼容的。这些测试同时印证了克隆副本在输出列表中位于原始指标之前的输出顺序以及所有修改只作用于副本的覆盖式语义。实战示例场景一按采集源拆分两条指标流假设你希望cpu输入的数据既以原名输出一份又额外产出一份带_total后缀、并标记source mirror标签的副本[[inputs.cpu]] percpu true totalcpu false [[processors.clone]] name_suffix _total [processors.clone.tags] source mirror处理后的数据流为原始cpu指标原样输出同时新增cpu_total、携带sourcemirror标签的副本二者各自拥有独立的时间戳与字段快照。场景二副本进入专用输出端可以结合 Telegraf 的全局插件顺序配置让副本流向与原始数据不同的输出[[outputs.influxdb]] urls [http://primary:8086] [[outputs.file]] files [/tmp/mirror.out]processors.clone生成的副本与原始指标会一起进入所有匹配的输出插件。若需要对不同输出端做差异化路由可进一步结合各输出插件自身的 metric filtering如tagpass按副本特有标签进行分流。场景三组合多个克隆处理器由于处理器支持配置多个实例你可以定义多个[[processors.clone]]块每个块产生一种特定改写的副本例如一个块加前缀、另一个块打上不同的标签组合从而在一份采集数据上衍生出多种指标视图。注意事项与使用限制指标数量翻倍每条指标经处理器后都会变成两条这将直接放大下游输出带宽与存储开销。在 CPU 使用率、磁盘吞吐等高频指标上使用时需要评估副本带来的额外成本。过滤规则的双向生效处理器上的 metric filtering 对副本与原始指标同时生效若想只对某一条做过滤需要结合其他处理器或输出端的过滤能力实现。tags 的值必须是字符串配置中的tags映射要求所有值均为字符串类型非字符串值会导致配置解析失败。修改器只作用于副本name_override、name_prefix、name_suffix、tags在 clone 处理器上只改变克隆副本无法用来修改原始指标对原始指标的修改应使用其他处理器例如通用的名称/标签处理手段。执行顺序受全局排序控制与其他处理器一样clone 处理器在指标管道中的执行顺序由 Telegraf 的插件顺序配置决定多个处理器间的相对顺序会影响最终指标形态。参考资料插件说明文档plugins/processors/clone/README.md插件配置示例plugins/processors/clone/sample.conf插件源码实现plugins/processors/clone/clone.go插件测试用例plugins/processors/clone/clone_test.go指标底层操作方法metric/metric.go全局配置、指标修改器与过滤规则docs/CONFIGURATION.md【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考