[转帖]【InfluxDB V2.0】介绍与使用,flux查询、数据可视化
目录
一、关键概念
相比V1 移除了database 和 RP,增加了bucket。
V2具有以下几个概念:
timestamp、field key、field value、field set、tag key、tag value、tag set、measurement、series、point、bucket、bucket schema、organization
新增的概念:
bucket:所有 InfluxDB 数据都存储在一个存储桶中。一个桶结合了数据库的概念和存储周期(时间每个数据点仍然存在持续时间)。一个桶属于一个组织
bucket schema:具有明确的schema-type的存储桶需要为每个度量指定显式架构。测量包含标签、字段和时间戳。显式模式限制了可以写入该度量的数据的形状。
organization:InfluxDB组织是一组用户的工作区。所有仪表板、任务、存储桶和用户都属于一个组织。
二、系统结构
数据模式:InfluxDB数据元素存储在时间结构合并树 (TSM)和时间序列索引 (TSI)文件中,以有效压缩存储的数据。
默认路径:
| Engine path | ~/.influxdbv2/engine/ |
InfluxDB 存储时序数据的位置 |
| Bolt path | ~/.influxdbv2/influxd.bolt |
非时间序列数据的基于文件的键值存储 |
| Configs path | ~/.influxdbv2/configs |
配置文件(configs) 的文件路径 |
文件目录结构:
~/.influxdbv2/
- engine/
- data/
- TSM directories and files
- wal/
- WAL directories and files
- data/
- configs
- influxd.bolt
Influxdb分片和分片组
InfluxDB在将数据存储到磁盘时将时间序列数据组织成分片。分片被分组到分片组中
表示具有4d 保留期 和1d 分片组持续时间的存储桶:

