InfluxDB 之使用 influx-stress 生成指定时间范围的测试数据

7 阅读1分钟

influx-stress 是个 InfluxDB 的写入压力测试工具,由 influxdata 开发并发布在 GitHub。这个工具的使用还是比较容易的看官方的 README 就可以。

这里要说的是那它当做数据生成工具,它本身是支持简单的数据生成和数值随机,但产生的数据都是基于当前的时间。当我需要过去一段时间的数据,用来做查询测试的时候,它默认生成的数据可能就不适合了。

这里我简单修改了下源码,能实现根据需要生成从当前到过去大概什么时间的数据,比如:生成当前最近一年的数据。

这里的思路是找到构成数据的地方,看下数据的时间是怎么生成的然后生成个一年秒数的随机数,把当前日期减去这个随机的秒数,基本就能到了最近一年的数据了。最终找到构建数据的代码在 stress\writer.go 中,具体代码如下:

// 略……

t := time.Now()

// 略……

    for _, pt := range pts {
      pointCount++

      // pt.SetTime(t) // 原始代码
      // 这是修改后的代码,将原来的 t 减去个一年秒数的随机数
      pt.SetTime(time.Unix(t.Unix()-int64(rand.Intn(365*24*60*60)), 0))

      lineprotocol.WritePoint(w, pt)

// 略……

启动参数为生产1亿条数据,vscode 的 launch.json 启动文件如下:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Package",
      "type": "go",
      "request": "launch",
      "mode": "auto",
      "program": "${workspaceRoot}/cmd/influx-stress/main.go",
      "cwd": "${workspaceRoot}",
      "args": [
        "insert",
        "cpu2,host=server,location=us-west,id=myid",
        "random=5i",
        "--host",
        "http://192.168.17.54:8086",
        "--db",
        "test",
        "--user",
        "root",
        "--pass",
        "123",
        "-n",
        "100000000"
      ]
    }
  ]
}