Bootstrap

InfluxDB详解

目录

前言

一、什么是InfluxDB

1.定义

2.特性

2.1特性

2.2特点

3.对常见关系型数据库(Mysql)基础概念的对比

4.注意点

5.常用的InfluxQL

6.InfluxDB系统架构

二、InfluxDB Java Demo

1.InfluxDB安装

2.Linux下载安装并启动InfluxDB

三、InfluxDB基本操作

1.数据操作

1.1显示数据库——Show databases

1.2创建数据库——Create database test

1.3删除数据库——Drop database test

1.4使用指定数据库——use test

2.数据表操作

2.1显示所有表——SHOW MEASUREMENTS

2.2新建表——Insert

2.3查询表数据——select * from cpu

2.4删除表——Drop measurement name

3.数据保存策略(Retention Policies)

3.1保留策略语法

3.2创建数据保留策略

3.3查看保留期

3.4修改保留期

3.5删除保留期

4.用户操作

4.1显示用户

4.2创建用户

4.3修改用户密码

 4.4删除用户

5.数据库访问权限

5.1用户授权

5.2撤销授权

四、InfluxDB开启用户登录验证

1.开启登录验证

2.开启认证后无密码登录

3.开启认证后有密码登录


前言

InfluxDB(时序数据库),常用的一种使用场景:监控数据统计。每毫秒记录一下电脑内存的使用情况,然后就可以根据统计的数据,利用图形化界面(InfluxDB V1一般配合Grafana)制作内存使用情况的折线图;可以理解为按时间记录一些数据(常用的监控数据、埋点统计数据等),然后制作图表做统计。

InfluxDB自带的各种特殊函数如求标准差,随机取样数据,统计数据变化比等,使数据统计和实时分析变得十分方便,适合用于包括DevOps监控应用程序指标物联网传感器数据和实时分析的后端存储。类似的数据库有Elasticsearch、Graphite等。

一、什么是InfluxDB

1.定义

InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。

2.特性

2.1特性

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

2.2特点

  • 为时间序列数据专门编写的自定义高性能数据存储。 TSM引擎具有高性能的写入和数据压缩
  • Golang编写,没有其它的依赖
  • 提供简单、高性能的写入、查询 http api,Native HTTP API, 内置http支持,使用http读写
  • 插件支持其它数据写入协议,例如 graphite、collectd、OpenTSDB
  • 支持类sql查询语句
  • tags可以索引序列化,提供快速有效的查询
  • Retention policies自动处理过期数据
  • Continuous queries自动聚合,提高查询效率
  • schemaless(无结构),可以是任意数量的列
  • Scalable可拓展
  • min, max, sum, count, mean,median 一系列函数,方便统计
  • Built-in Explorer 自带管理工具

3.对常见关系型数据库(Mysql)基础概念的对比

概念MysqlInfluxDB
数据库DatabaseDatabase
TableMeasurement
ColumnTag(带索引的,非必须)、field(不带索引)、timestemp(唯一主键)

InfluxDB时序数据库的名词:

  • database:数据库;
  • measurement:数据库中的表;
  • points:表里面的一行数据。
  • influxDB中独有的一些概念:Point由时间戳(time)、数据(field)和标签(tags)组成。
Point与传统数据库对比
Point属性传统数据库
Time(时间戳)每个数据记录时间,是数据库中的主索引(会自动生成)
Fields(字段、数据)各种记录值(没有索引的属性)也就是记录的值:温度、湿度
Tags(标签)各种有索引的属性:地区、海拔

在influxdb中,字段必须存在。因为字段是没有索引的。如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。类比一下,fields相当于SQL的没有索引的列。
tags是可选的,但是强烈建议你用上它,因为tag是有索引的,tags相当于SQL中的有索引的列。tag value只能是string类型。

还有一个重要的名词:series
所有在数据库中的数据,都需要通过图表来表示,series(系列)表示这个表里面的所有的数据可以在图标上画成几条线(注:线条的个数由tags排列组合计算出来)

4.注意点

  • tag 只能为字符串类型
  • field 类型无限制
  • 不支持join
  • 支持连续查询操作(汇总统计数据):CONTINUOUS QUERY
  • 配合Telegraf服务(Telegraf可以监控系统CPU、内存、网络等数据)
  • 配合Grafana服务(数据展现的图像界面,将influxdb中的数据可视化)

5.常用的InfluxQL

-- 查看所有的数据库
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 
show field keys
-- 查看一个measurement中所有的保存策略(可以有多个,一个标识为default)
show retention policies;

