Contents

go第三方库-github.com.influxdata.influxdb-client-go

godoc

influxdb v1 godoc 官网

influxdb v2 github官网

influxdb v1 github官网

go的influxdb客户端有v1和v2,其中v1使用influxQL 很简单也不够灵活,v2 使用flux 非常强大但比较复杂

v1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import(
	_ "github.com/influxdata/influxdb1-client" // this is important because of the bug in go mod
	client "github.com/influxdata/influxdb1-client/v2"
)

func ExampleClient_query() {
	c, err := client.NewHTTPClient(client.HTTPConfig{
		Addr: "http://localhost:8086",
	})
	if err != nil {
		fmt.Println("Error creating InfluxDB Client: ", err.Error())
	}
	defer c.Close()

	q := client.NewQuery("SELECT count(value) FROM cpu_load", "mydb", "")
	if response, err := c.Query(q); err == nil && response.Error() == nil {
		fmt.Println(response.Results)
	}
}

由于我们只执行一个语句,所以查询的结果一般咱们只关注response.Results[0].Series,它的类型是[]models.Row

每一个models.Row其实就是一个时间序列,咱们需要关注的是Values字段,Values字段类型是[][]interface{},每一个[]interface{}是一个点,这个点的第一个值是时间,后面是按照你写的sql中select值排序

对于聚合值group by 字段会出现在row的Tags字段,没有group by那么就只有一条线

类型断言对应类型

influxdb golang
Float json.Number
Interger json.Number
String string
Boolean bool
Time time.time

json.Number有Int64()和Float64()方法转换为基础类型

type Response

1
2
3
4
type Response struct {
	Results []Result
	Err     error
}

type Result

1
2
3
4
5
type Result struct {
	Series   []models.Row
	Messages []*Message
	Err      error
}

model

type Row

1
2
3
4
5
6
7
type Row struct {
	Name    string            `json:"name,omitempty"`
	Tags    map[string]string `json:"tags,omitempty"`
	Columns []string          `json:"columns,omitempty"`
	Values  [][]interface{}   `json:"values,omitempty"`
	Partial bool              `json:"partial,omitempty"`
}
 |