InfluxDB 介绍、安装及基本使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zx711166/article/details/84325838

InfluxDB的简介

InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。

类似的数据库有Elasticsearch、Graphite等。、

功能特点

  1. 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等)
  2. 可度量性:你可以实时对大量数据进行计算
  3. 基于事件:它支持任意的事件数据基于事件:它支持任意的事件数据

InfluxDB的主要特点

  1. 无结构(无模式):可以是任意数量的列
  2. 可拓展的
  3. 支持min, max, sum, count, mean, median 等一系列函数,方便统计支持min, max, sum, count, mean, median 等一系列函数,方便统计
  4. 原生的HTTP支持,内置HTTP API原生的HTTP支持,内置HTTP API
  5. 强大的类SQL语法强大的类SQL语法
  6. 自带管理界面,方便使用自带管理界面,方便使用

注意

  • 自带管理界面在1.2版之后,将不再提供。
  • 集群功能在1.2版之后,也不再提供。

InfluxDB与传统数据库的比较

InfluxDB的名词 串通数据库的概念
database 数据库
measurement 数据库的表
points 表里的一行数据
InfluxDB的独特的特性
  • point
    Point相当于传统数据库里的一行数据,如下表所示:

    oint属性 传统数据库中的概念
    time(时间戳) 每个数据记录时间,是数据库中的主索引(会自动生成)
    fields(字段、数据) 各种记录值(没有索引的属性)也就是记录的值:温度, 湿度
    tags(标签) 各种有索引的属性:地区,海拔

    注意

    • 在influxdb中,字段必须存在。因为字段是没有索引的。如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。类比一下,fields相当于SQL的没有索引的列。
    • tags是可选的,但是强烈建议你用上它,因为tag是有索引的,tags相当于SQL中的有索引的列。tag value只能是string类型。
  • series
    相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起。

    > select * from students
    name: students
    time                score stuid value
    ----                ----- ----- -----
    1542848518465067760 89    s123
    1542850528630385278 79    s123
    1542850533581732431 69    s123
    1542850536266169940 39    s123
    1542850676477097687 99    s123
    1542874869654197110       s124  100
    1542874898710687064       s125  60
    > show series from students
    key
    ---
    students,stuid=s123
    students,stuid=s124
    students,stuid=s125
    
  • shard
    shard 和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复;
    例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。
    每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 cache、wal、tsm file。

  • 组件
    TSM 存储引擎主要由几个部分组成: cache、wal、tsm file、compactor。

    1. Cache:cache 相当于是 LSM Tree 中的 memtabl。插入数据时,实际上是同时往 cache 与 wal 中写入数据,可以认为 cache 是 wal 文件中的数据在内存中的缓存。当 InfluxDB 启动时,会遍历所有的 wal 文件,重新构造 cache,这样即使系统出现故障,也不会导致数据的丢失。
      cache 中的数据并不是无限增长的,有一个 maxSize 参数用于控制当 cache 中的数据占用多少内存后就会将数据写入 tsm 文件。如果不配置的话,默认上限为 25MB,每当 cache 中的数据达到阀值后,会将当前的 cache 进行一次快照,之后清空当前 cache 中的内容,再创建一个新的 wal 文件用于写入,剩下的 wal 文件最后会被删除,快照中的数据会经过排序写入一个新的 tsm 文件中。
      在这里插入图片描述
    2. WAL:wal 文件的内容与内存中的 cache 相同,其作用就是为了持久化数据,当系统崩溃后可以通过 wal 文件恢复还没有写入到 tsm 文件中的数据。
    3. TSM File:单个 tsm file 大小最大为 2GB,用于存放数据。
    4. Compactor:compactor 组件在后台持续运行,每隔 1 秒会检查一次是否有需要压缩合并的数据。
      主要进行两种操作
      1. 一种是 cache 中的数据大小达到阀值后,进行快照,之后转存到一个新的 tsm 文件中。
      2. 另外一种就是合并当前的 tsm 文件,将多个小的 tsm 文件合并成一个,使每一个文件尽量达到单个文件的最大大小,减少文件的数量,并且一些数据的删除操作也是在这个时候完成。
        在这里插入图片描述

安装

环境: CentOS7.0_x64
InfluxDB版本:1.7.0

基础环境

yum install go

InfluxDB的安装

wget  https://dl.influxdata.com/influxdb/releases/influxdb-1.7.0.x86_64.rpm
rpm -ivh influxdb-1.2.0.x86_64.rpm

安装后产生的InfluxDB相关文件讲解

/usr/bin下文件
文件名 文件解析
influxd influxdb服务器
influx influxdb命令行客户端
influx_inspect 查看工具
influx_stress 压力测试工具
influx_tsm 数据库转换工具(将数据库从b1或bz1格式转换为tsm1格式)
/var/lib/influxdb下文件夹
文件夹 文件夹解析
data 存放最终存储的数据,文件以**.tsm**结尾
meta 存放数据库元数据
wal 存放预写日志文件
/etc/influxdb下文件
文件 文件解析
influxdb.conf influxdb数据库配置文件