6.InfluxDB系统架构

每个database 可以有多个RP(retention policy数据保存策略),但是只有一个默认策略。策略下按照时间段分为多个ShardGroup,每个ShardGroup存储一个时间段的数据。每个shardgroup下分多个shard来存储数据。

二、InfluxDB Java Demo

1.InfluxDB安装

Windows下载地址:

64bit:https://dl.influxdata.com/influxdb/releases/influxdb-1.7.4_windows_amd64.zip chronograf:https://dl.influxdata.com/chronograf/releases/chronograf-1.7.8_windows_amd64.zip 

2.Linux下载安装并启动InfluxDB

wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.8.x86_64.rpm
 
yum -y localinstall influxdb-1.7.8.x86_64.rpm
 
cp /etc/influxdb/influxdb.conf /etc/influxdb/influxdb.conf.default
 
systemctl enable --now influxdb

三、InfluxDB基本操作

1.数据操作

1.1显示数据库——Show databases

_internal数据库是用来存储InfluxDB内部的实时监控数据的。 

1.2创建数据库——Create database test

1.3删除数据库——Drop database test

1.4使用指定数据库——use test

2.数据表操作

在 InfluxDB 当中,并没有表(table)这个概念,取而代之的是 MEASUREMENTS,MEASUREMENTS 的功能与传统数据库中的表一致,因此我们也可以将 MEASUREMENTS 称为InfluxDB 中的表。

2.1显示所有表——SHOW MEASUREMENTS

2.2新建表——Insert

InfluxDB 中没有显式的新建表的语句,只能通过 insert 数据的方式来建立新表。

insert cpu,host=serverA,region=us_west value=0.64
#其中 cpu 就是表名,host、region 是索引(tags),value=xx是记录值(fields),记录值可以有多个,系统自动追加时间戳

2.3查询表数据——select * from cpu

执行 precision rfc3339 更换为国际时间,与北京时间相差8小时 

2.4删除表——Drop measurement name

3.数据保存策略(Retention Policies)

InfluxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。(设置类似于定期清理的语句)

3.1保留策略语法

CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]



<retention_policy_name>:保留策略的名称(自定义)
<database_name>:为哪个数据库创建保留策略
<duration>:该保留策略对应的数据过期时间
REPLICATION:副本因子 SHARD DURATION:分片组的默认时长
[DEFAULT]:是否为默认策略

3.2创建数据保留策略

CREATE RETENTION POLICY "influx_retention" ON "mydb" DURATION 30d REPLICATION 1 DEFAULT


influx_retention:策略名;
mydb:具体的数据库名;
30d:保存30天,30天之前的数据将被删除,influxdb具有各种事件参数,比如:h(小时),d(天),w(星期/周);
replication 1:副本个数,一般为1就可以了;
default:设置为默认策略

3.3查看保留期

SHOW RETENTION POLICIES ON mydb

3.4修改保留期

ALTER RETENTION POLICY "influx_retention" ON mydb DURATION 15d

3.5删除保留期

DROP RETENTION POLICY "influx_retention" ON mydb

4.用户操作

4.1显示用户

4.2创建用户

CREATE USER cxk WITH PASSWORD '123'
#创建普通用户并设置密码


create user "wyb" with password '123' with all privileges
##创建普通用户并予以授权

4.3修改用户密码

SET PASSWORD FOR cxk = '123456'

 4.4删除用户

drop user cxk

5.数据库访问权限

5.1用户授权

#授权用户数据库操作权限
GRANT ALL PRIVILEGES ON influxdb TO cxk

#赋予用户管理员权限
GRANT ALL PRIVILEGES TO wyb


#只能使用admin权限才可以操作数据库

5.2撤销授权

#撤销用户数据库操作权限
Revoke ALL PRIVILEGES ON influxdb FROM cxk

#撤销用户管理员权限
Revoke ALL PRIVILEGES FROM wyb

四、InfluxDB开启用户登录验证

1.开启登录验证

#在influxdb配置文件influxdb.conf中,开启用户登录认证,在http模块修改如下内容:

vim /etc/influxdb/influxdb.conf
 
[http] 
······ 
-259行- auth-enabled = true 
 
systemctl restart influxd
# 修改完配置文件后需要重启 
# 在Windows 中 则可以 在任务管理器中 重新启动influxdb服务

修改用户权限时需要重新修改配置文件为 auth-enabled = false 才可进行操作 

2.开启认证后无密码登录

3.开启认证后有密码登录

;