zoukankan      html  css  js  c++  java
  • influxDB学习总结

    1.安装

       请参考http://www.cnblogs.com/zhja/p/5996191.html,

       安装完毕运行influxd,http://域名:8083为控制台界面;http://域名:8086为api地址;运行influx进入命令行模式。

    2.go操作influxdb
      1)利用influxdb的client,github地址:github.com/influxdata/influxdb/client/v2
      2)创建用户和授权

    create user zhja with password 'zhjazhja'
    grant all privileges to zhja

      3)创建数据库

    create database nfdump

      4)链接influxdb

    package main
    
    import (
        "fmt"
        "log"
    
        "github.com/influxdata/influxdb/client/v2"
    )
    
    const (
        MyDB = "nfdump" //数据库名
        username = "zhja" //用户名
        password = "zhjazhja" //密码
    )
    
    func main(){
        //链接数据库
        c, err := client.NewHTTPClient(client.HTTPConfig{
            Addr: "http://192.168.210.130:8086",
            Username: username,
            Password: password,
        })
    
        if err != nil {
            log.Fatalln("Error: ", err)
        }
    
        fmt.Println(c)
    }            

    执行结果:

    5)influxdb Measurements查看详细介绍
    6)批量插入数据

    package main
    
    import (
    "fmt"
    "log"
    "time"
    "math/rand"
    
    "github.com/influxdata/influxdb/client/v2"
    )
    
    const (
        MyDB = "nfdump" //数据库名
        username = "zhja" //用户名
        password = "zhjazhja" //密码
    )
    
    func main(){
        //链接数据库
        c, err := client.NewHTTPClient(client.HTTPConfig{
            Addr: "http://192.168.210.130:8086",
            Username: username,
            Password: password,
        })
    
        if err != nil {
            log.Fatalln("Error: ", err)
        }
    
        writePoints(c, MyDB)
    }
    
    func writePoints(c client.Client, MyDB string) {
        sampleSize := 1000
        rand.Seed(42)
    
        bp, _ := client.NewBatchPoints(client.BatchPointsConfig{
            Database: MyDB,
            Precision: "us",
        })
    
        for i := 0; i < sampleSize; i++ {
            regions := []string{"us-west1", "us-west2", "us-west3", "us-east1"}
            tags := map[string]string{
                "cpu": "cpu-total",
                "host": fmt.Sprintf("host%d", rand.Intn(1000)),
                "region": regions[rand.Intn(len(regions))],
            }
    
            idle := rand.Float64() * 100.0
            fields := map[string]interface{}{
                "idle": idle,
                "busy": 100.0 - idle,
            }
    
            pt, err := client.NewPoint("cpu_usage", tags, fields, time.Now())
            if err != nil {
                log.Fatalln("Error: ", err)
            }
    
            bp.AddPoint(pt)
        }
    
        err := c.Write(bp)
        if err != nil {
            log.Fatal(err)
        }
    }        

     执行结果:

    7)利用sql查询数据,利用上面的数据

    package main
    
    import (
        "fmt"
        "log"
        "time"
        "encoding/json"
    
        "github.com/influxdata/influxdb/client/v2"
    )
    
    const (
        MyDB = "nfdump"         //数据库名
        username = "zhja"       //用户名
        password = "zhjazhja"   //密码
        MyMeasurement = "cpu_usage"
    )
    
    func main(){
        //链接数据库
        c, err := client.NewHTTPClient(client.HTTPConfig{
            Addr: "http://192.168.210.130:8086",
            Username: username,
            Password: password,
        })
    
        if err != nil {
            log.Fatalln("Error: ", err)
        }
    
        //创建数据库
        _, err := queryDB(c, fmt.Sprintf("CREATE DATABASE %s", MyDB))
        if err != nil {
            log.Fatal(err)
        }
    
        //获取总数
        q := fmt.Sprintf("SELECT count(%s) FROM %s", "*", MyMeasurement)
        res, err := queryDB(c, q)
        if err != nil {
            log.Fatal(err)
        }
        count := res[0].Series[0].Values[0][1]
        log.Printf("Found a total of %v records
    ", count)
    
        //获取10条数据并展示
        qs := fmt.Sprintf("SELECT * FROM %s LIMIT %d", MyMeasurement, 20)
        res, err = queryDB(c, 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]))
            val := row[1].(json.Number)
            log.Printf("[%2d] %s: %s
    ", i, t.Format(time.Stamp), val)
        }
    }
    
    func queryDB(c client.Client, cmd string) (res []client.Result, err error) {
        q := client.Query{
            Command:  cmd,
            Database: MyDB,
        }
        if response, err := c.Query(q); err == nil {
            if response.Error() != nil {
                return res, response.Error()
            }
            res = response.Results
        } else {
            return res, err
        }
        return res, nil
    }

     执行结果:


  • 相关阅读:
    通过Get-Group导出组的成员
    VNC Server (CentOS 7 GNOME)
    VNC Server (Ubuntu 16.04.3 GNOME)
    输入输出重定向
    Linux下的网卡Bonding
    硬件性能测试
    Linux里的稀疏文件
    Linux下CPU信息的查看
    工作中常用到的Linux命令
    Putty+Xming实现在Windows客户端显示Linux服务器端的图形化程序
  • 原文地址:https://www.cnblogs.com/zhja/p/6065575.html
Copyright © 2011-2022 走看看