
Telegraf Wavefront Serializer将 Telegraf 指标转换为 Wavefront 数据格式的完整指南【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegrafwavefront是 Telegraf 内置的序列化器serializer负责把 Telegraf 的指标格式转换为 Wavefront Data Format使任意支持data_format配置的输出插件如outputs.file、outputs.http都能向 Wavefront 或兼容系统投递数据。本文以 plugins/serializers/wavefront/README.md 为核心结合仓库源码深入讲解其配置参数、指标命名规则、字符清洗策略与源码级实现细节读完即可在真实配置中落地使用。Wavefront Serializer 是什么在 Telegraf 中序列化器负责决定一条指标在离开输出管道时以什么文本形式呈现。wavefront序列化器将 Telegraf metric 翻译为 Wavefront 的线协议wavefront data format其官方定义位置见 Wavefront Data Format 说明文档第 20 行将该格式列入标准输出格式清单。该序列化器不仅可供通用输出插件如outputs.file、outputs.http通过data_format wavefront使用还被专门的outputs.wavefront输出插件直接复用——后者在 plugins/outputs/wavefront/wavefront.go 中引入本包并调用其MetricPoint结构与Sanitize函数实现了 Wavefront API/Proxy 直连发送。因此理解本序列化器的行为也就理解了 Telegraf 到 Wavefront 数据链路的命名与清洗规则。快速上手配置在任一带data_format选项的输出插件上启用该格式即可。最简的验证方式是配合outputs.file输出到 stdout[[outputs.file]] files [stdout] ## Use Strict rules to sanitize metric and tag names from invalid characters ## When enabled forward slash (/) and comma (,) will be accepted # wavefront_use_strict false ## point tags to use as the source name for Wavefront (if none found, host will be used) # wavefront_source_override [hostname, address, agent_host, node_host] ## Data format to output. ## Each data format has its own unique set of configuration options, read ## more about them here: ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md data_format wavefront ## Users who wish their prefix paths to not be converted may set the following: ## default behavior (enabled prefix/path conversion): prod.prefix.name.metric.name ## configurable behavior (disabled prefix/path conversion): prod.prefix_name.metric_name # wavefront_disable_prefix_conversion true配置完成后启动 Telegraf即可在 stdout 看到形如cpu.user 12.000000 timestamp sourcetestHost cpucpu0的 Wavefront 格式输出。配置参数详解序列化器的全部可配置项定义在 plugins/serializers/wavefront/wavefront.go 的Serializer结构体中四个 TOML 键与源码字段一一对应配置项源码字段类型默认值作用wavefront_use_strictUseStrictboolfalse是否启用严格字符清洗规则wavefront_source_overrideSourceOverride[]string空用于确定 Wavefrontsource标签的优先候选 tag 列表wavefront_disable_prefix_conversionDisablePrefixConversionsboolfalse是否禁用指标名中下划线_到点.的路径转换prefixPrefixstring空追加在指标名最前面的前缀字符串说明prefix属于通用序列化器选项同样适用于其他格式在示例配置中未显式列出但源码与测试均支持详见下文。wavefront_use_strict严格与宽松的字符清洗Wavefront 对指标名与标签名中的非法字符有严格要求。replacers.go定义了两套替换表plugins/serializers/wavefront/replacers.go宽松模式默认UseStrictfalse将! # $ % ^ * ( ) \ [ ] { } : ; , ? / \ | 空格 等非法字符统一替换为-其中包含正斜杠/与逗号,严格模式UseStricttrue在宽松规则基础上放行/与,这两个字符在 Wavefront 中合法其余非法字符仍替换为-。源码中的Sanitize(strict, val)函数根据开关选择对应替换器replacers.go而标签值则有独立的tagValueReplacer仅替换转义为\和*替换为-不触碰其他字符。单元测试 TestUseStrict 验证了同一组含、!、/、,的标签在两种模式下的差异输出严格模式下spc!al/chars,保留为sp-c-al/chars,而宽松模式输出为sp-c-al-chars-。wavefront_source_overridesource 标签的解析优先级Wavefront 格式要求每条数据点必须携带source数据来源标识。findSourceTag的实现逻辑wavefront.go按以下优先级确定 source若指标 tag 中存在source直接使用并移除该 tag否则按wavefront_source_override列表顺序查找命中第一个存在的 tag 作为 source同时把原来的host值保存为新 tagtelegraf_host避免宿主信息丢失都不命中时回退使用hosttag 的值。随后无论哪种情况hosttag 都会从输出标签中移除wavefront.go且空值 tag 会被提前剔除。测试 TestBuildTags 覆盖了含instanceid、hostname、snmp_host等多种候选 tag 的优先级场景例如存在snmp_host且配置了 override 时输出会包含telegraf_host标签来保留原始主机名。wavefront_disable_prefix_conversion前缀路径转换开关Wavefront 使用点号.分隔指标路径。默认行为会将指标名中的下划线转换为点号pathReplacer将_替换为.见 replacers.go形成prod.prefix.name.metric.name风格的路径。若业务方希望保留原始下划线命名设置wavefront_disable_prefix_conversion true后输出变为prod.prefix_name.metric_name。该转换发生在serializeMetric中位于Sanitize清洗之后wavefront.go。指标命名与数值转换规则一条 Telegraf metric 生成多条 Wavefront 数据点Wavefront 的一条数据点对应 Telegraf 测量measurement中的单个字段。序列化时对每个字段执行以下命名逻辑wavefront.go一般字段prefixmeasurement.field例如cpu.usage_idle名为value的特殊字段直接使用prefixmeasurement省略.value后缀例如cpu。随后该名称经过Sanitize清洗与可选的路径转换成为最终的 Wavefront 指标名。测试 TestSerializeMetricFieldValue 验证了value字段的输出为cpu而 TestSerializeMetricPrefix 验证了设置Prefix: telegraf.时输出为telegraf.cpu.usage.idle。仅支持布尔与数值字段buildValuewavefront.go定义了字段类型的转换矩阵Telegraf 字段类型Wavefront 输出备注booltrue → 1.000000false → 0.000000转为数值int64/uint64转为float64统一浮点化float64原值输出保留 6 位小数string丢弃不输出也不报错返回validfalse其他类型丢弃并打印 Debug 日志记录类型、值及指标名对应测试见 TestSerializeMetricFloat、TestSerializeMetricInt 与布尔测试用例。这正是原文档Only boolean and numeric metrics will be serialized, all other types will generate an error的实现依据——字符串字段被静默跳过未知类型则打印D!级日志。输出行格式formatMetricPointwavefront.go将MetricPoint结构体渲染为文本行标准格式为metric_name value unix_timestamp sourcesource tag_keytag_value ...指标名与标签名两侧加双引号标签键在写入前同样经过Sanitize清洗标签值使用tagValueReplacer清洗时间戳为 Unix 秒m.Time().Unix()数值固定 6 位小数输出strconv.AppendFloat的f, 6格式每条数据点以换行符结尾。Serialize与SerializeBatch分别处理单条与批量指标wavefront.go内部通过可复用的buffer避免频繁分配内存并用sync.Mutex保证并发安全。完整示例沿用原文档示例输入 Telegraf 指标cpu,cpucpu0,hosttestHost user12,idle88,system0 1234567890序列化后得到三条 Wavefront 数据点cpu.user 12.000000 1234567890 sourcetestHost cpucpu0 cpu.idle 88.000000 1234567890 sourcetestHost cpucpu0 cpu.system 0.000000 1234567890 sourcetestHost cpucpu0观察要点user、idle、system三个字段各生成一条数据点指标名为cpu.fieldhosttestHost被提升为source并从标签中移除cpucpu0保留为标签数值统一为 6 位小数。与 outputs.wavefront 的关系序列化器与输出插件是两层关系本序列化器定义并导出MetricPoint结构与Sanitize函数是纯数据格式层专用输出插件 plugins/outputs/wavefront/wavefront.go 引入wavefront-sdk-go的 sender将指标构建为MetricPoint后批量发给 Wavefront API 或 Proxy并额外支持use_strict、source_override、convert_paths、truncate_tags等发送侧选项见 plugins/outputs/wavefront/README.md。若希望把 Wavefront 格式的数据发给 Wavefront 之外的目标如写入本地文件、转发到 HTTP 端点直接使用本序列化器 通用输出插件即可若目标是 Wavefront 实例本身推荐使用outputs.wavefront。注册机制与构建本序列化器通过 init 函数注册到全局序列化器注册表wavefront.go并在 plugins/serializers/all/wavefront.go 中以构建标签!custom || serializers || serializers.wavefront条件引入支持自定义构建时按需裁剪插件。源码与测试导航如需深入验证以上行为可重点查阅以下文件序列化主逻辑plugins/serializers/wavefront/wavefront.go字符清洗规则plugins/serializers/wavefront/replacers.go单元测试覆盖 source 优先级、严格模式、数值转换、前缀、批量/单条序列化与基准测试plugins/serializers/wavefront/wavefront_test.go格式注册入口plugins/serializers/all/wavefront.go直接发送至 Wavefront 的输出插件plugins/outputs/wavefront/README.md输出数据格式总览docs/DATA_FORMATS_OUTPUT.md综上wavefront序列化器通过一字段一数据点、严格清洗非法字符、source 优先级解析、仅数值化布尔与数值类型四项核心规则将 Telegraf 的通用指标模型无损映射到 Wavefront 数据格式是接入 Wavefront 观测体系时最底层、最关键的一环。【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考