influxdb的docker部署和使用
Influxdb安装
1 拉取镜像
首先确认是否安装Docker,并执行docker ps。看docker服务是否启动。
# 查看启动中的docker容器
docker ps
# 可以使用该命令启动docker服务
systemctl start docker
docker pull 拉取镜像,influxdb以1.6.3版本为例
# 版本号可以自由变更
docker pull influxdb:1.6.3
docker images可以看到拉取的镜像包
2 启动influxdb
# 启动influxdb容器
docker run -d -p 8086:8086 --name influxdb influxdb:1.6.3
# 进入容器
docker exec -it influxdb bash
# 启动influx客户端
influx
最终界面如图,可以在其中使用查询等操作了。
Influxdb使用
3配置文件地址
# 容器部署的influxdb的配置文件地址为:
vi /etc/influxdb/influxdb.conf
4 基本操作
库 database
-- 库操作
- show databases; 查看所有库
- create databases test; 创建一个库
- drop database test; 删除一个库
- use test; 选中一个库
- clear databases|db; 清除当前上下文的库
表 measurement
注意:表不能显示创建,插入数据时自动插入表中数据
-- 表操作
- show measurements; 查看所有表
- drop measurement "test"; 删除一个表
插入
-- 基本语法
- insert into <retention policy> measurement,tagKey=tagValue fieldKey=fieldValue timestamp
- 如:
insert user,name=blr,phone=100,id=20,email="111@163.com"
从上面的输出,简单小结一下插入的语句写法:
1)insert + measurement + "," + tag=value,tag=value + + field=value,field=value
2)tag与tag之间用逗号分隔;field与field之间用逗号分隔
3)tag与field之间用空格分隔
4)tag都是string类型,不需要引号将value包围
5)field如果是string类型,需要加引号
查询
- 测试数据
insert test,person_name=blr age=23,name="xiaochen",address="beijing";
- 普通查询
0、查询所有
- select * from test;
1、查询所有的tag和field
- select * from test where person_name='blr'
- select * from test where "name"='xiaochen' #name为influxdb关键字需要加入双引号区分
2、从单个measurement查询所有的field,不查tag
- select *::field from test
3、从单个measurement查询特定的field和tag。 #注意:查询时至少要带上一个field key,如果只查询tag字段的话是查不到数据的
- select * from test,sutdent
4、同时查询多张表 #注意:返回是将每张表不同记录返回
- select * from test,student
5、模糊查询
# 前缀匹配,相当于mysql的like ‘%blr’
- select * from test where person_name=~/blr$/
# 前后匹配,相当于mysql的like ‘%abc%’
- select * from test where person_name=~/blr/
- 聚类函数
- 注意事项:聚合函数只能对field字段进行操作,不能对tag字段操作,否则查询出来的列表是空的
0、如果我就要对tag字段进行聚合函数计算怎么办?那我们可以通过子查询来实现:
- select distinct(person_name) from (select * from test);
1、count()统计
# 查询某个field字段中的非空值数量
- select count(age) from test;
2、DISTINCT()去重
- select distinct(age) from test;
3、MEAN()求平均值,这个平均值必须是数字类型
- select mean(age) from test;
4、MEDIAN() 求中位数,从单个字段(field)中的排序值返回中间值
# 中位数统计学中的专有名词,是按顺序排列的一组数据中位于中间位置的数,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。
5、SPREAD()返回字段的最小值和最大值之间的差值。数据的类型必须是长整型或float64
- select spread(age) from test;
6、SUM()求和
- select sum(age) from test;
7、BOTTOM()返回一个字段中最小的N个值。字段类型必须是长整型或float64类型。
- select bottom(age,3) from test;
8、FIRST()返回一个字段中时间最早取值
- select first(age) from test;
9、LAST()返回一个字段中时间最晚取值
- select last(age) from test;
10、MAX()求最大值
- select max(age) from test
- 分组聚合
1、基于时间分组
# 查询所有数据,并对其划分为每200毫秒一组
select count(age) from test group by time(200ms)
- 分页查询
LIMIT 用法有2种:
1. limit 10:查询前10条数据
2. limit size offset N:size表示每页 大小,N表示第几条记录开始查询
# 查询前10条数据
- select * from test limit 10
# 分页,pageSize 为每页显示大小,pageIndex 为查询的页数
pageIndex = 1
pageSize = 10
- select * from test limit pageSize offset (pageIndex-1)* pageSize
- 排序
#升序
select * from test order by time asc
#降序
select * from test order by time desc
- in 查询
# 关系型数据库可以用in关键字来查询多个值,就像这样
select * from test where person_name in ('张三','李四','王五');
# 但是时序数据库时没有 in 查询的,虽然in是保留的关键字,但是依然有办法解决,还记得刚刚的模糊查询吗?没错就是用它来解决这个问题
# 同时匹配123和thing,因为前后都接上了 ^ 和 $ ,所以这已经不是模糊查询,而是完全匹配才会查询出来的
select * from test where person_name=~/^123$|^thing$/
保留策略
influxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。(数据库过期策略至少一个小 时),默认保存策略为7天(168小时)
- 查看数据保存策略
# 查看某个库的策略
show retention policies on "数据库名称"
# 查看当前库下的策略,需要先用 use database 命令指定库名
show retention policies
- 查询结果如下
> SHOW RETENTION POLICIES ON telegraf
name duration shardGroupDuraion replicaN default
default 0 168h0m0s 1 true
name:策略名称
duration:数据保存时间,超过这个时间自动删除,0表示永久保存
shardGroupDuration:shardGroup的存储时间,shardGroup是InfluxDB的一个基本存储结构,在这个时间内插入的数据查询模块,数据存放大于168小时查询速度降低;
replicaN:全称是REPLICATION,副本个数
default:是否默认策略
- 创建数据保留策略
#1. 创建h(小时),d(天),w(星期)
- CREATE RETENTION POLICY "保留策略名称" ON "数据库名称" DURATION "该保留策略对应的数据过期时间" REPLICATION "复制因子,开源的InfluxDB单机环境永远为1" SHARD DURATION "分片组的默认时常" DEFAULT
- create retention policy "testpolicy" on muInfluxdb duration 72h replication1 SHARD DURATION 1h default
# 2.修改保留策略
- alter retention policy "保留策略名称" on "数据库名称" duration 1d
# 修改默认保留策略
- alter retention policy "保留策略名称" on "数据库名称" default
# 3.删除保留策略
- drop retention policy "保留策略名称" on "数据库名称"
5 权限配置
开启权限
默认情况下 InfluxDB 是没有开启配置权限的,即默认情况下所有客户端可直接连接操作 InfluxDB 服务进行相关操作,但是这在生产环境中是不可取的因此需要对 influxdb 加入权限相关配置。
1 创建用户信息
- 首先通过客户端连接到服务,查看当前用户
- show users
-
创建用户
-
创建超级管理员用户
- 语法: create user "用户名" with password '密码' with all privileges; - 如: create user "root" with password 'root' with all privileges
-
创建指定库只读用户
- create user "用户名" with password '密码' - grant read on 库名 to "用户名"
-
-
删除用户
drop user "用户名"