分片删除:InfluxDB保留强制执行服务会例行检查早于其存储桶保留期的分片组。一旦分片组的开始时间超过存储桶的保留期,InfluxDB 将删除该分片组以及关联的分片和 TSM 文件(在具有无限保留期的存储桶中,分片无限期地保留在磁盘上)。
系统存储桶
_monitoring system bucket :该_monitoring系统桶存储InfluxDB数据用于 监控数据并发送警报。数据保留:7天
_tasks system bucket: 该_tasks系统桶存储与数据InfluxDB任务的执行。数据保留:1天
标签和字段描述详见:https://docs.influxdata.com/influxdb/v2.0/reference/internals/system-buckets/
三、配置文件
当influxd启动时,它会在当前工作目录检查一个名为config.*的文件。
支持以下语法:
- YAML (.yaml, .yml)
- TOML (.toml)
- JSON (.json)
配置选项(日志、并发压缩...):https://docs.influxdata.com/influxdb/v2.0/reference/config-options/
四、Flux查询语句
Flux 是 InfluxData 的功能性数据脚本语言,设计用于查询、分析和处理数据,它是InfluxQL 和其他类似 SQL 的查询语言的替代品。
设计原则:受Javascript 启发,旨在设计出可用、可读、灵活、可组合、可测试、可贡献和可共享的语言。
示例查询:近一小时存储的数据,按cpu度量和cpu=cpu-total标签过滤,以 1 分钟为间隔对数据进行窗口化,并计算每个窗口的平均值
-
from(bucket:"example-bucket")
-
|> range(start:-1h)
-
|> filter(fn:(r) =>
-
r._measurement == "cpu" and
-
r.cpu == "cpu-total"
-
)
-
|> aggregateWindow(every: 1m, fn: mean)
1>关键概念
Pipe-forward operator(管道转发操作符" |> "):Flux广泛使用管道转发运算符 "|>" 将操作链接在一起。在每个函数或操作之后,Flux 返回一个包含数据的表或表的集合。管道转发运算符将这些表通过管道输送到下一个函数或操作中,在那里它们将被进一步处理或操作。
Tables:Flux 构造表格中的所有数据。当数据从数据源流式传输时,Flux 将其格式化为带注释的逗号分隔值 (CSV),表示表格。然后函数操作或处理它们并输出新表。
Group keys:每个表都有一个组键(Group keys),用于描述表的内容。它是一个列列表,表中的每一行都具有相同的值。每行中具有唯一值的列不是组键的一部分。
示例 group key
-
-
Group key: [_start, _stop, _field]
-
_start:time _stop:time _field:string _time:time _value:float
-
------------------------------ ------------------------------ ---------------------- ------------------------------ ----------------------------
-
2019-04-25T17:33:55.196959000Z 2019-04-25T17:34:55.196959000Z used_percent 2019-04-25T17:33:56.000000000Z 65.55318832397461
-
2019-04-25T17:33:55.196959000Z 2019-04-25T17:34:55.196959000Z used_percent 2019-04-25T17:34:06.000000000Z 65.52391052246094
-
2019-04-25T17:33:55.196959000Z 2019-04-25T17:34:55.196959000Z used_percent 2019-04-25T17:34:36.000000000Z 65.536737442016
注意:_time和_value被排除在示例组键之外,它们对于每一行都是唯一的。
2>查询语法
https://docs.influxdata.com/influxdb/v2.0/query-data/get-started/query-influxdb/
指定数据源:from(bucket:"example-bucket")
指定时间范围:
使用管道转发运算符 ( |>) 将数据从数据源通过管道传输到range() 函数,该函数指定查询的时间范围。它接受两个参数:start和stop。范围可以是使用相对负持续时间 或使用绝对时间
-
// Relative time range with start only. Stop defaults to now.
-
from(bucket:"example-bucket")
-
|> range(start: -1h)
-
-
// Relative time range with start and stop
-
from(bucket:"example-bucket")
-
|> range(start: -1h, stop: -10m)
-
-
//使用绝对时间
-
from(bucket:"example-bucket")
-
|> range(start: 2018-11-05T23:30:00Z, stop: 2018-11-06T00:00:00Z)
-
-
//过去十五分钟的数据
-
from(bucket:"example-bucket")
-
|> range(start: -15m)
3>数据过滤:
将范围数据传递到filter()函数中,以根据数据属性或列缩小结果范围。该filter()函数有一个参数 ,fn它需要一个匿名函数,该函数具有基于列或属性过滤数据的逻
// Pattern (r) => (r.recordProperty comparisonOperator comparisonExpression) // Example with single filter (r) => (r._measurement == "cpu") // Example with multiple filters (r) => (r._measurement == "cpu") and (r._field != "usage_system" ) //按cpu度量、usage_system字段和cpu-total标记值过滤 from(bucket:"example-bucket") |> range(start: -15m) |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system" and r.cpu == "cpu-total" )
4>生成指定查询数据
Flux 的yield()函数将过滤后的表作为查询结果输出。
Flux 会yield()在每个脚本的末尾自动假设一个函数,以便输出和可视化数据。yield()只有在同一个 Flux 查询中包含多个查询时,才需要显式调用。每组返回的数据都需要使用该yield()函数命
-
from(bucket:"example-bucket")
-
|> range(start: -15m)
-
|> filter(fn: (r) =>
-
r._measurement == "cpu" and
-
r._field == "usage_system" and
-
r.cpu == "cpu-total"
-
)
-
|> yield()
5>数据转换
使用函数,将数据聚合为平均值、下采样数据等
//更新范围从最后一小时拉取数据 from(bucket:"example-bucket") |> range(start: -1h) |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system" and r.cpu == "cpu-total" ) //以五分钟为间隔的窗口化数据 from(bucket:"example-bucket") |> range(start: -1h) |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system" and r.cpu == "cpu-total" ) |> window(every: 5m) //聚合窗口数据 from(bucket:"example-bucket") |> range(start: -1h) |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system" and r.cpu == "cpu-total" ) |> window(every: 5m) |> mean() //添加时间列到聚合函数 from(bucket:"example-bucket") |> range(start: -1h) |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system" and r.cpu == "cpu-total" ) |> window(every: 5m) |> mean() |> duplicate(column: "_stop", as: "_time") //取消窗口聚合表,将所有点收集到一个无限的窗口中 from(bucket:"example-bucket") |> range(start: -1h) |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system" and r.cpu == "cpu-total" ) |> window(every: 5m) |> mean() |> duplicate(column: "_stop", as: "_time") |> window(every: inf) //辅助函数(将聚合或选择器函数应用于固定的时间窗口,通过every指定窗口的持续时间) from(bucket:"example-bucket") |> range(start: -1h) |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system" and r.cpu == "cpu-total" ) |> aggregateWindow(every: 5m, fn: mean)
6>语法基础与通量函数
语法基础:https://docs.influxdata.com/influxdb/v2.0/query-data/get-started/syntax-basics/
通量函数包:https://docs.influxdata.com/influxdb/v2.0/reference/flux/stdlib/
比如:mean()函数对每个时间窗口内的值求平均值(https://docs.influxdata.com/influxdb/v2.0/reference/flux/stdlib/built-in/transformations/aggregates/mean/)
五、可视化数据
https://docs.influxdata.com/influxdb/v2.0/visualize-data/visualization-types/
支持的可视化类型:
Band (乐队):显示随时间变化的数据组的上限和下限

guage(仪表盘):仪表视图中显示时间序列的单个值最新值

graph(图形):折线图

Graph + Single Stat(图表+单一统计):以折线图显示指定的时间序列,并将最近的单个值叠加为一个大数值

heatmap(热图):显示 x 和 y 轴上的数据分布,其中颜色代表不同的数据点浓度

histogram(直方图):一种查看数据分布的方法。y 轴专用于计数,x 轴分为 bin

mosaic(马赛克):化显示时间序列数据中的状态变化

scatter(散点图):视图使用散点图来显示时间序列数据

single stat(单项统计): 将指定时间序列的最新值显示为数值

table(表格视图):表格视图中显示查询结果
本地制造数据,通过图表数据展示案例:

grafana集成数据展示:

结论:
- influxdb控制台提供接入sdk源码,可直接在代码中使用,其他模块可直接在界面操作influxdb,使用体验较好
- influxdb可视化图表数量有限,如果图表无法满足需求,可以选择使用grafana展示数据,总体感觉grafana使用起来更舒适,数据显示更清晰
- flux刚开始不会写,通过控制台操作图表选择属性或函数,可以生成简单的flux语句
遗留问题
问:V1版本的RP+CQ在V2版本应该怎样使用?
答:
RP存储周期,完全由bucket决定,在创建bucket时需要指定bucket的数据保留时间。
需要注意的是:bucket的数据存储时间并不能随意更换,可以将永久存储的数据改成Retention存储,但是也存在限制;无法将有Retention的数据改成永久存储。

CQ需要使用task代替,InfluxQL需要使用Flux代替。
task示例:每小时执行一次,收集一个小时内的数据,输出到另一个bucket中(可使用内置函数,本案例为了验证功能使用直接输出)
-
option task = {name: "tast2", every: 1h}
-
-
from(bucket: "bucket1")
-
|> range(start: -task.every)
-
|> filter(fn: (r) =>
-
(r._measurement == "mem2"))
-
|> filter(fn: (r) =>
-
(r._field == "used_percent"))
-
|> set(key: "_measurement", value: "average3-mem2")
-
|> to(org: "test", bucket: "bucket1/mem2-rp")


CQ转Task官方描述:https://docs.influxdata.com/influxdb/v2.0/upgrade/v1-to-v2/migrate-cqs/
Task使用介绍:https://docs.influxdata.com/influxdb/v2.0/process-data/get-started/
问:V2版本数据如何备份?文件拷贝是否可行?
答:
官方提供的备份方式:
-
//将所有数据备份到一个目录
-
influx backup /path/to/backup/dir/
-
-
//将特定存储桶备份到目录
-
influx backup --bucket example-bucket /path/to/backup/dir/
文件拷贝方式(/var/lib/influxdb):与V1一致,服务重启时生效。
相比V1 : (1)它在文件层次使用ID区分具体存储桶 (2)它无法在插入过程中更换数据文件,即使更换了也会失效,不过成功启动之后删了它的数据文件,它也不会报错
结论:(1)可以使用官方提供的命令进行冷备份,服务器上备份前需要进行token配置 (2)文件拷贝是可行的,但是必须要重启服务,否则数据将会不准确。
官方描述:https://docs.influxdata.com/influxdb/v2.0/reference/cli/influx/backup/
附录
官网地址:https://docs.influxdata.com/influxdb/v2.0/
它也可集成grafana+echart完成自定义视图:

[转帖]【InfluxDB V2.0】介绍与使用,flux查询、数据可视化的更多相关文章
- Superset 0.37 发布——颜值最高的数据可视化平台
Superset 0.37,增加可视化插件,行级权限控制 使用Superset已经有一段时间,其良好的体验与丰富的图表功能节省了大量的时间.但是对于权限,自定义图表,图表下载,报警邮件一直没有很好的支 ...
- 百度——LBS.云 v2.0——创建自己的地理云数据
随着云技术和地理信息(GIS)技术的发展,今年终于进入了.地理分享的新纪元.百度提供了LBS的云存储.真是个不错的功能.下面让我们来看看如何使用吧. 1.注册百度开发者账号(此处略去88个字) 2.创 ...
- 基于Dapper的开源Lambda扩展LnskyDB 2.0已支持多表查询
LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. 文档地址: https://lining ...
- ComponentSpace SAML v2.0 for .NET 使用介绍
下载地址:http://samlsso.codeplex.com/ 以下描叙参考版本为其官网最新版本2.5.0.6.相对2.4版本,2.5有了很大改进,很多接口方法都变了.使用起来更方便,易懂. 广告 ...
- 【Beta】“北航社团帮”测试报告——小程序v2.0与网页端v1.0
目录 测试计划.过程和结果 后端测试--单元测试与覆盖率 后端测试--压力测试 展示部分数据 平均数据 前端测试--小程序v2.0 授权登录与权限检查 新功能的测试 兼容性测试 性能测试 前端测试-- ...
- JuCheap V2.0响应式后台管理系统模板正式发布beta版本
JuCheap V1.* 查看地址: http://blog.csdn.net/allenwdj/article/details/49155339 经过半年的努力,JuCheap后台通用响应式管理后台 ...
- 【JS】heatmap.js v1.0 到 v2.0,详细总结一下:)
前段时间,项目要开发热力图插件,研究了heatmap.js,打算好好总结一下. 本文主要有以下几部分内容: 部分源码理解 如何迁移到v2.0 v2.0官方文档译文 关于heatmap.js介绍,请看这 ...
- 开源任务管理平台TaskManagerV2.0介绍及升级说明
上一篇开源任务管理平台TaskManager介绍发布后,有网友联系我看看能不能做个后台管理界面,方便管理系统中所有的任务.由于时间和技术问题1.0版本的时候,新增了一个3分钟读取配置文件动态修改任务的 ...
- 微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github
4月28日,已增加多媒体上传及下载API,对应MediaUploadRequest和MediaGetRequest ------------------------------------------ ...
- Restful.Data v2.0发布,谢谢你们的支持和鼓励
v1.0发布后,承蒙各位博友们的热心关注,也给我不少意见和建议,在此我真诚的感谢 @冰麟轻武 等朋友,你们的支持和鼓励,是这个开源项目最大的推动力. v2.0在除了细枝末节外,在功能上主要做了一下更新 ...
随机推荐
- Centos 利用本地镜像安装yum源
前提 在"设置"中确保两点 1.勾选"已连接" 2.添加上本地的"centos.iso"镜像文件 切换到用户目录 cd / 新建一个iso目 ...
- Provider 四种消费者
Provider.of Provider.of 方法是 Provider 库中最常用的获取共享数据的方法之一.它接收一个 BuildContext 对象和一个泛型类型参数 T,会查找 Widget 树 ...
- Cesium中用到的图形技术——Horizon Culling
译者注:本文翻译自Cesium官方博文<Horizon Culling>,by KEVIN RING. 目录 地平线针对球体剔除一个点 平面测试 圆锥测试 推广到椭球 代码 预览 在开发像 ...
- 基于Serverless的端边云一体化媒体网络
摘要:视频在边缘的创新方向在哪?下一代视频云平台什么样? 本文分享自华为云社区<探讨视频云与边缘云平台的竞争力--基于Serverless的端边云一体化媒体网络>,作者/卢志航,整理 / ...
- centos8 测地卸载php5.6 与卸载php7
centos8 yum php 默认安装 php7.1.2 我想卸载php7 ,安装php5.6 yum remove php 无法彻底卸载干净.必须强制删除,使用下面命令查看全部php软件包 rpm ...
- 从“13天”到“0天”延时,揭秘幸福里离线SLA保障最佳实践
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 "幸福里"是抖音集团旗下集内容.社区.工具于一体的房产媒体综合信息平台,致力于提供多样化 ...
- 企业诊断屋:在线小说企业如何用A/B测试赋能业务
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近两年来,在线小说领域业务发展"降速",相较于几年前的快速扩张,2022年后国内在线小说企 ...
- C# 完美实现物联网 MQTT 数据通信
前言 MQTT 协议由于其用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务,具有开销低.占用带宽低.即时通讯等优点,使其在物联网.小型设备.移动应用等方面有较广泛的应用,在工业物联网中, ...
- 微信公众号短链实时阅读量、点赞数爬虫(不会Hook可用)
众所周知,微信分享的公众号分享出的一般都是短链,在这个锻炼下使用浏览器打开并不能获取微信公众的阅读量点赞数等这些信息,如图1所示. 但是实际拥有详细信息的则是这个链接下面,提取链接所需要提交的信息包括 ...
- Serverless Devs 重大更新,基于 Serverless 架构的 CI/CD 框架:Serverless-cd
近日,Serverless 开发者平台 Serverless Devs 重磅发布基于 Serverless 架构的轻量级 CI/CD 框架--Serverless-cd.Serverless-cd 是 ...
