本文主要通過go語言對influxdb做一個簡單的創建表以及插入一條數據的操作,代碼如下所示(使用到了一個插件,可通過go get進行安裝):
package main
import (
"fmt"
"github.com/influxdata/influxdb/client/v2"
"log"
"time"
)
const (
MyDB = "test"
username = "admin"
password = ""
)
func main() {
conn, err := client.NewHTTPClient(client.HTTPConfig{
Addr: "http://127.0.0.1:8086",
Username: username,
Password: password,
})
if err != nil {
log.Fatal(err)
}
fmt.Println(conn)
bp, err := client.NewBatchPoints(client.BatchPointsConfig{
Database: MyDB,
Precision: "s",
})
if err != nil {
log.Fatal(err)
}
tags := map[string]string{"name": "xc"}
fields := map[string]interface{}{
"id": 1,
"sex": 1,
"pass": 0707,
}
pt, err := client.NewPoint("myuser", tags, fields, time.Now())
if err != nil {
log.Fatal(err)
}
bp.AddPoint(pt)
if err := conn.Write(bp); err != nil {
log.Fatal(err)
}
}
補充:
經過查看官方文檔以及實際操作,代碼總結如下,其實對於influxdb也只是涉及到insert與query,代碼如下,完成插入與查詢兩個函數。可參考官方文檔:點擊打開鏈接
package main
import (
"encoding/json"
"fmt"
"log"
"time"
"github.com/influxdata/influxdb/client/v2"
)
const (
MyDB = "test"
username = "admin"
password = ""
MyMeasurement = "cpu_usage"
)
func main() {
conn := connInflux()
fmt.Println(conn)
//insert
WritesPoints(conn)
//獲取10條數據並展示
qs := fmt.Sprintf("SELECT * FROM %s LIMIT %d", MyMeasurement, 10)
res, err := QueryDB(conn, qs)
if err != nil {
log.Fatal(err)
}
for i, row := range res[0].Series[0].Values {
t, err := time.Parse(time.RFC3339, row[0].(string))
if err != nil {
log.Fatal(err)
}
//fmt.Println(reflect.TypeOf(row[1]))
valu := row[2].(json.Number)
log.Printf("[%2d] %s: %s\n", i, t.Format(time.Stamp), valu)
}
}
func connInflux() client.Client {
cli, err := client.NewHTTPClient(client.HTTPConfig{
Addr: "http://127.0.0.1:8086",
Username: username,
Password: password,
})
if err != nil {
log.Fatal(err)
}
return cli
}
//query
func QueryDB(cli client.Client, cmd string) (res []client.Result, err error) {
q := client.Query{
Command: cmd,
Database: MyDB,
}
if response, err := cli.Query(q); err == nil {
if response.Error() != nil {
return res, response.Error()
}
res = response.Results
} else {
return res, err
}
return res, nil
}
//Insert
func WritesPoints(cli client.Client) {
bp, err := client.NewBatchPoints(client.BatchPointsConfig{
Database: MyDB,
Precision: "s",
})
if err != nil {
log.Fatal(err)
}
tags := map[string]string{"cpu": "ih-cpu"}
fields := map[string]interface{}{
"idle": 20.1,
"system": 43.3,
"user": 86.6,
}
pt, err := client.NewPoint(
"cpu_usage",
tags,
fields,
time.Now(),
)
if err != nil {
log.Fatal(err)
}
bp.AddPoint(pt)
if err := cli.Write(bp); err != nil {
log.Fatal(err)
}
}