InfluxDB 2 介绍与使用 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" andr.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" andr._field == "usage_system" andr.cpu == "cpu-total"
)
4>生成指定查询数据
Flux 的yield()函数将过滤后的表作为查询结果输出。
Flux 会yield()在每个脚本的末尾自动假设一个函数,以便输出和可视化数据。yield()只有在同一个 Flux 查询中包含多个查询时,才需要显式调用。每组返回的数据都需要使用该yield()函数命
from(bucket:"example-bucket")
|> range(start: -15m)
|> filter(fn: (r) =>r._measurement == "cpu" andr._field == "usage_system" andr.cpu == "cpu-total"
)
|> yield()
5>数据转换
使用函数,将数据聚合为平均值、下采样数据等
//更新范围从最后一小时拉取数据
from(bucket:"example-bucket")
|> range(start: -1h)
|> filter(fn: (r) =>r._measurement == "cpu" andr._field == "usage_system" andr.cpu == "cpu-total"
)//以五分钟为间隔的窗口化数据
from(bucket:"example-bucket")
|> range(start: -1h)
|> filter(fn: (r) =>r._measurement == "cpu" andr._field == "usage_system" andr.cpu == "cpu-total"
)
|> window(every: 5m)//聚合窗口数据
from(bucket:"example-bucket")
|> range(start: -1h)
|> filter(fn: (r) =>r._measurement == "cpu" andr._field == "usage_system" andr.cpu == "cpu-total"
)
|> window(every: 5m)
|> mean()//添加时间列到聚合函数
from(bucket:"example-bucket")
|> range(start: -1h)
|> filter(fn: (r) =>r._measurement == "cpu" andr._field == "usage_system" andr.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" andr._field == "usage_system" andr.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" andr._field == "usage_system" andr.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语句
附录
官网地址:https://docs.influxdata.com/influxdb/v2.0/
相关文章:
InfluxDB 2 介绍与使用 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 新增的概念&…...
Qt QTreeView简单使用
QT-QTreeView使用方法 QTreeView: 用于显示树状结构数据,适用于树状结构数据的操作。 一、初始化 利用QStandardlternModel来初始化数据,标准的基于项数据的数据模型类, 每个项数据可以是任何数据类型。 // 初始化model QStandardItem…...
Wannacrypt蠕虫老树开花?又见Wannacrypt
Wannacrypt蠕虫是一个在2017年就出现的远古毒株,其利用永恒之蓝漏洞降维打击用户服务器,而后进行扩散勒索,曾经一度风靡全球,可谓是闻者伤心,听着落泪,因为这玩意解密是不可能 解密的。 而2023年的今天&am…...
结合基于规则和机器学习的方法构建强大的混合系统
经过这些年的发展,我们都确信ML即使不能表现得更好,至少也可以在几乎所有地方与前ML时代的解决方案相匹配。比如说一些规则约束,我们都会想到能否把它们替换为基于树的ml模型。但是世界并不总是黑白分明的,虽然机器学习在解决问题…...
Spring Security OAuth2实现多用户类型认证、刷新Token
原本的OAuth2登录支持用户名密码登录,现在还想支持另外用id号码和密码登录。但是OAuth2默认提供的UserDetailsService只允许传入一个参数:想要实现多种用户登录,是不是可以考虑loadUserByUsername方法携带多个参数呢?接下来记录一…...
云计算介绍,让你更了解云计算
同学们好! 第一次接触IT行业吗?没关系,看完这篇文章肯定会让你不再陌生。给自己几分钟时间,认真看完哦! 1、不知道什么是云计算? 网络计算云计算 官方定义是:通过网络提供可伸缩的分布式计算…...
阿里大佬翻遍全网Java面试文章,总结出这份1658页文档,GitHub收获25K+点赞
就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。这不又到了面试跳槽的黄金段,成功升职加薪,不成功饱受打击。当然也要注意&…...
【JDK1.8 新特性】Lambda表达式
1. 什么是Lambda表达式? Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达…...
【Vue.js】Vuex核心概念
文章目录全局状态管理模式Vuexvuex是什么?什么是“状态管理模式”?vuex的应用场景Vuex安装开始核心概念一、State1、单一状态树2、在 Vue 组件中获得 Vuex 状态3、mapState辅助函数二、Getter三、Mutation1、提交载荷(Payload)2、…...
react router零基础使用教程
安装既然学习 react router 就免不了运行 react安装 reactnpx create-react-app my-appcd my-appnpm start安装 react routernpm install react-router-dom如果一切正常,就让我们打开 index.js 文件。配置路由引入 react-router-dom 的 RouterProviderimport {Route…...
IOC三种依赖注入的方式,以及区别
目录构造方法注入(constructor injection)setter 方法注入(setter injection)接口注入(interface injection)三种方式比较构造方法注入(constructor injection) 构造方法中声明依赖…...
Ubuntu18安装新版本PCL-1.13,并和ROS自带PCL-1.8共存
文章目录1.安装新版本PCL-1.132.在工程中使用新版本的PCL-1.133.pcl-1.13误装到/usr/local/下如何卸载1.安装新版本PCL-1.13 下载PCL-1.13代码: 修改CMakeLists.txt文件,不编译vtk相关的代码:vtk的问题比较难解决,但是一般我们安…...
计算机图形学08:中点BH算法绘制抛物线(100x = y^2)
作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、算法原理二、…...
基于java的高校辅导员工作管理系统
摘 要网络技术的快速发展给各行各业带来了很大的突破,也给各行各业提供了一种新的管理模块,对于高校辅导员工作管理将是又一个传统管理到智能化信息管理的改革,设计高校辅导员工作管理系统的目的就是借助计算机让复杂的班级信息、学籍信息等管…...
字节3次都没裁掉的7年老测试。掌握设计业务与技术方案,打开上升通道!
前言职场中的那些魔幻操作,研发最烦的是哪个?“面对业务需求的时候,可能都听过这样一句话:这个很简单,直接开发,三天内上线;”朋友说:“产品听了流泪,测试见了崩溃&#…...
详细介绍关于链表【数据结构】
文章目录链表单链表尾插头插尾删第一种方式删除第二种头删查找pos之前插入pos位置删除pos后面插入pos位置后面删除链表 顺序表缺点: 空间不够了 需要扩容,但是扩容是有消耗的头部或中间位置需要插入或删除,需要挪动 ,但是挪动是…...
2.3 二分搜索技术
二分搜索算法是运用分治策略的典型例子。给定己排好府的 n个元素a10:n-1],现要在这n个元素中找出一特定元素3。首先较容易想到的是用顺序搜索方法,逐个比较a10:1-1]中元素,直至找出元素,或搜索遍整个数组后确定,不在其…...
RWEQ模型的土壤风蚀模数估算、其变化归因分析
土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一,土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风蚀荒漠化面积达160.74104km2,占国土总面积的16.7%,严重影响这些地区的资源开发和社会经…...
学习streamlit-1
Streamlit A faster way to build and share data apps streamlit在几分钟内就可以将数据脚本转换为可共享的web应用程序,并且是纯python编程,无需前端经验。 快速开始 streamlit非常容易上手,运行demo只需2行代码: pip install…...
GPS定位知识介绍
GPS定位和网络定位 GPS定位需要卫星参与,设备借助搜到的卫星讯号,计算出设备的位置。网络定位是指利用基站、WIFI MAC,获取一个粗略的位置。3D定位和2D 定位 3D一般是指使用至少4颗以上卫星完成的定位。2D一般使用3颗卫星完成的定位过程。...
【Linux】理解Linux环境变量
🍎作者:阿润菜菜 📖专栏:Linux系统编程 初识环境变量 什么是环境变量 我们平常所用的Linux指令其实也是可执行程序,和我们自己写的二进制程序没什么两样,那么为什么我们在执行自己的程序的时候需要加上 ./…...
ISCSI块存储-集群
ISCSI块存储-集群 1、ISCSI概述 ISCSI与SCSI原理对比 底层都是硬盘 ISCSI第二层就是通过gateway/网络获取–>SCSI:是直连获取 常见的用于ISCSI服务的网络拓扑类型 SAN:Storage Area Network:存储区域网络; 多采用告诉光纤…...
11.Maxwell 部署
Maxwell 部署 一、环境准备 1、确保服务器上已经安装好了zookeeper、kafka、MySQL软件; (1)启动zookeeper: /usr/app/zookeeper3.4/bin/zkServer.sh start(2)启动三台主题的kafka 启动:bin/kafka-serv…...
一文速学-GBDT模型算法原理以及实现+Python项目实战
目录 前言 一、GBDT算法概述 1.决策树 2.Boosting 3.梯度提升 使用梯度上升找到最佳参数 二、GBDT算法原理 1.计算原理 2.预测原理 三、实例算法实现 1.模型训练阶段 1)初始化弱学习器 2)对于建立M棵分类回归树: 四、Python实现 …...
前端——2.HTML基本结构标签
这篇文章我们从0来介绍一下HTML的相关标签内容 目录 1.HTML语法规范 1.1基本语法概述 1.2标签关系 2.HTML的基本结构标签 2.1第一个HTML网页 2.2基本结构标签总结 1.HTML语法规范 下面,我们来看一下HTML的语法规范的内容 1.1基本语法概述 首先,…...
OAK深度相机使用不同镜头和本地视频流进行模型推理
编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 ▌前言 Hello,大家好,这里是OAK中国,我是助手…...
[项目] Boost搜索引擎
目录 1.项目相关背景 2.项目宏观原理 3.技术栈和项目环境 4.正排索引&&倒排索引 5.去标签与数据清洗 6.构建索引模块Index 6.1正排索引 6.2 建立倒排 jiebacpp使用 建立分词 7.搜索引擎模块Searcher Jsoncpp -- 通过jsoncpp进行序列化和反序列化 处理Cont…...
解决新版QGIS找不到Georeferencer插件
目录1. 问题分析1.1 去 Raster 找,没找到1.2 去插件搜,未搜到1.3 插件库里也搜不到2. 解决办法在 QGIS 3.30中,按常规办法,找不到 Georeferencer插件,它并没有被安装,在库中也找不到它, 请问问题…...
c---冒泡排序模拟qsort
一、冒泡排序 二、冒泡排序优化排各种类型数据 文章目录一、冒泡排序二、冒泡排序优化排各种类型数据冒泡排序 冒泡排序原理:两两相邻元素进行比较 初级版 void bulle_sort(int* a, int sz) {int i 0;for (int i 0; i < sz-1; i){int j 0; for (j 0; j…...
Java知识复习(十四)JS
1、数据类型 基本数据类型:null、undefinde、boolean、string、number、symbol(ES6新增)引用数据类型:Function、Array、Object、Map和Set(ES6新增) 2、let、var和const的区别 var定义的变量,…...
哪个网站专业做安防/百度极速版推广
爬虫项目介绍 有一定的复杂性可以灵活调整项目的复杂性平衡语言/爬虫之间的比重通用爬虫,如baidu,google聚焦爬虫,从互联网获取结构化数据 把网页转换成数据 go语言的爬虫库/框架 henrylee2cn/pholcusgocrawlcollyhu17889/go_spider 不使用现成爬虫库/框架来写一个…...
网站首页滚动图怎么做/抖音seo排名优化公司
第十三周 所花时间(包括上课) 9小时(上课7小时) 代码量(行) 360 博客量(篇) 3 了解到的知识点 数据库连接的复习,以及对增删改查的复习 转载于:https://www.cnbl…...
煤矿网站建设/四川疫情最新情况
http://blog.csdn.net/xnby/article/details/50782913 一句话总结:spark是一个基于内存的大数据计算框架, 上层包括了:Spark SQL类似HiveQL, Spark Streaming 实时数据流计算,MLlib 机器学习算法包,GraphX …...
本地安装wordpress nginx/软文投放平台有哪些?
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量代码,就能够快速的抓取到数据内容。Scrapy使用了Twisted异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架…...
wordpress 子主题入口/电子商务主要干什么
-该虚拟工厂能将新服务从构思到市场投放的时间,由三年缩短至八个月 上海2017年5月8日电 /美通社/ -- 埃森哲近期与施耐德电气合作开发出“施耐德电气数字工厂”。通过这座虚拟工厂,施耐德电气能够在预测性维护、资产监控和能源优化等领域,快速…...
电子商城网站开发价格/百度seo排名主要看啥
伪类(pseudo-class)& 伪元素(pseudo-element) 伪类和伪元素在web开发中用的好的话,可以说犹如神助。 但一定要分清楚,什么是伪类,什么是伪元素。 如何区分伪元素与伪类? 答&…...