如何将Telegraf聚合器插件作用范围限定于指定指标?
解决Telegraf聚合器仅作用于GNMI输入指标的配置方法
直接添加aggregators.derivative配置的话,默认会对所有输入插件采集的所有指标生效,所以必须通过过滤规则限定作用范围。
以下是两种可行的配置方式,按需选择:
方式一:通过字段名精准匹配
如果明确知道GNMI采集的目标字段名(比如if_in_bytes、if_out_bytes),直接用namepass指定这些字段:
# 你的GNMI输入配置(示例) [[inputs.gnmi]] address = "router.example.com:57400" username = "admin" password = "secret" [[inputs.gnmi.subscription]] path = "/interfaces/interface/state/counters/in-octets" name = "if_in_bytes" [[inputs.gnmi.subscription]] path = "/interfaces/interface/state/counters/out-octets" name = "if_out_bytes" # 仅对指定字段计算速率的聚合器配置 [[aggregators.derivative]] namepass = ["if_in_bytes", "if_out_bytes"] unit = "s" # 速率单位为每秒,输出字段会自动添加"_rate"后缀 ignore_negative = true # 忽略计数器回绕产生的负值,可选开启
方式二:通过标签匹配GNMI来源
Telegraf默认会给所有指标添加input标签,值为对应输入插件的名称(比如GNMI插件的input标签值是gnmi),可以利用这个标签过滤:
[[aggregators.derivative]] # 仅处理来自GNMI输入插件的指标 [aggregators.derivative.tagpass] input = ["gnmi"] unit = "s" ignore_negative = true # 若需进一步限定字段,可叠加namepass namepass = ["if_in_bytes", "if_out_bytes"]
如果你的GNMI指标没有自动生成input标签,也可以手动给GNMI插件添加自定义标签:
[[inputs.gnmi]] # 其他原有配置... tags = { data_source = "gnmi" } # 添加自定义标签
然后在聚合器里匹配这个自定义标签:
[aggregators.derivative.tagpass] data_source = ["gnmi"]
配置逻辑说明
Telegraf的执行流程是:输入插件采集数据 → 聚合器处理 → 处理器(可选) → 输出插件写入,只要聚合器的过滤规则正确,就只会作用于符合条件的GNMI指标,不会影响其他输入插件的数据。
内容的提问来源于stack exchange,提问作者godot
相关产品推荐
相关产品推荐