配置文件参数详解:InfluxDB influxdbc.conf配置文件详解

启动服务

操作服务的相关命令
  • 服务式启动命令

    service influxdb start
    
    • 服务式的其他命令
      • 停止服务
        service influxdb stop
        
      • 重启服务
        service influxdb restart
        
      • 尝试重启服务
        service influxdb try-restart
        
      • 重新加载服务
        service influxdb reload
        
      • 强制重新加载服务
        service influxdb force-reload
        
      • 查看服务状态
        service influxdb status
        
  • 以非服务方式启动

    cd /usr/bin
    ./influxd
    
服务启动查看是否正常
  • 通过查看服务对应进程

    [root@localhost influxdb]# ps aux | grep influx
    influxdb   7293  0.3  2.4 635640 46516 ?        Ssl  18:43   0:01 /usr/bin/influxd -config /etc/influxdb/influxdb.conf
    root       7412  0.0  0.0 112656   964 pts/0    S+   18:49   0:00 grep --color=auto influx
    
  • 通过service influxdb status命令,查看服务状态

    [root@localhost influxdb]# service influxdb status
    Redirecting to /bin/systemctl status influxdb.service
    ● influxdb.service - InfluxDB is an open-source, distributed, time series database
       Loaded: loaded (/usr/lib/systemd/system/influxdb.service; enabled; vendor preset: disabled)
       Active: active (running) since Wed 2018-11-21 18:43:06 PST; 1h 1min ago
         Docs: https://docs.influxdata.com/influxdb/
     Main PID: 7293 (influxd)
       CGroup: /system.slice/influxdb.service
               └─7293 /usr/bin/influxd -config /etc/influxdb/influxdb.conf
    
    Nov 21 19:32:48 localhost.localdomain influxd[7293]: [httpd] ::1 - - [21/Nov/2018:19:32:48 -0800] "POST /query?chunked=true&db=&epoch=ns&q=usr+testdn HTTP/1.1" 400 148 "-" "InfluxDBS...29d6319a 172
    Nov 21 19:32:50 localhost.localdomain influxd[7293]: [httpd] ::1 - - [21/Nov/2018:19:32:50 -0800] "POST /query?chunked=true&db=&epoch=ns&q=usr+testdb HTTP/1.1" 400 148 "-" "InfluxDBS...29d6319a 119
    Nov 21 19:33:00 localhost.localdomain influxd[7293]: ts=2018-11-22T03:33:00.628996Z lvl=info msg="Executing query" log_id=0BvKdN2W000 service=query query="SHOW DATABASES"
    Nov 21 19:33:00 localhost.localdomain influxd[7293]: [httpd] ::1 - - [21/Nov/2018:19:33:00 -0800] "POST /query?db=&epoch=ns&q=SHOW+DATABASES HTTP/1.1" 200 116 "-" "InfluxDBShell/1.7....29d6319a 608
    Nov 21 19:33:10 localhost.localdomain influxd[7293]: ts=2018-11-22T03:33:10.917329Z lvl=info msg="Executing query" log_id=0BvKdN2W000 service=query query="SHOW MEASUREMENTS ON testdb"
    Nov 21 19:33:10 localhost.localdomain influxd[7293]: [httpd] ::1 - - [21/Nov/2018:19:33:10 -0800] "POST /query?chunked=true&db=testdb&epoch=ns&q=show+measurements HTTP/1.1" 200 108 "...29d6319a 939
    Nov 21 19:43:07 localhost.localdomain influxd[7293]: ts=2018-11-22T03:43:07.447858Z lvl=info msg="Retention policy deletion check (start)" log_id=0BvKdN2W000 service=retention trace_..._event=start
    Nov 21 19:43:07 localhost.localdomain influxd[7293]: ts=2018-11-22T03:43:07.448965Z lvl=info msg="Retention policy deletion check (end)" log_id=0BvKdN2W000 service=retention trace_id...psed=1.161ms
    Nov 21 19:43:49 localhost.localdomain influxd[7293]: [httpd] ::1 - - [21/Nov/2018:19:43:49 -0800] "POST /query?chunked=true&db=testdb&epoch=ns&q=qiut HTTP/1.1" 400 149 "-" "InfluxDBS...29d6319a 189
    Nov 21 19:43:58 localhost.localdomain influxd[7293]: [httpd] ::1 - - [21/Nov/2018:19:43:58 -0800] "POST /query?chunked=true&db=testdb&epoch=ns&q=quir HTTP/1.1" 400 149 "-" "InfluxDBS...c29d6319a 95
    Hint: Some lines were ellipsized, use -l to show in full.
    
