2.InfluxDB2.x数据库实践使用

[TOC]


0x03 InfluxDB 操作实践

描述: 在 V2.x 版本中 influx 客户端命令已独立处理, 其与V1.x版本的 influx cli 参数与使用大不相同, 此处主要讲解V2.x相关语法参数,但也会简单提及一下V1.x版本语法及其使用。

InfluxDB V2.x 版本

描述: 在1.x版本中客户端支持SQL语句,但是在2.x版本中交互式命令行已经不支持SQL语法了,这对熟悉关系型数据库的人来说可能会不太友好。

官方文档参考: https://docs.influxdata.com/influxdb/v2.2/reference/cli/

核心概念

  • Organization : 是一组用户的工作空间,一个组下用户可以创建多个bucket。
  • bucket : 所有的 influxdb数据都存储在bucket中,bucket结合了数据库和保存期限(每条数据会被保留的时间)的概念,类似于RDMS的database的概念。bucket 属于一个 organization 下管理。
  • Measurement :是所有 tags fields 和时间的容器,是一个数据集的容器,与RDMS的table的概念类似
  • Fields : 数据属性包括field key 和 field value 分别存储在 _field和 _value当中, 并且一个measurement中必须包含至少一个filed field set 表示在同一时间内 所有fields的集合。 field key 是一个代表属性名称的字段,在示例数据中bees和ants就是field key field value 是对应 field key 的值, 在示例数据中在2019-08-18T00:00:00Z 该时间点 bees的值为23,而ants的值为30。
  • Tags : 和Fields类似,Tags也有 key value。但与Fields不同的是,field key存储在_field列中 而tag key则是本身就是列。 tag key 和 tag value 在Line Protocl中有更为直观的体现
  • timestamp : 所有存储在influxdb中的数据都有一个_time列用来记录时间,在磁盘中以纳秒之间戳存储,但客户端查询时返回的是格式化的更易读的 RFC3339 UTC时间格式。

演示数据如下:

_time 	_measurement 	location 	scientist 	_field 	_value
2019-08-18T00:00:00Z 	census 	klamath 	anderson 	bees 	23
2019-08-18T00:00:00Z 	census 	portland 	mullen 	  ants 	30
2019-08-18T00:06:00Z 	census 	klamath 	anderson  bees 	28
2019-08-18T00:06:00Z 	census 	portland 	mullen 	  ants 	32

温馨提示: Fields 和 Tags 简单来说他们都是一组键值对的集合。 在存储形式上 field 的 key 被存储在一个名为_field的列中, 而tag的key则是以列头的形式存在的, 该列的内容即为tag value, 另外值得注意的是 field 和 tag 都可以用来存储数据,但tag只能存储字符串类型数据(即不可以在influx查询中使用 mean()、max()等聚合函数),而filed既可以存储字符串类型又可以存储数值类型数据。

Line Protocol 语法

# 以下取自官方文档
# 语法
<measurement>[,<tag_key>=<tag_value>[,<tag_key>=<tag_value>]] <field_key>=<field_value>[,<field_key>=<field_value>] [<timestamp>]

# 示例
student,name=weiyigeek id=10001,age=20 [1654848441]

温馨提示: 一个\n代表一条数据协议的结束,所以数据内容不支持\n,如果非要使用请按照 Line Protocol 支持部分特殊字符但需要进行转义

以 Influx Client 操作 influxdb

语法参数:

NAME: influx - Influx Client
USAGE:  influx [command]
COMMANDS:
  version              Print the influx CLI version
  write                Write points to InfluxDB
  bucket               Bucket management commands
  completion           Generates completion scripts
  query                Execute a Flux query
  config               Config management commands
  org, organization    Organization management commands
  delete               Delete points from InfluxDB
  user                 User management commands
  task                 Task management commands
  telegrafs            List Telegraf configuration(s). Subcommands manage Telegraf configurations.
  dashboards           List Dashboard(s).
  export               Export existing resources as a template
  secret               Secret management commands
  v1                   InfluxDB v1 management commands # 管理 v1 管理命令接口
  auth, authorization  Authorization management commands
  apply                Apply a template to manage resources
  stacks               List stack(s) and associated templates. Subcommands manage stacks.
  template             Summarize the provided template
  bucket-schema        Bucket schema management commands
  ping                 Check the InfluxDB /health endpoint
  setup                Setup instance with initial user, org, bucket
  backup               Backup database
  restore              Restores a backup directory to InfluxDB
  remote               Remote connection management commands
  replication          Replication stream management commands
  server-config        Display server config
  help, h              Shows a list of commands or help for one command

