influxDB2 基本操作(go版本)

15 阅读2分钟

背景

在新项目中,需要用到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)
	}
}