InfluxDB(时序数据库),常用的一种使用场景:监控数据统计。每毫秒记录一下电脑内存的使用情况,然后就可以根据统计的数据,利用图形化界面(InfluxDB V1一般配合Grafana)制作内存使用情况的折线图;
可以理解为按时间记录一些数据(常用的监控数据、埋点统计数据等),然后制作图表做统计;
目前InfluxDb 已经更新到 2.0了。
1.介绍
InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。
• 时间序列数据:从定义上来说,就是一串按时间维度索引的数据。
• 时序数据库(TSDB)特点:
持续高并发写入、无更新;
数据压缩存储;
低查询延时。
• 常见 TSDB:influxdb、opentsdb、timeScaladb、Druid 等。
2 与传统数据库相关区别
• 和传统数据库相比,influxdb在相关概念上有一定不同,具体如下:
influxdb 中的概念
传统数据库中的概念
database
数据库
measurement
数据库中的表
point
表中的一行数据
• point的数据结构由时间戳(time)、标签(tags)、数据(fields)三部分组成,具体含义如下:
point 属性
含义
time
数据记录的时间,是主索引(自动生成)
tags
各种有索引的属性
fields
各种value值(没有索引的属性)
• tag set:不同的每组tag key和tag value的集合;
• field set:每组field key和field value的集合;
• retention policy:数据存储策略(默认策略为autogen)InfluxDB没有删除数据操作,规定数据的保留时间达到清除数据的目的;
• series:共同retention policy,measurement和tag set的集合;
3、注意点
• tag 只能为字符串类型
• field 类型无限制
• 不支持join
• 支持连续查询操作(汇总统计数据):CONTINUOUS QUERY
• 配合Telegraf服务(Telegraf可以监控系统CPU、内存、网络等数据)
• 配合Grafana服务(数据展现的图像界面,将influxdb中的数据可视化)
4,InfluxDb 常用
influxdb 安装目录下
./influx 进入命令模式
-- 查看所有的数据库
show databases;
-- 使用特定的数据库
use database_name;
-- 查看所有的measurement
show measurements;
-- 查询10条数据
select * from measurement_name limit 10;
-- 数据中的时间字段默认显示的是一个纳秒时间戳,改成可读格式
precision rfc3339; -- 之后再查询,时间就是rfc3339标准格式
-- 或可以在连接数据库的时候,直接带该参数
influx -precision rfc3339
-- 查看一个measurement中所有的tag key
show tag keys
-- 查看一个measurement中所有的field key (默认整个数据库表的field) 可以指定表
show field keys
show field keys from cpu;
-- 查看一个measurement中所有的保存策略(可以有多个,一个标识为default)
show retention policies;
-- 查看表中字段 https://www.jianshu.com/p/b499347ea73a--
show field keys from cpu;
name: cpu
fieldKey fieldType
-------- ---------
usage_guest float
usage_guest_nice float
usage_idle float
usage_iowait float
usage_irq float
usage_nice float
usage_softirq float
usage_steal float
usage_system float
usage_user float数据保存策略(Retention Policies)
influxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。
• 查看当前数据库Retention Policies
show retention policies on "db_name"
•
retention_policies
• 创建新的Retention Policies
create retention policy "perform" on "system_perform_199" duration 3w replication 1 default
create retention policy "rp_name" on "db_name" duration 3w replication 1 default
create retention policy "perform" on "system_perform_199" duration 1d 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"
1.3 保留策略(retention policy)
- 每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,在集群中的副本个数为1,之后用户可以自己设置(查看、新建、修改、删除),例如保留最近2小时的数据。插入和查询数据时如果不指定存储策略,则使用默认存储策略,且默认存储策略可以修改。InfluxDB 会定期清除过期的数据。
- 每个数据库可以有多个过期策略:
show retention policies on "db_name" - Shard 在 influxdb中是一个比较重要的概念,它和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复,例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 cache、wal、tsm file。
这样做的目的就是为了可以通过时间来快速定位到要查询数据的相关资源,加速查询的过程,并且也让之后的批量删除数据的操作变得非常简单且高效。 - 建议在数据库建立的时候设置存储策略,不建议设置过多且随意切换
create database testdb2 with duration 10d
create database system_perform_199 with duration 10d
create database system_perform_111 with duration 2d
create database system_perform_105 with duration 2d
show retention policies on "system_perform_111"show retention policies on "system_perform_105"
Rentention Policy
简称RP,数据保留策略。用来指定数据的保留时间、副本数量以及每个shardgroup的时间跨度。shardgroup的概念将在后文介绍。RP创建语句如下:
CREATE RETENTION POLICY ON
ON
DURATION
REPLICATION[SHARD DURATION ] [DEFAULT]
其中retention_policy_name表示RP的名称,database_name表示数据库名称,duration表示数据保留时间,n表示数据副本数。SHARD DURATION将在后文介绍。例如在testdb创建一个只保留一天数据且副本数为1的RP:
CREATE RETENTION POLICY "one_day"
ON "testdb"
DURATION 1d
REPLICATION 1 SHARD DURATION 1h DEFAULT
RP有如下特征:
RP是Database的属性
一个Database可以包含多个RP,但只有一个默认RP
写入数据时可以指定RP写入,不指定则使用Database的默认RP,指定方式:在measurement前加指定RP的名称,例如:RP_oneday.measurement_name
————————————————原文链接:https://blog.csdn.net/suzy1030/java/article/details/81459029
1.4.2 存储目录
influxdb的数据存储有三个目录,分别是meta、wal、data:
• meta 用于存储数据库的一些元数据,meta 目录下有一个 meta.db 文件;
• wal 目录存放预写日志文件,以 .wal 结尾;
• data 目录存放实际存储的数据文件,以 .tsm 结尾。1.5 相关特点
1) 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等);
2) 可度量性:你可以实时对大量数据进行计算;
3) 基于事件:它支持任意的事件数据;
4) 无结构(无模式):可以是任意数量的列;
5)支持min, max, sum, count, mean, median 等一系列函数;
6)内置http支持,使用http读写;
7)强大的类SQL语法;
8)自带管理界面,方便使用(新版本需要通过Chronograf)1.6 influxdb和其他时序数据库比较
• 从部署、集群、资源占用、存储模型、性能等方面比较influxdb和opentsdb,具体如下:
特性
InfluxDB
OpentsDB
单机部署
部署简单、无依赖
需要搭建 Hbase,创建 TSD 数据表,配置 JAVA 等
集群
开源版本没有集群功能
集群方案成熟
资源占用
cpu 消耗更小,磁盘占用更小
资源消耗相比更多
存储模型
TSM
基于HBase存储时序数据(LSM)
存储特点
同一数据源的tags不再冗余存储 ;列式存储,独立压缩
存在很多无用的字段;无法有效的压缩;聚合能力弱
性能
查询更快,数据汇聚分析较快
数据写入和存储较快,但查询和分析能力略有不足
开发
版本升级快,但架构简单,类SQL语言(InfluxQL)易开发
API较为丰富,版本较为稳定
1.7 相关资料文档
• influxdb官网:https://www.influxdata.com/
• 相关API官网:https://docs.influxdata.com/influxdb/v1.7/
- influxdb 访问
2.1 访问方式
influxdb访问本质上都是 HTTP 方式,具体有如下:
• 客户端命令行
• HTTP API 接口
• 各语言API 库(对 go 语言 API 封装)
• 基于 WEB 管理页面操作
InfluxDB启动
1)服务端启动
如果是通过包安装的,可以使用如下语句启动:
sudo service influxdb start
如果直接下载的二进制包,则通过如下方式启动
进入InfluxDB目录下的usr/bin文件夹,执行:
./influxd
如果有配置 添加参数
./influxd -config influxdb.conf
1, 二进制安装
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.1.0.x86_64.rpm
yum localinstall influxdb-1.1.0.x86_64.rpm
其它环境可以参考influxdb官方文档:
https://www.influxdata.com/downloads/#influxdb
安装后,在/usr/bin下面有如下文件:
influxd influxdb服务器
influx influxdb命令行客户端
influx_inspect 查看工具
influx_stress 压力测试工具
influx_tsm 数据库转换工具(将数据库从b1或bz1格式转换为tsm1格式)
在/var/lib/influxdb/下面会有如下文件夹:
data 存放最终存储的数据,文件以.tsm结尾
meta 存放数据库元数据
wal 存放预写日志文件
以服务方式启动
service influxdb start
2、以非服务方式启动
influxd
需要指定配置文件 help 查看
./influxd -config influxdb.conf
3,配置
配置文件路径 :/etc/influxdb/influxdb.conf
可以通过以下命令生成默认配置文件:
influxd config > default.conf
参考:
https://www.cnblogs.com/jackyroc/p/7677508.html
https://www.cnblogs.com/imyalost/p/9689209.html
https://www.cnblogs.com/gaoguangjun/p/8512990.html
链接:https://www.jianshu.com/p/f0905f36e9c3
https://www.jianshu.com/p/f0905f36e9c3
链接:https://www.jianshu.com/p/68c471bf5533
https://www.jianshu.com/p/b499347ea73a