实践案例:

初始化连接配置管理

# 0.InfluxDB 服务端启动后需使用 Influx CLI 进行初始化.
# 依次输入:用户名、密码、组织名称、桶名称、数据保存时间(过期自动删除,0表示永久保存)。
$ influx setup --host http://localhost:8080
> Welcome to InfluxDB 2.0!
? Please type your primary username admin
? Please type your password *********
? Please type your password again *********
? Please type your primary organization name test
? Please type your primary bucket name db01
? Please type your retention period in hours, or 0 for infinite 0
? Setup with these parameters?
  Username:          admin
  Organization:      test
  Bucket:            db01
  Retention Period:  infinite
 Yes
User    Organization    Bucket
admin   test            db01


# 1.避免不必要的错误以下influx命令均手动传递token, 执行过后所有需要该token的指令就不需要指定token.
$ influx config create --active -n default -t 1VreF2TZuek7V6hmnquF
$ influx config create -a -n prometheus-influxdb -t 1VreF2TZuek7V6hmnquF -o primary -u http://10.98.134.121:8086

# 2.显示创建的链接字符串、更新设置、以及删除指定名称的连接配置信息.
$ influx config ls
$ influx config set -a -n prometheus-influxdb -t <更改Token> 
$ influx config rm
  • 用户管理
# 1.创建用户user密码为WeiyiGeek
influx user create -n user -p WeiyiGeek -o primary -t <your-token>
  # ID                      Name
  # 097f22b577ee5000        user

# 2.查看用户
influx user list
  # ID                      Name
  # 097496fcb920e000        admin
  # 097f22b577ee5000        user

# 3.更新用户
influx user update -i 097f22b577ee5000 -n weiyigeek -t <your-token>
  # ID                      Name
  # 097f22b577ee5000        weiyigeek

# 4.修改密码, 指令执行后CLI会引导密码修改
influx user password -n weiyigeek -t <your-token>
  # ? Please type new password for "weiyigeek" *********
  # ? Please type new password for "weiyigeek" again *********
  # Successfully updated password for user "weiyigeek"

# 5.删除用户
influx user delete -i 097f22b577ee5000 -t <your-token>
  # ID                      Name    Deleted
  # 097f22b577ee5000        user    true
  • Auth Token票据管理
# 1.创建 primary org下的所有权限的Token票据
influx auth create -o primary --all-access
  • Organization 管理 描述: 官方建议单个influxdb实例中建组不超过20个,超过该值将可能会对influxdb性能造成影响。
# 创建Organization
influx org create -n weiyigeek -d "This is demo org"
  # ID                      Name
  # a33966bd13905e7a        weiyigeek

# 查看已存在的 org
influx org list
  # ID                      Name
  # a33966bd13905e7a        weiyigeek
  # cf9b383e6da9c4a8        primary

# 更新 org 名称
influx org update -i a33966bd13905e7a -n demo
  # ID                      Name
  # a33966bd13905e7a        demo

# 删除指定 org
influx org delete -i a33966bd13905e7a
  # ID                      Name    Deleted
  # a33966bd13905e7a        demo    true
  • bucket 管理 描述: 在 bucket 内的数据是有保存期限 (retention-period-duration), 在其创建之初就会指定。
# 创建 bucket
# 在 demo 的 org 下创建一个 test-bucket 的 bucket。
influx bucket create -n test-bucket -o demo -r 72h5m -t <your-token>
  ID                      Name            Retention       Shard group duration    Organization ID         Schema Type
  b54d88b80225fc22        test-bucket     72h5m0s         24h0m0s                 08472f250ef4212e        implicit

# 更新 bucket (名称、数据保存时间)
influx bucket update -i b54d88b80225fc22 -n demo-bucket
influx bucket update -i b54d88b80225fc22 -r 64h0m0s
  ID                      Name            Retention       Shard group duration    Organization ID         Schema Type
  b54d88b80225fc22        demo-bucket     64h0m0s         24h0m0s                 08472f250ef4212e        implicit

# 查看 bucket (列出指定或者所有 buckets 信息)
influx bucket list -o primary
  ID                      Name            Retention       Shard group duration    Organization ID         Schema Type
  0db228578a8a7927        _monitoring     168h0m0s        24h0m0s                 cf9b383e6da9c4a8        implicit
  9e2442e2d584ff53        _tasks          72h0m0s         24h0m0s                 cf9b383e6da9c4a8        implicit
  e4fef2474b70834e        primary         infinite        168h0m0s                cf9b383e6da9c4a8        implicit

