一、安装
InfluxDB默认使用下面的网络端口:
TCP端口8086用作InfluxDB的客户端和服务端的http api通信
TCP端口8088给备份和恢复数据的RPC服务使用
另外,InfluxDB也提供了多个可能需要自定义端口的插件,所以的端口映射都可以通过配置文件修改,对于默认安装的InfluxDB,这个配置文件位于/etc/influxdb/influxdb.conf。
安装之前检查这两个端口是否被占用,如果占用可以通过配置文件进行更改
全局搜索8086或8088 将注释放开,更改其他的端口后,重启服务
sudo systemctl restart influxdb
更改默认端口后访问方式变为:
influx -port 8087
1、通过命令安装(centos7以上)
sudo yum install influxdb
sudo systemctl start influxdb
2、离线安装 可以从influx官网下载安装包
下载安装包:
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.8.2.x86_64.rpm
sudo yum localinstall influxdb-1.8.2.x86_64.rpm
二、配置admin用户认证登录
root@d248ddfcd76c:/# influx
Connected to http://localhost:8086 version 1.8.2
InfluxDB shell version: 1.8.2
>
没有设置用户认证,可以直接这样插入数据:
[root@server ~]# curl -G 'http://localhost:8086/query' --data-urlencode "q=show databases;"
{"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[["_internal"]]}]}]}
[root@server ~]#
创建admin用户步骤
# 所有命令不区分大小写
# 显示用户
SHOW USERS
# 创建用户
CREATE USER "username" WITH PASSWORD 'password'
# 赋予用户管理员权限
GRANT ALL PRIVILEGES TO "username"
# 或者直接创建管理员权限的用户
CREATE USER "username" WITH PASSWORD 'password' WITH ALL PRIVILEGES
# 修改用户密码
SET PASSWORD FOR "username" = 'password'
# 撤消权限
REVOKE ALL ON mydb FROM "username"
# 查看权限
SHOW GRANTS FOR "username"
# 删除用户
DROP USER "username"
在配置文件启用认证
默认情况下,influxdb的配置文件是禁用认证策略的,所以需要修改设置一下。
编辑配置文件sudo vim /etc/influxdb/influxdb.conf
,把 [http] 下的 auth-enabled 选项设置为 true 。
修改后需要重启influxdb
sudo systemctl restart influxdb
这里使用admin认证用户登陆访问一下,格式如下:
influx -username '用户名' -password '密码'
如果更改了端口号
influx -username '用户名' -password '密码' -port 端口号
具体执行:
root@e81b9a3b0eba:/# influx -username 'root' -password 'newpwd'
Connected to http://localhost:8086 version 1.8.2
InfluxDB shell version: 1.8.2
>
> show users;
user admin
---- -----
root true
>
设置其他用户权限,只有管理员进入influx 才能设置其他用户的权限
#赋予用户某个数据库的READ / WRITE / ALL 权限
GRANT READ ON mydb TO "username"
GRANT WRITE ON mydb TO "username"
GRANT ALL ON mydb TO "username"
执行后查询一下用户权限
此时test用户只能向mydb2写入数据,如果读则报没有权限读报错:
正常写入:
如果不小心把管理员权限用户删除,或者密码忘记,无法登陆influxdb,可以通过更改配置文件
#编辑配置文件
sudo vim /etc/influxdb/influxdb.conf
#把 [http] 下的 auth-enabled 选项设置为 false
auth-enabled=false
#重启influxdb
sudo systemctl restart influxdb
#相当于无管理员权限进入,再重新设置管理员权限,更新密码,具体步骤参照上面创建admin用户步骤
三、基本读写操作
http带上admin用户查询、写入数据
查询数据
当配置了admin认证用户之后,进行http的api请求的时候就要带上用户名和密码的参数,不然无法执行,示例如下:
curl -G "http://localhost:8086/query" -u username:password --data-urlencode "q=SHOW DATABASES"
curl -G "http://localhost:8086/query" --data-urlencode "u=username" --data-urlencode "p=password" --data-urlencode "q=SHOW DATABASES"
curl -G "http://localhost:8086/query?u=username&p=password&q=SHOW+DATABASES"
其中增加?pretty=true
可以将json展开显示。
[root@locust03 ~]# curl -G "http://localhost:8086/query?pretty=true" -u root:newpwd --data-urlencode "q=show databases"
写入数据
当然设置了用户认证之后,写入数据的时候也要带上用户名以及密码&u=username&p=password
,如下:
用户名密码写在URL中
curl -i -X POST "http://localhost:8086/write?db=mydb&u=username&p=password" --data-binary "cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86 1434055562000000000"
用户名密码写在HTTP头Authorization选项
curl -i -X POST "http://localhost:8086/write?db=mydb" -u username:password --data-binary "cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86 1434055562000000000"
下面来执行一下:
[root@server ~]# curl -i -X POST "http://localhost:8086/write?db=mydb&u=root&p=newpwd" --data-binary "cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86 1434055562000000000"
HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: 4b314fea-0d16-11ea-8017-0242ac110002
X-Influxdb-Build: OSS
X-Influxdb-Version: 1.7.9
X-Request-Id: 4b314fea-0d16-11ea-8017-0242ac110002
Date: Fri, 22 Nov 2019 10:53:19 GMT
[root@server ~]#
[root@locust03 ~]# curl -i -X POST "http://localhost:8086/write?db=mydb" -u root:newpwd --data-binary "cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86"
HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: 6b2c10bb-0d16-11ea-8018-0242ac110002
X-Influxdb-Build: OSS
X-Influxdb-Version: 1.7.9
X-Request-Id: 6b2c10bb-0d16-11ea-8018-0242ac110002
Date: Fri, 22 Nov 2019 10:54:12 GMT
[root@locust03 ~]#
查看插入后的influxdb数据,如下:
> use mydb
Using database mydb
>
> show measurements;
name: measurements
name
----
cpu_load_short
>
> select * from cpu_load_short;
name: cpu_load_short
time host region value value2
---- ---- ------ ----- ------
1434055562000000000 server01 us-west 0.64 0.86
1574420052671401939 server01 us-west 0.64 0.86
>
influxDB保存策略 Retention Policy
influxdb的数据保存策略policies主要是用于指定数据的保留时间,超过指定时间,就会删除这部分数据。
查询策略
> show retention policies on mydb;
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
name: 策略名称
duration: 保留时间,0s表示永久保存
shardGroupDuration:shardGroup的存储时间,shardGroup是InfluxDB的一个基本储存结构,个人理解为时间分区,保留策略中删除的最小粒度
replicaN:全称是REPLICATION,副本个数
default:是否是默认策略
新建策略
语法如下:
CREATE RETENTION POLICY ON <retention_policy_name>
ON <database_name>
DURATION <duration>
REPLICATION <n> [SHARD DURATION <duration> ] [DEFAULT]
示例
CREATE RETENTION POLICY "3_day" ON "mydb" DURATION 3d REPLICATION 1 SHARD DURATION 3h DEFAULT;
为库mydb创建了一个名称为3_day的策略,其中数据保存时间为3天,SHARD DURATION
为3h。
ShardGroup
shardgroup是InfluxDB中一个重要的逻辑概念,它负责指定时间跨度的数据存储,这个时间跨度在创建RP时指定。如果没有指定,系统将通过RP的数据保留时间来计算:
在创建RP时如果没有设置shard duration,则由InfluxDB根据RP的duration设置默认值,设置规则如下:
RP Duration < 2 天,Shard Group Duration = 1 小时
RP Duration > 2 天 and <= 6 个月,Shard Group Duration = 1 天
RP Duration > 6个月,Shard Group Duration = 7天
InfluxDB默认设置的shard duration在大多数场景都工作的很好,但对于高吞吐量、长时间运行的InfluxDB实例来说,较长的shard group duration更加适合。所以对于需要较长的shard group duration的场景,官方推荐如下:
RP Duration < = 1 天,Shard Group Duration = 6小时
RP Duration > 1 天 and <= 7天,Shard Group Duration = 1 天
RP Duration > 7天 and <= 3个月,Shard Group Duration = 7天
RP Duration > 3个月,Shard Group Duration = 30天
RP Duration = 永久,Shard Group Duration = 52周或更长
修改及删除策略
# 修改策略
alter retention policy "autogen" on "mydb" duration 72h0m0s default;
# 删除策略
drop retention POLICY "2_hours" ON "mydb"