[时序数据库]:InfluxDB Notes

1 InfluxDB

1.1 InfluxDB 是啥?

InfluxDB是时序数据库,时序数据库通常用于监控场景,如:运维、IOT(物联网)领域。

1.2 InfluxDB 解释之使用场景

    我们可以写一个程序将服务器上CPU使用情况,每隔10s向InfluxDB中写入一条数据,然后,我们写一条
FLUX查询语句,查询过去30sCPU平均使用情况,紧接着让这个查询语句每隔10s执行一次,最终,我们配置
一条报警规则,若查询语句执行结果>xxx,就立刻触发报警。

1.3 时序数据库InfluxDB与关系型数据库对比

1.3.1 写入性能

时间戳 数据结构
时序数据库 时序数据库字如其名
关系型数据库 支持时间戳,但是需要注意数据库的写入性能

1.3.2 数据价值

   由于时序数据库一般用于指标监控场景,这个场景数据特点是冷热差别明显,通常,指标监控只会
监控近期一段时间数据,例如:我们只查询最近10min的记录,10min前的数据不再用了,此时这个
10min前数据,就称为冷数据,需要压缩放到磁盘节省空间,热数据常使用,应被存在内存,等待查询,
市面上常用时序数据库大都有类似设置。

1.3.3 时间不可倒流,数据只写不改

时序数据库描述一个实体在不同时间所处的不同状态。

例如:当我们查看CPU使用情况,发现CCPU使用率过高,于是杀死了一个进程,但10秒前数据不会因
     为我们关闭进程而发生改变。

因而,时序数据库插入操作居多。

1.3.4 InflxDB的组成——TICK技术栈

技术栈 解释
T:Telegref 数据采集组件:收集和发送数据到InfluxDB。
I:InfluxDB 存储数据:存储数据发送数据到 Chronograf。
C:Chronograf 查询:总的用户界面,起到总的管理功能。
K:Kapacitor 报警:后台处理报警信息。

[时序数据库]:InfluxDB Notes_第1张图片
注意:在2.x时,TICK进一步融合,ICK功能全部融入InfluxDB。

1.4 InfluDB使用介绍

1.4.1 Web UI 使用

1.4.1.1 创建用户和初始化存储桶

[时序数据库]:InfluxDB Notes_第2张图片

1.4.1.2 加载数据

[时序数据库]:InfluxDB Notes_第3张图片

1.4.1.3 上传数据文件

[时序数据库]:InfluxDB Notes_第4张图片

点开会有提示你上传格式[时序数据库]:InfluxDB Notes_第5张图片

1.4.1.4 写入InfluxDB的代码模块

相当于一个官方给你的API文档[时序数据库]:InfluxDB Notes_第6张图片

点开就会告诉你咋操作[时序数据库]:InfluxDB Notes_第7张图片

1.4.1.5 管理存储桶

[时序数据库]:InfluxDB Notes_第8张图片

1.4.1.6 创建Bucket3

过期策略,永不过期或者设置过期时间。
[时序数据库]:InfluxDB Notes_第9张图片

1.4.1.7 调整Bucket设置

[时序数据库]:InfluxDB Notes_第10张图片

1.4.1.8 设置Label,添加标签

[时序数据库]:InfluxDB Notes_第11张图片

1.4.1.9 向Bucket添加数据

如下我们选择的“Line Protocol”被称为行协议。
[时序数据库]:InfluxDB Notes_第12张图片

people,name=tony age=12
people,name=xiaohong age=13
people,name=xiaobai age=14
people,name=xiaohei age=15
people,name=xiaohua age=12

[时序数据库]:InfluxDB Notes_第13张图片

1.5 管理API Token

1.5.1 API Token是啥?

   简单来说,influxdb会对外暴露一套HTTP API,后边所使用的命令行啥的都是封装对influxdb的HTTP请求,
因此,对权限的管理主要就提现在Token上,在我们使用客户端发起http请求时token会被放到http请求头上,
influxdb服务器就会根据客户端发来的请求头进行解析,来判断此token拥有的权限,及可以进行的操作。

1.5.1 API token的相关管理

1.5.1.1 查看API Token

[时序数据库]:InfluxDB Notes_第14张图片

1.5.1.2 修改API Token名称

[时序数据库]:InfluxDB Notes_第15张图片

1.5.1.3 查看API Token可进行的操作

点击对应的token,便可查看token进行的相关操作
[时序数据库]:InfluxDB Notes_第16张图片

1.5.1.4 创建新的API Token

注意:Web UI 上提供只是生成Token的模板,准备了常用需求,不代表其全部功能
[时序数据库]:InfluxDB Notes_第17张图片