influx bucket list -n demo-bucket -o demo 
  ID                      Name            Retention       Shard group duration    Organization ID         Schema Type
  b54d88b80225fc22        demo-bucket     64h0m0s         24h0m0s                 08472f250ef4212e        implicit

# 删除 bucket (指定ID或者指定名称)
influx bucket delete -n demo-bucket -o demo 
influx bucket delete -i b54d88b80225fc22
  ID                      Name            Retention       Shard group duration    Organization ID         Schema Type      Deleted
  b54d88b80225fc22        demo-bucket     26h0m0s         24h0m0s                 08472f250ef4212e        implicit true

温馨提示: 指定数据保留时间单位如下所示:

# 数据保留时间单位在以下单位中取值:
#纳秒 (ns)
#微秒 (us or µs)
#毫秒 (ms)
#秒 (s)
#分 (m)
#时 (h)
#日 (d)
#周 (w)
  • measurement 管理
# 此处为了演示创建一个名为 demo  org 下的 demo_user 用户。
influx user create -n demo_user -p WeiyiGeek -o demo
influx auth create -u demo_user -o demo  --operator --description "demo_user 用户的认证Token"
  # ID                      Description             Token                                                   User Name        User ID                 Permissions
  # 097f2e5731ae5000        demo_user 用户的认证Token       nxlkweOIxTOYQhNzI4QtuBHrKQtyOLFkA2KzJsBpO71hxZT7i6rmdyIgSuexuKbda1qL9x8vjJWUUH5rzBleKA==== demo_user       097f2d6f8bee5000        [read:/authorizations write:/authorizations read:/buckets write:/buckets read:/dashboards write:/dashboards read:/orgs write:/orgs read:/sources write:/sources read:/tasks write:/tasks read:/telegrafs write:/telegrafs read:/users write:/users read:/variables write:/variables read:/scrapers write:/scrapers read:/secrets write:/secrets read:/labels write:/labels read:/views write:/views read:/documents write:/documents read:/notificationRules write:/notificationRules read:/notificationEndpoints write:/notificationEndpoints read:/checks write:/checks read:/dbrp write:/dbrp read:/notebooks write:/notebooks read:/annotations write:/annotations read:/remotes write:/remotes read:/replications write:/replications]
influx bucket update -id 2d0184d3af5ec8b2 --retention 0 # 要在bucket上设置的新保留时间,或为0表示无限

# 创建 名称为 student 的 measurement
# - dryrun 尝试写入,即写入到stdout而不是InfluxDB。
influx write dryrun -b demo-bucket -o demo 'student,std_name=weiyigeek id=10001,age=28,score=77'
  # student,name=weiyigeek,addr="中国重庆" id=10001,age=20 1654848441
# - 写入到InfluxDB (由于我们全局adminToken也可以不指定 demo_user 用户的Token),为了看到效果建议没执行1s在执行
# -p ns 指定数据插入的时间精度。
influx write -b demo-bucket -o demo 'student,std_name=weiyigeek id=10001,age=28,score=77' -p ns
influx write -b demo-bucket -o demo 'student,std_name=weiyigeek id=10001,age=29,score=88' -t 'nxlkweOIxTOYQhNzI4QtuBHrKQtyOLFkA2KzJsBpO71hxZT7i6rmdyIgSuexuKbda1qL9x8vjJWUUH5rzBleKA==' -p ns
influx write -b demo-bucket -o demo 'student,std_name=weiyigeek id=10001,age=30,score=99' -t 'nxlkweOIxTOYQhNzI4QtuBHrKQtyOLFkA2KzJsBpO71hxZT7i6rmdyIgSuexuKbda1qL9x8vjJWUUH5rzBleKA==' --compression gzip -p ns
 
# 查询 student 表中的数据,此处利用编写的Flux Script示例进行查询。
$ cat influx_query.sql 'from(bucket: "demo-bucket")
  |> range(start: -1d, stop: "")
  |> filter(fn: (r) => r["_measurement"] == "student")
  |> filter(fn: (r) => r["_field"] == "score")
  |> yield(name: "mean")'

$ influx query -o demo -r -f influx_query.sql
#group,false,false,true,true,false,false,true,true,true
#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,double,string,string,string
#default,mean,,,,,,,,
,result,table,_start,_stop,_time,_value,_field,_measurement,std_name
,,0,2022-06-09T10:49:15.292083412Z,2022-06-10T10:49:15.292083412Z,2022-06-10T09:51:29.180459209Z,77,score,student,weiyigeek
,,0,2022-06-09T10:49:15.292083412Z,2022-06-10T10:49:15.292083412Z,2022-06-10T09:51:34.706980312Z,88,score,student,weiyigeek
,,0,2022-06-09T10:49:15.292083412Z,2022-06-10T10:49:15.292083412Z,2022-06-10T09:51:39.036913603Z,99,score,student,weiyigeek


