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"
]
}
]
}