服务启动后相关端口
  • 8086:HTTP API的端口
  • 8088:备份恢复时使用,默认值为8088

InfluxDB 客户端命令行方式操作

  • InfluxDB数据库操作

    • 客户端命令行方式操作

      [root@localhost influxdb]# influx
      Connected to http://localhost:8086 version 1.7.0
      InfluxDB shell version: 1.7.0
      Enter an InfluxQL query
      >
      
    • 显示数据库

      > show databases
      name: databases
      name
      ----
      _internal
      
    • 新建数据库

      > create database testdb
      > show databases
      name: databases
      name
      ----
      _internal
      testdb
      
    • 删除数据库

      > drop database testdb
      > show databases
      name: databases
      name
      ----
      _internal
      
    • 使用数据库

      > create database testdb
      > use testdb
      Using database testdb
      
  • InfluxDB 数据表操作
    在InfluxDB当中,并没有表(table)这个概念,取而代之的是measurement,measurement的功能与传统数据库中的表一致,因此我们也可以将measurement称为InfluxDB中的表。

    • 显示所有表

      show measurement
      
    • 新建表
      InfluxDB中没有显示的创建表的语句,只能通过insert数据的房还是来建立新表。
      其中 disk_free 就是表名hostname 是索引(tag)value=xx 是记录值(field),记录值可以有多个系统自带追加时间戳

      > insert disk_free,hostname=server01 value=442221834240i
      > select * from disk_free
      name: disk_free
      time                hostname value
      ----                -------- -----
      1435362189575692180 server01 442221834240
      

      或者添加数据时,自己写入时间戳(写入相同时间戳、相同tags,对原有数据进行update操作)

      > insert disk_free,hostname=server01 value=442221834240i 1435362189575692182
      > select * from disk_free
      name: disk_free
      time                hostname value
      ----                -------- -----
      1435362189575692180 server01 442221834240
      1435362189575692182 server01 442221834240
      
    • 删除表

      > drop measurement disk_free
      
  • 数据保存策略(Retention Policies)
    InfluxDB 是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。

    • 查看当前数据库Retention Policies

      • name:名称,此示例名称为 default。
      • duration:持续时间,0代表无限制。
      • shardGroupDuration:shardGroup的存储时间,shardGroup是InfluxDB的一个基本储存结构,应该大于这个时间的数据在查询效率上应该有所降低。
      • replicaN:全称是replication,副本个数。
      • default:是否是默认策略。
      > show retention policies on testdb
      name    duration shardGroupDuration replicaN default
      ----    -------- ------------------ -------- -------
      autogen 0s       168h0m0s           1        true
      
    • 创建新的Retention Policies

      • rp_name:策略名。
      • db_name:具体的数据库名。
      • 3w:保存3周,3周之前的数据将被删除,influxdb 具备各种事件参数,持续时间必须至少为1小时;比如:h(小时)、d(天)、w(星期)。
      • replication 1:副本个数,一般为1即可。
      • default:设置为默认策略。
      create retention policy "rp_name" on "db_name" duration 3w replication 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"
      
  • 连续查询(Continuous Queries)
    InfluxDB 的连续查询是在数据库中自动定时启动的一组语句,语句中必须包含 select 关键字group by time() 关键字
    InfluxDB 会将查询结果放在指定的数据表中。
    目的:使用连续查询是最优的降低采样率的方式,连续查询和存储策略搭配使用将会大大降低 InfluxDB 的系统占用量。而且使用连续查询后,数据会存放到指定的数据表中,这样就为以后统计不同精度的数据提供了方便。

    • 新建连续查询

      CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
      [RESAMPLE [EVERY <interval>] [FOR <interval>]]
      BEGIN SELECT <function>(<stuff>)[,<function>(<stuff>)] INTO <different_measurement>
      FROM <current_measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<stuff>]
      END
      
      • 样例
        CREATE CONTINUOUS QUERY wj_30m ON testdb BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO redis_clients_30m FROM redis_clients GROUP BY ip,port,time(30m) END
        
        在 testdb 库中新建了一个名为 wj_30m 的连续查询,每三十分钟取一个 connected_clients 字段的平均值、中位值、最大值、最小值 redis_clients_30m 表中。使用的数据保留策略都是default。
        不同 database 样例:
        CREATE CONTINUOUS QUERY wj_30m ON testdb_30 BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO testdb_30.autogen.redis_clients_30m FROM testdb.autogen.redis_clients GROUP BY ip,port,time(30m) END
        
    • 显示所有已存在的连续查询

      show continuous queries
      
    • 删除Continuous Queries

      drop continuous query <cq_name> on <database_name>
      

猜你喜欢

转载自blog.csdn.net/zx711166/article/details/84325838