ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Telegraf Mock 输入插件:用正弦波、随机数与步进算法生成可复现的测试指标数据

Telegraf Mock 输入插件:用正弦波、随机数与步进算法生成可复现的测试指标数据 Telegraf Mock 输入插件用正弦波、随机数与步进算法生成可复现的测试指标数据【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf导读mock是 Telegraf 官方提供的一个测试专用输入插件自 v1.22.0 起内置它不连接任何真实系统而是基于正弦波、随机数、常数、步进与股票价格模拟等五种算法按你配置的字段名、标签与测量名measurement持续产出模拟指标。它的典型应用场景包括验证 processor/aggregator 的过滤、改名、聚合逻辑测试 output 插件的写入链路以及为 dashboard 演示和性能压测提供稳定可控的数据源。读完本文你将掌握mock插件的全部配置参数、五种算法的输出特性与底层实现公式以及如何用它的测试用例快速验证自己的配置。插件简介与适用场景根据官方文档 README.md 的定义该插件基于不同算法如正弦波函数、随机数等生成 mock 指标并使用配置的名称与标签这些指标在测试例如测试 processor或需要随机数据的场景下非常有用。从源码 mock.go 可以看到插件通过inputs.Add(mock, ...)注册属于标准的 Telegraf 输入插件可运行于所有平台 all并被标记为testing类别。典型适用场景包括Processor / Aggregator 逻辑验证在真实的[[processors.*]]链路上注入 mock 数据验证 tag 过滤、字段计算、drop/rename 等行为是否符合预期Output 链路联调在无真实采集源的情况下验证 InfluxDB、Kafka、文件等 output 的写入与序列化是否正确Dashboard 与告警演示为监控大盘、告警规则提供持续跳动的仿真数据性能与容量测试以可控的字段数量与类型构造高写入负载。快速开始最小可用配置mock插件的配置要求非常宽松官方文档明确只有两个必要条件设置metric_name指标名至少定义一个数据字段生成算法。一个最简配置如下保存为mock-test.conf[[inputs.mock]] metric_name mock [[inputs.mock.constant]] name constant value hello运行验证telegraf --config mock-test.conf --test其中--test标志会让 Telegraf 在收集一次数据后立即退出并打印输出非常适合快速验证配置效果。配置参数详解以下为官方 sample.conf 的完整示例五个字段生成器全部列出# Generate metrics for test and demonstration purposes [[inputs.mock]] ## Set the metric name to use for reporting metric_name mock ## Optional string key-value pairs of tags to add to all metrics # [inputs.mock.tags] # key value ## One or more mock data fields *must* be defined. # [[inputs.mock.constant]] # name constant # value value_of_any_type # [[inputs.mock.random]] # name rand # min 1.0 # max 6.0 # [[inputs.mock.sine_wave]] # name wave # amplitude 1.0 # period 0.5 # phase 20.0 # base_line 0.0 # [[inputs.mock.step]] # name plus_one # start 0.0 # step 1.0 # [[inputs.mock.stock]] # name abc # price 50.00 # volatility 0.2对应源码中的结构体定义mock.go可以验证顶层配置仅包含六个 TOML 字段配置项类型说明默认值metric_namestring输出指标measurement的名称mock示例值非强制默认tagsmap[string]string附加到每条指标上的标签键值对无constant数组常数类型字段生成器无random数组随机数类型字段生成器无sine_wave数组正弦波类型字段生成器无step数组步进类型字段生成器无stock数组股票价格模拟类型字段生成器无各生成器的子参数[[inputs.mock.constant]]name字段名value字段值源码中其类型为interface{}mock.go支持 string、float、int、bool 四种类型。[[inputs.mock.random]]name字段名min/max随机数下界与上界float64官方文档说明结果闭区间包含 min 与 max。[[inputs.mock.sine_wave]]name字段名amplitude振幅period周期系数phase相位偏移base_line基线纵轴偏移。[[inputs.mock.step]]name字段名start起始值step每个采集周期增加的步长支持负值。注意min/max两个旧参数已被弃用deprecated 于 1.28.2计划 1.35.0 移除应改用start/step。[[inputs.mock.stock]]name字段名price起始价格volatility波动率0~1 之间的比例系数。补充说明step的min/max废弃字段仍通过 Init() 中的向后兼容逻辑生效——若配置了min而未配置start则start自动取min的值同理max会回填到step。升级配置时建议直接使用新参数。全局配置选项与所有插件一致mock也支持 Telegraf 的全局配置选项[global_tags]、name_prefix、name_suffix、tags、pass/drop过滤、interval、precision等可用于统一修饰指标、创建别名与调整插件执行顺序详见 docs/CONFIGURATION.md。这意味着你可以在不修改插件本身的前提下通过name_prefix为 mock 指标统一添加前缀或通过pass/drop字段过滤只保留需要的字段。五种数据生成算法的源码级剖析mock的全部生成逻辑集中在 mock.go每次采集Gather都会依次调用四个生成器最后统一通过acc.AddFields(m.MetricName, fields, tags)写入指标。1.constant常数for _, c : range m.Constant { fields[c.Name] c.Value }实现最简单直接把配置的valuestring/float/int/bool作为字段写入不随时间变化。适合用于标记固定属性或构造必须存在某字段的断言场景。2.random随机数fields[random.Name] random.Min m.rand.Float64()*(random.Max-random.Min)使用 Go 标准库math/rand随机源在 Init() 中由time.Now().UnixNano()种子初始化。由于Float64()返回[0, 1)区间因此生成结果位于[min, max)官方文档将其描述为包含 min 与 max 的闭区间实际更准确地说是最小值可达、最大值趋近但不包含测试用例中按1.0 v 6.0断言。随机数是每次采集独立取值的不跨周期累积。3.sine_wave正弦波fields[field.Name] math.Sin((float64(m.counter)field.Phase)*field.Period*math.Pi)*field.Amplitude field.BaseLine这是最直观体现周期 相位的生成器公式为value sin((t phase) × period × π) × amplitude base_line其中t是内部计数器m.counter每完成一次采集自增 1见 Gather()因此波形的横轴是采集次数而非真实时间——若采集间隔为 10s一个完整周期的实际耗时由period与间隔共同决定。调节base_line可将波形整体抬升例如从 0 平移到 2这在测试围绕某个基线波动的告警规则时非常实用。4.step步进if m.counter 0 { step.latest step.Start } else { step.latest step.Step } fields[step.Name] step.latest第一次采集输出start值之后每个采集周期累加一次step。步长可为负值例如step -1.0产生递减序列适合模拟计数器递增、磁盘空间递减等单调变化。该字段在插件内部以latest暂存属于有状态生成器。5.stock股票价格模拟noise : 2 * (m.rand.Float64() - 0.5) stock.latest stock.latest (stock.latest * stock.Volatility * noise) if stock.latest 1.0 { stock.latest 1.0 }首次采集以price作为起始价之后每周期在上一价格基础上叠加一个比例噪声噪声项noise ∈ (-1, 1)波动幅度为latest × volatility × noise。源码还做了下限保护价格最低被钳制在1.0避免价格跌到零以下产生无意义的数据。相比纯随机数该算法呈现出围绕起点随机游走的走势更适合模拟金融或资源使用类指标的演进过程。生成指标与示例输出官方文档指出生成的指标完全由用户自己的配置与设置决定——测量名、字段集合与标签均来自配置插件不附加任何内置字段或系统标签。文档给出的全算法示例输出包含building5A、siteFTC两个标签为mock_sensors,building5A,siteFTC random4.875966794516125,abc50,wave0,plus_one0 1632170840000000000 mock_sensors,building5A,siteFTC random5.738651873834452,abc45.095549448434774,wave5.877852522924732,plus_one1 1632170850000000000 mock_sensors,building5A,siteFTC random1.0429328917205203,abc51.928560083072924,wave9.510565162951535,plus_one2 1632170860000000000 mock_sensors,building5A,siteFTC random5.290188595384418,abc44.41090520217027,wave9.510565162951536,plus_one3 1632170870000000000 mock_sensors,building5A,siteFTC random2.0724967227069135,abc47.212167806890314,wave5.877852522924733,plus_one4 1632170880000000000可以对照验证上述算法特征random字段在[1, 6)内逐行跳变abcstock围绕 50 上下随机游走且被钳制在 ≥ 1.0wavesine_wave按phase 20、period 0.5的公式呈现先升后降的波形plus_onestep从 0 开始每行 1形成严格的等差数列。如何验证配置单元测试参考仓库自带的测试文件 mock_test.go 是验证插件行为的最佳参考包含两个用例TestGather一次性配置全部五种算法constant 覆盖 string/float/int/bool 四种类型断言输出的 measurement 名称、标签集合并分别校验随机数落在[1, 6]区间、stock 首值约等于 50、sine 首值约等于基线 2.0、step 首值等于 0TestGatherEmpty仅配置metric_name而不定义任何字段生成器断言不会产出任何指标——这也印证了官方至少定义一个数据字段生成算法的配置要求。如果你想在真实运行环境中复现类似校验可以组合[[outputs.file]]将 mock 指标写入本地文件再用--test或短interval观察输出序列例如[[inputs.mock]] metric_name mock_sensors [inputs.mock.tags] building 5A site FTC [[inputs.mock.random]] name random min 1.0 max 6.0 [[inputs.mock.sine_wave]] name wave amplitude 1.0 period 0.5 phase 20.0 [[inputs.mock.step]] name plus_one start 0.0 step 1.0 [[inputs.mock.stock]] name abc price 50.00 volatility 0.2 [[outputs.file]] files [/tmp/mock-output]使用注意事项必须有字段生成器仅设置metric_name而不定义任何constant/random/sine_wave/step/stock插件不会产生有效指标TestGatherEmpty已验证。有状态生成器的重启语义step与stock的内部状态latest随进程内存保存Telegraf 重启后会从头开始。波形横轴是采集次数sine_wave与step的进度基于内部计数器而非绝对时间调整采集间隔会改变波形的实际时间跨度。随机数非安全随机源码注释明确标注rand使用非加密安全的随机源//nolint:gosec仅用于测试数据不要用于任何安全性敏感场景。随机序列不可复现随机源以当前纳秒时间戳做种子因此每次启动生成的随机序列不同如需确定性数据应优先使用sine_wave、step与constant组合。mock插件是 Telegraf 生态中零依赖、即时可用的数据发生器不需要任何外部服务配置两条即可运行配合五种算法几乎能覆盖测试与演示所需的全部数据形态。建议在搭建 processor 测试台或 output 联调环境时把它作为默认的数据注入源使用。【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表