点击开仅能读和写的范围,会有如下选择界面[时序数据库]:InfluxDB Notes_第18张图片

1.6 查询工具

1.6.1 查询语言说明

   在influxDB的查询中,有两个查询实现方式分别为,**FLUX语言**与**InfluxQL语言,**其中InfluxQL语言在2.0版本后已被移除,被flux语言所替代,InfluxQL语言中与SQL语言高度类似。然而,flux语言更能适用于时序数据库。

1.6.1 Data Explorer

[时序数据库]:InfluxDB Notes_第19张图片

1.6.2 查询编辑区

1.6.2.1 查询构造器

[时序数据库]:InfluxDB Notes_第20张图片

1.6.2.2 FLUX脚本编辑器

[时序数据库]:InfluxDB Notes_第21张图片

1.6.2.3 数据预览区

[时序数据库]:InfluxDB Notes_第22张图片

1.6.3 示例:使用Data Explorer进行查询和可视化

1.6.3.1 打开 Data Explorer

[时序数据库]:InfluxDB Notes_第23张图片

1.6.3.2 可视化设置查询条件

[时序数据库]:InfluxDB Notes_第24张图片

1.6.3.3 窗口聚合选项

[时序数据库]:InfluxDB Notes_第25张图片

最后,再点击SUBMIT完成提交。
[时序数据库]:InfluxDB Notes_第26张图片

1.6.3.4 查看原始数据

[时序数据库]:InfluxDB Notes_第27张图片

1.6.4 可视化查询原理

当我们可视化选择条件进行查询时,实质是Web UI根据我们指定条件生成一套FLUX脚本语言
[时序数据库]:InfluxDB Notes_第28张图片
点击后便可查看到FLUX语句
[时序数据库]:InfluxDB Notes_第29张图片

1.7 Notebook

1.7.1 Notebook是啥 ?

   Notebook是influxDB 2.X后推出的功能,交互上模仿Jupyter NoteBook,器可以用来开发、文档编写、运行代码以及展示结果。

influxDB笔记本就是按照顺序处理数据的集合。其可以帮我们进行如下操作:

  • 执行flux代码、可视化数据和添加注释性片段。
  • 创建报警或计划任务。
  • 对数据进行将采样或清洗。
  • 生成要和团队分享的Runbooks。
  • 将数据写到存储桶。
   Notebook与Data Explorer相比,Notebook将数据拆分一个又一个具体步骤,并且Notebook可用来开发告警任务,Data Explorer不能。

1.7.2 Notebook的使用

