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