InfluxDB 是什么
InfluxdbInfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。
InfluxDB在DB-Engines的时序数据库类别里排名第一。
首先使用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。大功告成啦。
网友评论