1.7.2.1 进入Notebook

   在创建引导界面,influxDB通过3个模板,分别为Set an Alert(设置一个报警)、Schedule a Task (调度一个任务)、write a Flux Script(写一个 Flux 脚本)。![image.png](https://img-blog.csdnimg.cn/img_convert/19d46b9bb25dfedbef8430147f439828.png#averageHue=#0f1622&clientId=u4c90e686-1d69-4&from=paste&height=577&id=u35f8dc33&originHeight=793&originWidth=1578&originalType=binary&ratio=1.375&rotation=0&showTitle=false&size=215762&status=done&style=none&taskId=uf4ccfdb6-8d79-4978-9ab2-b69825c0ad2&title=&width=1147.6363636363637)

1.7.2.2 创建空白Notebook

[时序数据库]:InfluxDB Notes_第30张图片

1.7.3 Notebook 工作流——Cell

   在页面上看到的一个一个卡片,在Notebook中成Cell,一个Notebook工作流就是多个cell按照先后顺序组合起来的执行流程,这些Cell中间随时可插入其他Cell,且Cell和Cell可以调换顺序。

[时序数据库]:InfluxDB Notes_第31张图片

1.7.3.1 Cell的分类

[时序数据库]:InfluxDB Notes_第32张图片

数据源相关Cell 可视化相关Cell 行为Cell
查询构造器 将数据展示为一个table 进行报警
直接编写FLUX脚本 将数据展示为一张图,
或者添加笔记 定时任务设定

1.7.3.2 Notebook 工作流范式

    通常,Notebook 工作流以查询数据开始,后面的Cell把数据展示出来,当数据需要进一步修改时,再加一个flux脚本Cell,Notebook为我们留一个接口,后边的Flux cell可以将前面的数据作为数据源进行查询。最终,Notebook 工作流可以以任务设置或者报警操作作为整个工作流终点(**不是强制要求**)。

[时序数据库]:InfluxDB Notes_第33张图片

1.7.4 Notebook相关控件

1.7.4.1 时区转换

[时序数据库]:InfluxDB Notes_第34张图片

1.7.4.2 仅显示可视化

当开启此选型,查询构造器和FLUX脚本的Cell会被折叠。

[时序数据库]:InfluxDB Notes_第35张图片

1.7.4.3 删除按钮与运行按钮

image.png

1.7.5 示例:使用Notebook查询和可视化数据

1.7.5.1 使用查询构造器查询

默认,我们所创建的空白Notebook,自带3个Cell。

  • 第一个cell默认是一个查询构造器,相比DataExplorer,Notebook无开窗聚合操作(就是那个可视化图)

[时序数据库]:InfluxDB Notes_第36张图片

[时序数据库]:InfluxDB Notes_第37张图片
[时序数据库]:InfluxDB Notes_第38张图片

1.7.5.2 提交查询

[时序数据库]:InfluxDB Notes_第39张图片

1.7.5.3 添加说明cell

我们可以在Notebook中添加说明性cell。我们选择在最前面加一个说明性Cell
[时序数据库]:InfluxDB Notes_第40张图片
[时序数据库]:InfluxDB Notes_第41张图片
[时序数据库]:InfluxDB Notes_第42张图片

1.8 FlUX语法

1.8.1 啥是FLUX?

注意:说白了MySQL有SQL查询语言,InfluxDB有FLUX查询语言(2.0版本前还有InfluxQL语言,后边被移除了)
类比水处理,flux语言就是如下操作:

  • ① 从数据源中查询指定数量的数据。
  • ② 根据时间或字段筛选数据。
  • ③ 将数据进行处理或聚合得到预期结果。
  • ④ 返回最终结果。

Flux是一种函数式数据脚本语言,其旨在将查询、处理、分析和操作数据统一为一种语法。

    从概念上理解FLUX,可以联系在水处理的过程,首先,我们从源头把水抽取出来,然后,按照我
们用水需求,在管道上进行一系列的处理修改(去除沉积物,精华)等,最后,以消耗品的方式输送到
我们目的地。

[时序数据库]:InfluxDB Notes_第43张图片

1.8.2 示例:FLUX语句

函数 说明
from( ) 指定数据源
| > 管道转发符,将一个函数输入转发给下一个函数
range( ),fliter( ) 根据列的值对数据进行过滤
mean( ) 计算所剩数据平均值
yield( ) 将最终计算结果返回给用户

1.8.2.1 从influxDB中查询数据并聚合

//处理水类似,首先,从数据源中查询指定数量的数据,其次,根据时间或字段筛选数据,然后,
//将数据进行处理或聚合以得到预期结果,最后,返回最终结果。
//第一步:从数据库bucket中取数据。
//第二步:删选数据。
//第三步:对数据进行处理此处是求平均。
//第四步:返回最终结果。
from(bucket: "example-bucket")
|> range(start: -1d)
|> filter(fn: (r) => r._measurement == "example-measurement")
|> mean()
|> yield(name: "_results")

1.8.2.2 从CSV文件查询数据并聚合

//第一步:从数据源取出数据
//第二步:过滤数据
//第三步:处理数据,此处是求平均
//第四步:返回最终结果
import "csv"
csv.from(file: "path/to/example/data.csv")
|> range(start: -1d)
|> filter(fn: (r) => r._measurement == "example-measurement")
|> mean()
|> yield(name: "_results")

1.8.2.3 从PostgreSQL查询数据并聚合

//第一步:指定数据源,此处是PostgreSQL数据库,因此需要数据库连接要素
//第二步:过滤数据
//第四步:处理数据
//第五步:返回最终结果
import "sql"
sql.from(
driverName: "postgres",
dataSourceName: "postgresql://user:password@localhost",
query: "SELECT * FROM TestTable",
)
|> filter(fn: (r) => r.UserID == "123ABC456DEF")
|> mean(column: "purchase_total")
|> yield(name: "_results")

1.8.3 flux语法

1.8.3.1 注释

influx中无多行注释,只有单行注释,示例如下:

// 这是一行注释

1.8.3.2 变量与赋值

使用“=”将表达式的结果赋值变量,示例如下:

s = "foo" //string
i = 1 //Integer
f = 2.0 //float(floating point number)

s // Returns foo
i // Returns 1
f // Returns 2.0

1.8.3.3 基本表达式

表达式 说明
+ 数字相加或字符串拼接
- 数字减法
* 数字相乘
/ 数字除法
% 取模

1.8.3.4 比较运算符

谓词表达式的返回结果只能为true或false

"John" ==   "John" //Returns true
41 < 30 //Returns false

1.8.3.5 逻辑运算符

于逻辑:and;或逻辑:or

1.8.3.6 控制语句

if else
for while 循环
try catch 异常捕获

你可能感兴趣的:(时序数据库,influxDB,时序数据库,iot,物联网,java-influxdb)