美文网首页
Go与Docker操作Influxdb

Go与Docker操作Influxdb

作者: Jaeyok | 来源:发表于2020-10-27 16:01 被阅读0次

    InfluxDB 是什么

    InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。
    InfluxDB在DB-Engines的时序数据库类别里排名第一。

    Influxdb

    首先使用docker拉取Influxdb镜像文件

    docker pull influxdb
    

    查看docker 镜像目录

    $ docker images
    REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
    influxdb                 latest              c15aefdd926b        13 days ago         307MB
    

    看到influxdb镜像已经导入,接下来进入到influxdb镜像。

    docker run -d -p 8083:8083 -p8086:8086 --expose 8090 --expose 8099 --name influx influxdb
    

    之前安装过influxdb的,可能8086和8083端口被占用,我们需要kill掉占用端口的应用服务。我们先查看哪些服务占用了端口。首先转到root模式查看服务,才能正常显示。

    //端口被占用
    docker: Error response from daemon: driver failed programming external connectivity on endpoint influxsrv (4a60b0b085f5af7b8343551dd6295d084adab4b7787ffde9bc261c6cc9b488fa): Error starting userland proxy: listen tcp 0.0.0.0:8086: bind: address already in use.
    
    ~$ sudo su
    root@wanziyu-KLV-WX9:/home/hadoop# netstat -ntpl |grep 8086
    tcp6       0      0 :::8086                 :::*                    LISTEN     1839/influx
    

    发现pid 号为1839的服务进程占用了8086端口,因为我们之前在本地运行过influxd程序,接下来我们kill掉这个程序。

    sudo kill -9 1839
    

    再次docker run influxdb,若8083端口也被占用重复此方法kill掉占用的服务进程。

    docker run -d -p 8083:8083 -p8086:8086 --expose 8090 --expose 8099 --name influx influxdb
    

    若遇到以下错误,说明之前使用过名字为influx的容器,我们需要将之前的容器remove或者rename。

    docker: Error response from daemon: Conflict. The container name "/influx" is already in use by container "f9b59bd1c86ac92501dc352d1a55aa5dc1f3c50ef189db2a810f2a56aa6eb755". You have to remove (or rename) that container to be able to reuse that name.
    
    
    //remore influx容器
    docker rm influx
    

    然后重新docker run,这样就运行了influx容器,然后使用docker exec -it influxdb bash进入influxdb

    $ docker exec -it influxdb bash
    root@06c57470fae5:/# influx
    Connected to http://localhost:8086 version 1.8.3
    InfluxDB shell version: 1.8.3
    > 
    

    看到>符号,说明进入Influxdb成功,我们接下来创建一个database,命名为test.

    > create database test
    > show databases
    name: databases
    name
    ----
    _internal
    test
    

    创建成功,接下来使用Go语言操作数据库。

    首先用go get方法获取github上的influxdata包

    go get github.com/influxdata/influxdb1-client/v2
    

    然后导入我个人的Influx包

    go get github.com/wanziyu/IoTKit
    

    获取成功之后,新建一个main.go文件,输入以下代码。

    package main
    
    import (
        "fmt"
        influx "github.com/wanziyu/IoTKit/timedb/Influx"
        "log"
    )
    
    func main() {
        conn := influx.ConnInflux()
        fmt.Println(conn)
        var dbname = "test"
        var fields = map[string]interface{}{
            "idle":   201.1,
            "system": 43.3,
            "user":   86.6,
        }
    
        influx.WritePoints(conn, dbname, fields)
    
        // 获取10条数据并展示
        qs := fmt.Sprintf("SELECT * FROM %s LIMIT %d", "cpu_usage", 10)
        res, err := influx.QueryDB(conn, qs)
        if err != nil {
            log.Fatal(err)
        }
    
        for _, row := range res[0].Series[0].Values {
            for j, value := range row {
                log.Printf("j:%d value:%v\n", j, value)
            }
        }
    }
    

    编译并运行之后就写入了influxdb数据库。我们接下来查看数据库中名字为cpu_usage的measurement(数据表)。

    >use test
    using database test
    > select * from cpu_usage  limit 10;
    name: cpu_usage
    time                cpu    idle  system user
    ----                ---    ----  ------ ----
    1603784019000000000 ih-cpu 201.1 43.3   86.6
    1603784040000000000 ih-cpu 201.1 43.3   86.6
    

    我们可以看到数据已经导入了两行,因为我们每运行一次就导入了一组Point。大功告成啦。

    相关文章

      网友评论

          本文标题:Go与Docker操作Influxdb

          本文链接:https://www.haomeiwen.com/subject/hfexvktx.html