InfluxDB 2 介绍与使用 flux查询 数据可视化

news2024/9/17 8:24:14

一、关键概念

相比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
  • 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语句

附录

官网地址:https://docs.influxdata.com/influxdb/v2.0/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/393827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务 分布式搜索引擎 Elastic Search RestAPI

文章目录⛄引言一、RestAPI⛅导入数据⏰mapping映射分析⚡初始化RestClient二、索引库操作⌚创建索引库✒️删除索引库⚡判断索引库是否存在⛵小结⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能&#x…

synchronized 与 volatile 关键字

目录1.前言1.synchronized 关键字1. 互斥2.保证内存可见性3.可重入2. volatile 关键字1.保证内存可见性2.无法保证原子性3.synchronized 与 volatile 的区别1.前言 synchronized关键字和volatile是大家在Java多线程学习时接触的两个关键字,很多同学可能学习完就忘记…

QSGS四参数随机生长2D软件 quartet structure generation set

软件简介 AbyssFish四参数随机生长2D软件采用四参数随机生长算法quartet structure generation set (QSGS),可用于构建二维随机孔隙图。 软件提供图片长度、宽度;随机生长算法的分布概率、生长概率、概率密度(暂不考虑多相材料相互作用&…

可视化项目管理,控制项目进度,项目经理需要做好以下工作

对于项目的管理者来说,项目信息透明,能够更容易让管理者发现项目中的问题,及时找到问题的原因和相关任务的责任人。 当项目信息能相对精准地呈现给管理者时,也能促进项目成员也能更加认真负责的完成任务,不会找借口推…

Elasticsearch使用——中级篇

在上一篇,已经导入了大量数据到elasticsearch中,实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。本篇,研究下elasticsearch的数据搜索功能。分别使用DSL和RestClient实现搜索。1.DSL查询文档elasticsearch的…

电子技术——功率耗散

电子技术——功率耗散 如今许多集成电路系统都是电池供电的,对于功率耗散限制很严格。其他高性能电路,例如计算机服务器机房产品,有着严格的热耗散功率限制。所以,减小IC中的功率耗散变成了IC设计中最重要的挑战性的设计。 本节…

层次聚类:BIRCH 聚类、Lance–Williams equation

前言 如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。 BIRCH 聚类 要求数据为向量形式,则通过构建 CF-tree (Clustering Feature Tree) 实现可扩展地高效聚类&#x…

嵌入式linux物联网毕业设计项目智能语音识别基于stm32mp157开发板

stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器,集成2个Cortex-A7核和1个Cortex-M4 核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRT…

数据结构之二叉树(上)

文章目录前言一、二叉树的定义二、二叉树的几种情况三、特殊的二叉树1. 满二叉树2. 完全二叉树四、二叉树的存储结构1. 顺序存储2. 链式存储五、二叉树的性质总结前言 本文主要介绍了二叉树的基本概念以及二叉树的存储结构 一、二叉树的定义 一棵二叉树是结点的一个有限集合&…

Fortinet 发布《2022下半年度全球威胁态势研究报告》,七大发现值得关注!

全球网络与安全融合领域领导者Fortinet(NASDAQ:FTNT),近日发布《2022 下半年度全球威胁态势研究报告》。报告指出,相对于组织攻击面的不断扩大以及全球威胁态势的持续演进,网络犯罪分子设计、优化技术与战术…

助你加速开发效率!告别IDEA卡顿困扰的性能优化技巧

在现代软件开发中,IDE(集成开发环境)是一个必不可少的工具。IntelliJ IDEA是一个广受欢迎的IDE,但有时候IDE的性能可能会受到影响,导致开发人员的工作效率降低。本文将介绍一些可以提高IDE性能的技巧,帮助开…

yii2项目使用frp https2http插件问题

yii2内网项目,使用frp进行内网穿透,使用 https2http插件把内网服务器http流量转成https,会存在一个问题:当使用 $this->redirect(...) 或 $this->goHome() (其实用的也是前者)等重定向时,…

JavaScript 高级3 :函数进阶

JavaScript 高级3 :函数进阶 Date: January 19, 2023 Text: 函数的定义和调用、this、严格模式、高阶函数、闭包、递归 目标: 能够说出函数的多种定义和调用方式 能够说出和改变函数内部 this 的指向 能够说出严格模式的特点 能够把函数作为参数和返…

Spring Boo集成RocketMQ

一、介绍 Producer:生产者,用来发送消息Consumer:消费者,用来消费消息NameServer:服务注册中心,用于注册生产者、消费者,存储Broker路由 并提供给生产者和消费者Broker:用于存储消息…

【源码】Java版云HIS系统:公立二甲医院应用三年 系统运行稳定、功能齐全

SaaS模式Java版云HIS系统源码,拥有自主知识产权,采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发。具有强大的可扩展性,二次开发方便快捷。 文末卡片获取联系! SaaS模式Java版…

Python 开发-批量 FofaSRC 提取POC 验证

数据来源 学习内容和目的: ---Request 爬虫技术,lxml 数据提取,异常护理,Fofa 等使用说明---掌握利用公开或 0day 漏洞进行批量化的收集及验证脚本开发Python 开发-某漏洞 POC 验证批量脚本---glassfish存在任意文件读取在默认4…

canal admin管理端配置(二)

下载安装 下载地址: 下载解压即可 配置 修改canal.admin-1.1.5\conf\application.yml server:port: 8089 #端口根据是否冲突修改 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8spring.datasource:address: 192.0.16.12:3306#数据库ip和端口…

Day09-网页布局实战定位

文章目录网页布局实战一 表格案例1-单元格的合并案例2-随堂练习二 定位1 文档流2 position 共有四个属性值:3 固定定位案例1-右下角广告案例2-头部固定案例3-div居中4 相对定位案例1-基础案例案例2-文字居于水平线中间5 绝对定位案例1-基础案例6 定位的层次关系 z-index案例1踩…

免费下载丨一看即会,Serverless 技术进阶必读百宝书

过去一年,全球正在加速推进云计算的 Serverless 化进程。Serverless 架构已经逐渐从“被接受”走向了“被学习”和“被应用”。云的产品体系正在 Serverless 化,从计算、存储、数据库到中间件,越来越多的云产品采用了 Serverless 模式。服务器…

筑基九层 —— 指针详解

目录 前言: 指针详解 前言: 1.CSDN由于我的排版不怎么好看,我的有道云笔记比较美观,请移步有道云笔记 2.修炼必备 1)入门必备:VS2019社区版,下载地址:Visual Studio 较旧的下载 -…