INfluxDB教程

2,115 阅读4分钟

InfluxDB 2.1教程

与1.x版本对比

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

安装

不同版本教都在

下载安装参考文档

启动INfluxDB

  1. 以Windows为例, 打开 PowerShell
> cd -Path 'C:\Program Files\InfluxData\influxdb'   进入influxDB所在的位置
> ./influxd                                          启动influxd
  1. 通过UI界面设置InfluxDB(也可选择cli)

​ 至此,启动InfluxDB启动成功

操作InfluxDB(写/查)

操作InfluxDB写有三种方式

  1. InfluxDB v2 API
  2. cli(command line interface) 命令行工具
  3. client libraries(开发语言操作)

API操作InfluxDB

InfluxDB提供了丰富的API接口,通过Postman执行可操作InfluxDB

访问 http://localhost:8086/docs 可查看API文档

通过Token认证

使用API需要认证,V2版本的只能通过Token进行认证,Token可从UI页面查看

image-20220315111851189

通过API写数据

写数据到bucket

需要的信息有 organization bucket API token InfluxDB URL

Write Data

curl --request POST \
"http://localhost:8086/api/v2/write?org=YOUR_ORG&bucket=YOUR_BUCKET&precision=ns" \
  --header "Authorization: Token YOUR_API_TOKEN" \
  --header "Content-Type: text/plain; charset=utf-8" \
  --header "Accept: application/json" \
  --data-binary '
    airSensors,sensor_id=TLM0201 temperature=73.97038159354763,humidity=35.23103248356096,co=0.48445310567793615 1630424257000000000
    airSensors,sensor_id=TLM0202 temperature=75.30007505999716,humidity=35.651929918691714,co=0.5141876544505826 1630424257000000000
    '

可通过Postman根据官方文档写入数据

image-20220315162928506

UI操作InfluxDB

Write Data

通过UI页面写入数据有两种格式,一种是CSV Data,一种是Line Protocol,按照页面介绍的语法格式上传文件,可向对应的bucket写入数据

image-20220315160243931

client libraries

在UI界面提供有操作InfluxDB Demoimage-20220315163413040

Flux 数据模型

image-20220315171506787

Stream of tables(数据表流)

一个或多个表的集合, 查询数据源返回的结果是一个数据表流

Table

被组键分开的列的集合

Column

列是相同的基本类型的值的集合

Row

行是列的值关联的集合

Group key

一个组键定义了一个表中包含哪一列和指定的列.

在一个组键列中,一个表中所有行包含相同的值

数据表流中的每个表都有一个唯一的组键

总结: InfluxDB的查询会以数据表流(几张表)的方式呈现,各表之间分割的依据是Group Key,即tag

Flux语法

Flux is InfluxData’s functional data scripting language designed for querying, analyzing, and acting on data.

Flux 是为InfluxDB设计的 查询 |分析 的脚本语言

from(bucket: "example-bucket")
    |> range(start: -1d)
    |> filter(fn: (r) => r._measurement == "example-measurement")
    |> mean()
    |> yield(name: "_results")
  • from() 检索数据的数据源,也就是bucket

  • Pipe-forward operator (|>) 管道操作符,将输出送至接下来的语句进行处理

  • range(), filter(), 都是基于列名过滤数据,range()是通过time字段过滤,filter通过列名过滤

    |> range(start: -1h)  开始时间 ---> 现在
    |> range(start: -1h, stop: -10m)  使用相对时间进行设置
    |> range(start: 2021-01-01T00:00:00Z, stop: 2021-01-01T12:00:00Z)  使用绝对时间进行设置
    
  • mean() 从返回的数据源中计算平均值

  • yield() 向用户生成结果。

  • group(): modify group keys

  • window(): modify _start and _stop values of rows to group data by time

  • pivot(): pivot column values into rows

  • drop(): drop specific columns

  • keep(): keep specific columns and drop all others

重构表结构

改变输出的数据表流中表的区分方式

使用group() 可将多个表聚合成一张表

InfluxDB官方文档

flux语法文档