InfluxDB是一款用Go语言编写的开源分布式时序、事件和指标数据库,无需外部依赖。
该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics, loT传感器数据和实时分析数据。
InfluxDB提供类SQL语法,如果熟悉SQL的话会非常容易上手。
InfluxDB关键概念:
database,measurement(类似sql中的table),field key(类似主键),timestamp,retention policy等
一、InfluxDB操作方式
InfluxDB提供三种操作方式:
1)客户端命令行方式(登录机器,输入influx即可登录)
2)HTTP API接口
3)各语言API库
新版本的influxDB已经关闭了web管理界面,官方称,以后的版本也会将web管理功能去掉。
二、InfluxDB数据库操作
如同MYSQL一样,InfluxDB提供多数据库支持,对数据库的操作也与MYSQL相同。
1. 查询所有的数据库
SHOW DATABASES;
2. 创建数据库
CREATE DATABASE "impression_monitor";
3. 查看表:
在InfluxDB当中,并没有表(table)这个概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能与传统数据库中的表一致,因此我们也可以将MEASUREMENTS称为InfluxDB中的表。
SHOW MEASUREMENTS;
4. 创建表:
InfluxDB中没有显式的新建表的语句,只能通过insert数据的方式来建立新表。如下所示:
insert disk_free,hostname=server01 value=442221834240i 1435362189575692182
其中 disk_free 就是表名,hostname是索引,value=xx是记录值,记录值可以有多个,最后是指定的时间
value默认的类型是float,如果加上i,写入的就是int。
5. 增加数据
增加数据采用insert的方式,要注意的是 InfluxDB的insert中,表名与数据之间用逗号(,)分隔,tag和field之间用 空格分隔,多个tag或者多个field之间用逗号(,)分隔。
insert disk_free,hostname=server01 value=442221834240i 1435362189575692182
insert impression,oid=5000001214305 value=2333i 1554283867
6. 查询数据
与sql查询基本相同:
select * from pay order by time desc limit 2
7. 修改和删除数据
delete from "query" --删除表所有数据,则表就不存在了
drop MEASUREMENT "query" --删除表(注意会把数据保留删除使用delete不会)
DELETE FROM cpu WHERE time < '2000-01-01T00:00:00Z'
DELETE WHERE time < '2000-01-01T00:00:00Z'
DROP DATABASE "testDB" --删除数据库
DROP RETENTION POLICY "dbbak" ON mydb --删除保留数据为dbbak数据
DROP SERIES from pay where tag_key='' --删除key中的tag
8. 数据保存策略(Retention Policies)
influxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。
查看当前数据库Retention Policies:
show retention policies on "db_name"
创建新的Retention Policies
create retention policy "rp_name" on "db_name" duration 3w replication 1 default
rp_name:策略名;
db_name:具体的数据库名;
3w:保存3周,3周之前的数据将被删除,influxdb具有各种事件参数,比如:h(小时),d(天),w(星期);
replication 1:副本个数,一般为1就可以了;
default:设置为默认策略
修改Retention Policies
alter retention policy "rp_name" on "db_name" duration 30d default
删除Retention Policies
drop retention policy "rp_name" on "db_name"
三. http api接口
InfluxDB API提供了较简单的方式用于数据库交互。该API使用了HTTP的方式,并以JSON格式进行返回。
Endpoint 描述
/ping 使用/ping用于检查InfluxDB的状态或者版本信息
/query 使用/query用于查询数据,管理数据库、rp、users等
/write 使用/write去写数据到数据库中
1.ping
/ping支持GET和HEAD,都可用于获取指定信息。
定义:
http://localhost:8086/ping
2. query
支持get和post请求。
查询所有的数据库
curl -G 'http://localhost:8086/query' --data-urlencode 'q=SHOW DATABASES'
创建数据库
curl -G 'http://localhost:8086/query' --data-urlencode 'q=CREATE DATABASE "impression_monitor"'
查询数据
curl -G 'http://localhost:8086/query?db=mydb' --data-urlencode 'q=SELECT * FROM "mymeas"'
curl -XPOST 'http://localhost:8086/query?db=mydb' --data-urlencode 'q=SELECT * INTO "newmeas" FROM "mymeas"'
3. wirte
write只支持POST的HTTP请求,使用该Endpoint可以写数据到已存在的数据库中。
参数说明:
参数 是否可选 描述
consistency=[any,one,quorum,all] 可选 设置point的写入一致性,默认是one.详细的请参考HERE
db={db_name} 必选 设置数据库名
precision=[h,m,s,ms,u,n] 可选 指定时间戳的精度,默认是ns
p={password} 可选 如果设置了认证,则需要用户密码
rp={rp_name} 可选 设置查询的rp。如果没有设置,则查询默认的rp
u={username} 可选 如果设置了认证,则需要用户密码
curl -i -XPOST "http://localhost:8086/write?db=mydb&precision=s" --data-binary 'mymeas,mytag=1 myfield=90 1463683075'
data-binary的格式为:
measurement,tags value timestamp,示例如下:
--data-binary 'mymeas,tag1=type,tag2=oid value=10 1463683075'
measurement与tags用,隔开,tags可以是多个‘key=value‘的键值对,用逗号隔开,value也是以键值对的形式表示,timestamp是时间戳。tag与value用空格隔开,value和timestamp用空格隔开。