• InfluxDB学习(二):InfluxDB数据库、database、measurement、tag、field等基本操作


    一. 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

    这里需要注意的是:

    1. "device"、"path"为tag,实际执行中应该将tag作为where子句的字段,而不能将field作为where子句的字段,因为field不能索引。
    2. 在查询语句中,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
  • 相关阅读:
    实验楼挑战赛(1)-实现不可修改字典
    python django前端界面实现数据库数据excel导出
    python2中range和xrange的异同
    python的json模块的dumps,loads,dump,load方法介绍
    ajax500错误
    伪元素小tips
    使用css3制作蚂蚁线
    chardet坑——比蜗牛还慢
    Flask的socket.error:10053
    chrome插件开发-消息机制中的bug与解决方案
  • 原文地址:https://www.cnblogs.com/ilifeilong/p/12731544.html
Copyright © 2020-2023  润新知