# 删除 student 表中指定时间范围内的数据
influx delete -b demo-bucket -o demo -p std_name=weiyigeek --start '2022-06-05T08:26:39.455Z' --stop '2022-06-10T09:50:39.455Z'

WeiyiGeek.influx-cli命令行查询

温馨提示: 除了指定FS查询文件外, 可通过 influx query打开查询管道(pipe),然后输入Flux查询语句,然后按住ctrl+d进行执行查询。

温馨提示: InfluxDB2.x 提供了很多种方式执行Flux或者InfluxQL,例如,UI的Data Explorer、Influx CLI、InfluxDB API和REPL。

  • 数据备份与恢复 描述: influxdb 使用 influx 命令进行数据和元数据的备份,非常注意 1.x 和 2.x备份数据不兼容。
# V2.x 的备份方法
influx backup ./back -t 58s6gl9hD8lk-AS_i6mUaYMMCGe6N1vIfVpJUo2xJ2HkWMlWx2yp7r7IKZsyF6h8vQdTPfIpGyHtbALayLgUQw==

# V2.x 的数据恢复
influx restore ./back --bucket demo-bucket

温馨提示: 如果恢复的 bucket 名称已经在现有数据库中存在 则使用–new-bucket 为恢复的数据库指定一个新名称并将数据恢复到新名称的bucket中

以 API 请求操作 influxdb

描述: 官方文档参考 https://docs.influxdata.com/influxdb/v2.2/reference/api/

Write API - 数据写入

将org,bucket 通过url传参形式添加到参数中

添加或修改Accept请求头为 appliction/json(实测该接口不反回数据,可选填)

添加或修改Content-Type请求头为 text/plain

将Line Protocol的数据添加到请求体中

curl --request POST \
"http://10.98.134.121:8086/api/v2/write?org=demo&bucket=demo-bucket&precision=ns" \
  --header "Authorization: Token nxlkweOIxTOYQhNzI4QtuBHrKQtyOLFkA2KzJsBpO71hxZT7i6rmdyIgSuexuKbda1qL9x8vjJWUUH5rzBleKA==" \
  --header "Content-Type: text/plain; charset=utf-8" \
  --header "Accept: application/json" \
  --data-binary 'hobby,name=weiyigeek,city=ChongQing id=1002,love=computer'

Query API - 数据写入

  • 将org或orgID通过url传参的形式添加到参数中
  • 添加或修改Accept请求头为 appliction/csv (Postman中不需要添加)
  • 添加或修改Content-Type请求头为 application/vnd.flux (可省略)
  • 将查询语句放在请求体中

使用PostMan进行influxDB的API调用 描述: 在使用Postman测试时我们需要先进行鉴权设置,在进入Postman Collections 或单个请求的 Authorization 功能选项。 例如:

  • Type 选择API Key
  • Key 填入 Authorization
  • Value 填入 Token YOUR_TOKEN
  • Add to 选择Header

WeiyiGeek.Postman进行influxDB的API调用


0x0n 入坑出坑

InfluxDB 2.X

问题1.在执行influx write写入数据到infludb时报failure writing points to database: partial write: points beyond retention policy dropped=1错误。

  • 错误信息:
influx write -b demo-bucket -o demo 'student,std_name=weiyi id=10001,age=29,score=100 1654850189241' -t 'nxlkweOIxTOYQhNzI4QtuBHrKQtyOLFkA2KzJsBpO71hxZT7i6rmdyIgSuexuKbda1qL9x8vjJWUUH5rzBleKA==' --precision ms ---http-debug
Error: failed to write data: 422 Unprocessable Entity: failure writing points to database: partial write: points beyond retention policy dropped=1
  • 解决办法: 将 demo-bucket 桶的新保留时间设置为0.
$ influx bucket update -id 2d0184d3af5ec8b2 --retention 0
  ID                      Name            Retention       Shard group duration    Organization ID         Schema Type
  2d0184d3af5ec8b2        demo-bucket     infinite        24h0m0s                 08472f250ef4212e        implicit

参考地址: https://www.jianshu.com/p/268fca65f10e

原文地址:https://cloud.tencent.com/developer/article/2129886

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340