背景
在新项目中,需要用到influxDB, 发现新版本的influxdb 和旧版本的有很大的不同,所以有了这个文档
docker 安装
docker run -d --name kunlun-profiler-influxdb -p 8086:8086 influxdb:alpine
注册账户
正常注册用户只要在web页面上注册获取token就行,但由于我们需要做部署开发,所以,需要用代码实现这个初始化的过程,这个过程只需安装后执行一次即可。具体待实现如下
import (
"context"
"encoding/json"
"fmt"
"log"
"testing"
"time"
influxdb2 "github.com/influxdata/influxdb-client-go/v2"
"github.com/influxdata/influxdb-client-go/v2/api/write"
)
func TestRegisterToken(t *testing.T) {
var (
org = "test" // 组织名
bucket = "testbucket" // 桶,类似db
pwd = "test1234" // 密码(web 页面登录时用到)
token = "9bc34549d565d9505b287de0cd20ac77be1d3f2c" // 任意字符后面会用到
user = "admin" // 用户名(web 页面登录时用到)
url = "http://127.0.0.1:8086" // influxdb url
)
client := influxdb2.NewClient(url, "")
defer client.Close()
resp, err := client.SetupWithToken(context.Background(), user, pwd, org, bucket, 0, token)
if err != nil {
t.Fatal(err.Error())
}
d, err := json.Marshal(resp)
if err != nil {
t.Fatal(err.Error())
}
fmt.Println(string(d))
}
插入测试
func TestInsert(t *testing.T) {
var (
token = "9bc34549d565d9505b287de0cd20ac77be1d3f2c" // 注册时写入的
bucket = "test1234"
url = "http://127.0.0.1:8086"
org = "test"
)
client := influxdb2.NewClient(url, token)
defer client.Close()
writeAPI := client.WriteAPIBlocking(org, bucket)
for value := 0; value < 5; value++ {
tags := map[string]string{
"tagname1": fmt.Sprintf("tagvalue1-%v", value),
}
fields := map[string]interface{}{
"field1": value,
}
point := write.NewPoint("measurement1", tags, fields, time.Now())
time.Sleep(1 * time.Second) // separate points by 1 second
if err := writeAPI.WritePoint(context.Background(), point); err != nil {
log.Fatal(err)
}
}
}
查询代码
func TestQuery(t *testing.T) {
var (
token = "9bc34549d565d9505b287de0cd20ac77be1d3f2c" // 注册时写入的
bucket = "test1234"
url = "http://127.0.0.1:8086"
org = "test"
)
client := influxdb2.NewClient(url, token)
defer client.Close()
queryAPI := client.QueryAPI(org)
query := fmt.Sprintf(`from(bucket: "%v")
|> range(start: -10m)
|> filter(fn: (r) => r._measurement == "measurement1")`, bucket)
results, err := queryAPI.Query(context.Background(), query)
if err != nil {
log.Fatal(err)
}
for results.Next() {
fmt.Println(results.Record())
}
if err := results.Err(); err != nil {
log.Fatal(err)
}
}