一. InfluxDB命令介绍
InfluxDB安装完成后,在安装目录的usr/bin下包含InfluxDB的日常使用和管理的二进制文件
$ ls -lh usr/bin/ total 164M -rwxr-xr-x 1 tnuser dba 51M Apr 12 15:56 influx -rwxr-xr-x 1 tnuser dba 63M Apr 12 15:56 influxd -rwxr-xr-x 1 tnuser dba 19M Apr 12 15:56 influx_inspect -rwxr-xr-x 1 tnuser dba 12M Apr 12 15:56 influx_stress -rwxr-xr-x 1 tnuser dba 21M Apr 12 15:56 influx_tsm
influx:客户端命令行工具
influxd:服务启动脚本
influx_inspect:数据导出、TSM、Series文件操作等
influx_stress:数据库压力测试
influx_tsm:数据库格式转换工具,用户将b1 or bz1 format 转化为 tsm1格式
二. 数据库操作
使用influx客户端命令时,建议加上"-precision rfc3339"参数,这样交互界面返回的时间将不再是timestamp,而是符合rfc339时间格式的时间戳"
YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ
)"
新建数据库
> create database database_name
查看数据库
> show databases name: databases name ---- _internal
注意:“_internal”数据库为InfluxDB内部存放元数据的数据库。
进入指定数据库
> use database_name
三. measurement(表)操作
1. InfluxDB语法
向InfluxDB数据库中指定的measurement(表)中插入数据时遵循以下语法格式
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
其中,向measurement(表)中插入数据时并不需要预先创建measurement,InfluxDB会自动创建。
"<tag-key>=<tag-value>..."中的tag为一个或者多个键值对,tag的键可以理解为列名而tag的值可以理解为这个列对应的值,这个tag标签的键和值在查询时可以通过SQL的where条件进行过滤,并且是可以进行索引的。
"<field-key>=<field-value>..."中的field也是一个或者多个键值对,同样,field的键可以理解为列名而field的值可以理解为这个列对应的值,与tag不同的是,field字段where条件查询时不走索引,在数据量较大的时候再where子句中将field字段作为过滤条件,会引起性能瓶颈。
"unix-nano-timestamp"时间戳是可选的,如果向measurement中插入数据时不指定timestamp,InfluxDB会将本地系统时间作为timestamp插入到数据库中。
根据以上描述,可以这样定义:根据筛选条件查询出来的数据可以作为field字段,而所有的筛选条件作为tag字段,因为tag可以作为where的条件过滤来筛选出你要的查询的值(field字段)
2. 向InfluxDB插入数据
举例说明:
现在要统计aws的ec2三台服务器的资源使用率,包括cpu使用率、mem使用率,disk使用率等指标
我们向InfluxDB插入以下数据
insert cpu,dc=us-west-2,server=ec2-dcas-address-db-01 user=5.2,system=1.0,idle=90.7,wait=3.1 insert cpu,dc=us-west-2,server=ec2-dcsindexsvc-01 user=11.1,system=15.9,idle=73.0,wait=4.0 insert cpu,dc=us-west-2,server=ec2-autodenalicontentpoi-01 user=3.1,system=8.6,idle=85.5,wait=2.0 insert memory,dc=us-west-2,server=ec2-dcas-address-db-01 total=8009556,free=1429412,used=278416 insert memory,dc=us-west-2,server=ec2-dcsindexsvc-01 total=32394732,free=482728,used=10256020 insert memory,dc=us-west-2,server=ec2-autodenalicontentpoi-01 total=31960732,free=16169728,used=421492 insert disk,dc=us-west-2,server=ec2-dcas-address-db-01,device=nvme0n1p1,path=/,fstype=xfs total=10474240,used=4657264,free=5816976,used_percent=45 insert disk,dc=us-west-2,server=ec2-dcas-address-db-01,device=nvme1n1,path=/data/01,fstype=xfs total=3144448000,used=1706236084,free=1438211916,used_percent=55 insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=xvda1,path=/,fstype=ext4 total=10189112,used=6806312,free=2858564,used_percent=71 insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=xvdb1,path=/data/01,fstype=ext4 total=206290964,used=88052144,free=107753200,used_percent=45 insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=nvme0n1p1,path=/,fstype=xfs total=10474240,used=7232364,free=3241876,used_percent=70 insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=nvme1n1p1,path=/data/02,fstype=ext4 total=515927296,used=236115064,free=253581500,used_percent=49 insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=nvme2n1p1,path=/data/backup,fstype=ext4 total=206291944,used=61476,free=195728376,used_percent=1 insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=nvme4n1p1,path=/data/01,fstype=ext4 total=103079864,used=78398680,free=19421972,used_percent=81
以上命令执行完成后,会在当前数据库下新建三张measurement(表),查看当前数据库中的measurement,可以看到我们当前有cpu、disk、memory三张measurement(表)
> show measurements name: measurements name ---- cpu disk memory
我们向三张measurement插入了不少数据,如何判断每个字段是field或者是tag呢,例如存放cpu的measurement,我们插入的数据时就可以判断,dc和server即为tag的键,而user、system、idle、wait为field,也可通过如下命令查看一个measurement中的tag和field字段
> show tag keys from disk name: disk tagKey ------ dc device fstype path server > show field keys from disk name: disk fieldKey fieldType -------- --------- free float total float used float used_percent float
3. 从Influxdb查询数据
1. 从名称为disk的measurement中查询所有的数据
> select * from "disk" name: disk time dc device free fstype path server total used used_percent ---- -- ------ ---- ------ ---- ------ ----- ---- ------------ 2020-04-19T15:16:40.866657083Z us-west-2 nvme0n1p1 5816976 xfs / ec2-dcas-address-db-01 10474240 4657264 45 2020-04-19T15:16:40.910642698Z us-west-2 nvme1n1 1438211916 xfs /data/01 ec2-dcas-address-db-01 3144448000 1706236084 55 2020-04-19T15:16:40.930617525Z us-west-2 xvda1 2858564 ext4 / ec2-autodenalicontentpoi-01 10189112 6806312 71 2020-04-19T15:16:40.950442939Z us-west-2 xvdb1 107753200 ext4 /data/01 ec2-autodenalicontentpoi-01 206290964 88052144 45 2020-04-19T15:16:40.970310916Z us-west-2 nvme0n1p1 3241876 xfs / ec2-dcsindexsvc-01 10474240 7232364 70 2020-04-19T15:16:40.99050202Z us-west-2 nvme1n1p1 253581500 ext4 /data/02 ec2-dcsindexsvc-01 515927296 236115064 49 2020-04-19T15:16:41.010722937Z us-west-2 nvme2n1p1 195728376 ext4 /data/backup ec2-dcsindexsvc-01 206291944 61476 1 2020-04-19T15:16:41.660406121Z us-west-2 nvme4n1p1 19421972 ext4 /data/01 ec2-dcsindexsvc-01 103079864 78398680 81
2.根据过滤条件查询数据
查询server名称为"ec2-dcsindexsvc-01"的磁盘总大小
> select "device", "path", "total" from "disk" where "server" = 'ec2-dcsindexsvc-01' name: disk time device path total ---- ------ ---- ----- 2020-04-19T15:16:40.970310916Z nvme0n1p1 / 10474240 2020-04-19T15:16:40.99050202Z nvme1n1p1 /data/02 515927296 2020-04-19T15:16:41.010722937Z nvme2n1p1 /data/backup 206291944 2020-04-19T15:16:41.660406121Z nvme4n1p1 /data/01 103079864
这里需要注意的是:
- "device"、"path"为tag,实际执行中应该将tag作为where子句的字段,而不能将field作为where子句的字段,因为field不能索引。
- 在查询语句中,tag、field键名需要用双引号引起来,而将键值用单引号引起来,否则查询的数据为空,或者报错"ERR: error parsing query: found ******, expected identifier, string, number, bool at ******"
3. 根据聚合函数查询
分别查询disk中field total字段求和、最大值、平均值、最小值、时间戳最早的值、时间戳最近的值
> select sum("total"), max("total"), mean("total"), min("total"), first("total"), last("total") from disk name: disk time sum max mean min first last ---- --- --- ---- --- ----- ---- 1970-01-01T00:00:00Z 4207175660 3144448000 525896957.5 10189112 10474240 103079864