InfluxDB是一个时序数据库,主要用于监控场景的数据支撑,对于那些写少读多按时间序查询数据的场景是非常适用的。接下来我们用docker-compose的形式安装。首先先装好docker,docker-compose命令
yum -y install yum-utils device-mapper-persistent-data lvm2#导入docker安装库
yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
#按指定版本安装好docker
yum install docker-ce-20.10.5 docker-ce-cli-20.10.5 docker-ce-rootless-extras-20.10.5 -yyum -y install epel-release
yum -y install docker-compose
InfluxDB的docker-compose.yml的文件内容如下:
version: '3.5'services:influxdb:restart: alwaysimage: influxdb:2.1.1container_name: influxdbvolumes:#配置文件- ./config/config.yml:/etc/influxdb2/config.yml#数据保存目录- /home/appadmin/data/influxdb:/var/lib/influxdb2ports:#运行端口- 8086:8086
文件保存好后,启动运行InfluxDB
docker-compose up -d
安装成功后,用命进行cli初始化,分别填上用户,密码,组织,默认桶名。
docker exec -it ab25571473e7 /usr/local/bin/influx setup --host http://localhost:8086
docker exec -it ab25571473e7 /usr/local/bin/influx config
接下来创建token
docker exec -it ab25571473e7 /usr/local/bin/influx auth create -o ea --all-access
docker exec -it ab25571473e7 /usr/local/bin/influx auth list
Influxdb没有Database,只有Organization 和 Bucket。用关系库的理解,Organization 对应数据库示例,Bucket对应Database。
Org管理命令
#org 列表
docker exec -it ab25571473e7 /usr/local/bin/influx org list#创建org
docker exec -it ab25571473e7 /usr/local/bin/influx org create -n ea2#重命名
docker exec -it ab25571473e7 /usr/local/bin/influx org update -i f16cdfb1a16ddfb5 -n ea3#删除org
docker exec -it ab25571473e7 /usr/local/bin/influx org delete -i f16cdfb1a16ddfb5
Bucket管理
#显示桶列表
docker exec -it ab25571473e7 /usr/local/bin/influx bucket list -o ea# 数据保留时间单位在以下单位中取值:
#纳秒 (ns)
#微秒 (us or µs)
#毫秒 (ms)
#秒 (s)
#分 (m)
#时 (h)
#日 (d)
#周 (w)
#创建桶,时间1w保存一周
docker exec -it ab25571473e7 /usr/local/bin/influx bucket create -n test2 -o ea -r 1w#重命名
docker exec -it ab25571473e7 /usr/local/bin/influx bucket update -i e6e6f7ae16812784 -n test3 -r 2w#删除
docker exec -it ab25571473e7 /usr/local/bin/influx bucket delete -n test3-o a
measurement 管理
在数据存储方式方面,influxdb有 Fields 和 Tags ,在存储形式上 field 的 key 被存储在一个名为_field的列中, 而tag的key则是以列头的形式存在的, 该列的内容即为tag value, 另外值得注意的是 field 和 tag 都可以用来存储数据,但tag只能存储字符串类型数据(即不可以在influx查询中使用 mean()、max()等聚合函数),而filed既可以存储字符串类型又可以存储数值类型数据。
官方文档的标准语法
# 语法
<measurement>[,<tag_key>=<tag_value>[,<tag_key>=<tag_value>]] <field_key>=<field_value>[,<field_key>=<field_value>] [<timestamp>]# 示例
student,name=weiyigeek id=10001,age=20 [1654848441]
InfluxDB2.x提供了两种语法查询数据,Flux和InfluxQL,我们先用Flux来插入查询数据
可通过 influx query打开查询管道(pipe),然后输入Flux查询语句,然后按住ctrl+d进行执行查询。
# - dryrun 尝试写入,即写入到stdout而不是InfluxDB。
docker exec -it ab25571473e7 /usr/local/bin/influx write dryrun -b test -o ea 'student,std_name=tomson id=00001,age=25,score=99'#正式写入一条数据,-p ns是时间度为纳秒
docker exec -it ab25571473e7 /usr/local/bin/influx write -b test -o ea 'student,std_name=tomson id=00001,age=25,score=99' -p ns#查询数据
#from是代表查询哪个桶
#range 是代表查询范围
# 使用filter()对输入的数据进行过滤,它有一个参数fn,这个参数是一个函数,fn函数有一个参数,这个参数表示记录,函数体是过滤条件
#yield输出查询结果
#官方参考手册 https://docs.influxdata.com/influxdb/v2.7/query-data/flux/
docker exec -it ab25571473e7 /usr/local/bin/influx query 'from(bucket: "test") |> range(start: -1d, stop: 0d) |> filter(fn: (r) => r["_measurement"] == "student") |> filter(fn: (r) => r["_field"] == "score") |> yield(name: "mean")'#删除数据
docker exec -it ab25571473e7 /usr/local/bin/influx delete -b test -o ea -p std_name=tomson --start '2023-09-05T07:13:40.770399198Z' --stop '2023-09-06T07:13:40.770399198Z'
通过Write API - 数据写入
curl --request POST "http://localhost:8086/api/v2/write?org=ea&bucket=test&precision=ns" --header "Authorization: Token d-OT0ENHu3q2dZcgdG2pytDZvht2cIs_YpBOuvRUH-zS9TllY32vwj6TtpwWiOVeCPKTiOCZxx8eg10-W3eqlA==" --header "Content-Type: text/plain; charset=utf-8" --header "Accept: application/json" --data-binary 'student,std_name=rose id=00002,age=23,score=100'
InfluxQL方式查询
#确认是否有桶映射
docker exec -it ab25571473e7 /usr/local/bin/influx v1 dbrp list
docker exec -it ab25571473e7 /usr/local/bin/influx v1 dbrp list --bucket-id 4b788e2a835b6530#没有映射建立映射
docker exec -it ab25571473e7 /usr/local/bin/influx v1 dbrp create --db test --rp test_rp --bucket-id 4b788e2a835b6530 --default#QL查询
#官方查询参考手册https://docs.influxdata.com/influxdb/v2.1/query-data/influxql/curl --get http://localhost:8086/query?db=test --header "Authorization: Token d-OT0ENHu3q2dZcgdG2pytDZvht2cIs_YpBOuvRUH-zS9TllY32vwj6TtpwWiOVeCPKTiOCZxx8eg10-W3eqlA==" --data-urlencode "q=SELECT * FROM test.test_rp.student"
用户管理
#创建用户tomson,密码12345678 org是ea
docker exec -it ab25571473e7 /usr/local/bin/influx user create -n tomson -p 12345678 -o ea#查看用户
influx user list#更新用户名
docker exec -it ab25571473e7 /usr/local/bin/influx user update -i 0bc66373f9008000 -n jack#修改用户密码
docker exec -it ab25571473e7 /usr/local/bin/influx user update -i 0bc66373f9008000 -n jack#删除用户
docker exec -it ab25571473e7 /usr/local/bin/influx user delete -i 0bc66373f9008000