Docker安装InfluxDB
时序型数据库
时序数据库就是存放事件序列数据的数据库,需要支持时序数据的快速写入、持久化、多维度的聚合查询等基本功能。
时间序列数据
时间序列数据是基于时间的一系列数据。在有时间的坐标中将这些数据点连成线,往过去看可以做成多纬度报表,揭示其趋势性、规律性、异常性;往未来看可以做大数据分析,机器学习,实现预测和预警。
数据写入
- 写入平稳、持续、高并发和高吞吐:时序数据的写入是比较平稳的,这点与应用数据不同,应用数据通常与应用的访问量成正比,而应用的访问量通常存在波峰波谷。时序数据的产生通常是以一个固定的时间频率产生,不会受其他因素的制约,其数据生成的速度是相对比较平稳的。
- 写多读少:时序数据上95%-99%的操作都是写操作,是典型的写多读少的数据。这与其数据特性相关,例如监控数据,你的监控项可能很多,但是你真正去读的可能比较少,通常只会关心几个特定的关键指标或者在特定的场景下才会去读数据。
- 实时写入、无更新:时序数据的写入是实时的,且每次写入都是最近生成的数据,这与其数据生成的特点相关,因为其数据生成是随着时间推进的,而新生成的数据会实时的进行写入。数据写入无更新,在时间这个维度上,随着时间的推进,每次数据都是新数据,不会存在旧数据的更新,不过不排除人为的对数据做订正。
数据查询
- 按时间范围读取
- 最近的数据被读取的概率高
- 历史数据粗粒度查询的概率高
- 多种精度查询
- 多维度分析
数据存储
- 数据量大:拿监控数据来举例,如果我们采集的监控数据的时间间隔是1s,那一个监控项每天会产生86400个数据点,若有10000个监控项,则一天就会产生864000000个数据点。在物联网场景下,这个数字会更大。整个数据的规模,是TB甚至是PB级的。
- 冷热分明:时序数据有非常典型的冷热特征,越是历史的数据,被查询和分析的概率越低。 具有时效性:时序数据具有时效性,数据通常会有一个保存周期,超过这个保存周期的数据可以认为是失效的,可以被回收。一方面是因为越是历史的数据,可利用的价值越低;另一方面是为了节省存储成本,低价值的数据可以被清理。
- 多精度数据存储:在查询的特点里提到时序数据出于存储成本和查询效率的考虑,会需要一个多精度的查询,同样也需要一个多精度数据的存储。
InfluxDB
InfluxDB是什么
- InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖
- InfluxDB在DB-Engines的时序数据库类别里排名第一
InfluxDB相关概念
- Database:InfluxDB可以创建数据库,一个数据库可以包含多个user、保存策略、schemaless ,支持随时灵活创建mersurement
- Measurement:相当于表的概念;
- Tags:是一些kv的结构,标签会被用来建立索引;
- Fields:是保存真实数据的结构,也是kv结构,但是不会被用来建立索引;
- Point: 代表了一条记录,可以理解为关系型数据库中的一条记录;
- Timestamp:既然InfluxDB被称之为时序数据库,少了时间是不可能的,每条记录必须要有一个时间戳;
- Series:是由Measurement+Tags组成的
InfluxDB的优点
InfluxDB 自带的各种特殊函数如求标准差,随机取样数据,统计数据变化比等,使数据统计和实时分析变得十分方便。 此外它还有如下特性:
- 内置 HTTP 接口,使用方便
- 数据可以打标记,这样查询可以很灵活
- 类 SQL 的查询语句
- 安装管理很简单,并且读写数据很高效
- 能够实时查询,数据在写入时被索引后就能够被立即查出
InfluxDB版本
InfluxDB目前推出了2.0版本,由于改动较大,所以和1.x版本并存。目前官方推荐的 稳定版本依旧是1.x版本。2.0主要的更改包括以下内容:
- 集成了TICK组件,一键安装
- 安全集成,所有的请求都需要通过token
- 集成管理页面,支持更为强大的统计和分析功能
- 支持新的查询语言Flux,提供更为强大的查询和处理功能
- 增加了面向IoT和边缘计算的功能,能够在 ingestion point 汇总和分析时间序列数据
- 启动了新的存储引擎InfluxDB Iox,采用Rust语言编写
使用 Docker 从 InfluxDB 1.x 升级到 2.1 |InfluxDB OSS 2.1 文档 (influxdata.com)
安装InfluxDB 2.0版本
安装 InfluxDB |InfluxDB OSS 2.1 文档 (influxdata.com)
创建一个新目录来存储数据,然后导航到该目录
mkdir -p /mydata/influxdb/influxdb-docker-data-volume && cd $_
在主机文件系统上生成默认配置文件
docker run \
--rm influxdb:2.1.1 \
influxd print-config > config.yml
再重新启动InfluxDB 容器
docker run -p 8086:8086 --name influxdb2 \
-v $PWD/config.yml:/etc/influxdb2/config.yml \
-v $PWD:/var/lib/influxdb2 \
-d influxdb:2.1.1
开放端口8086
开放8086端口
firewall-cmd --zone=public --add-port=8086/tcp --permanent
配置立即生效
firewall-cmd --reload
设置 InfluxDB
influxDB 的初始设置过程将逐步完成创建默认组织、用户、存储桶和操作员 API 令牌的过程
运行成功后登录:http://127.0.0.1:8086/
第一次登录,输入账号密码等信息
界面查看token
命令进入容器
docker exec -it influxdb2 /bin/bash
为避免必须使用每个命令传递 InfluxDB API 令牌,请设置配置文件来存储凭据
在终端中,运行以下命令:
influx config create -n default \
-u http://localhost:8086 \
-o my-org \
-t wjk4yyPaabbq7cG9hU3Ak-61i8hqOuuFtUWdtJYex9h55BgPjOLgPsANQjYlmHj6GVHx_RafAZlU4O4UnPvvCQ== \
-a
influx config ls
使用令牌
export INFLUX_TOKEN=wjk4yyPaabbq7cG9hU3Ak-61i8hqOuuFtUWdtJYex9h55BgPjOLgPsANQjYlmHj6GVHx_RafAZlU4O4UnPvvCQ==
influx write -t $INFLUX_TOKEN -b my-bucket -o my-org "measurement field=1"
其他命令
创建用户johndoe
influx user create -n johndoe -o my-org
修改johndo密码
influx user password -n johndoe
插入数据
influx write -b my-bucket -o my-org -p s 'myMeasurement,host=myHost testField="testData" 888'
查数据
influx query -o my-org 'from(bucket:"my-bucket") |> range(start:-1d)'
安装InfluxDB 1.8版本
1.8版本可以使用dbeaver连接,可视化比较方便
docker run -p 8086:8086 --name influx18 \
-v influxdb:/var/lib/influxdb \
influxdb:1.8
登录后台
[root@iZbp1bunl8t8qf63wqsy0iZ ~]# docker exec -it influx18 /bin/bash
root@40ce58faab6f:/# influx
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> CREATE DATABASE mydb
> SHOW DATABASES
name: databases
name
----
_internal
mydb
> USE mydb
Using database mydb
> INSERT cpu,host=serverA,region=us_west value=0.64
> SELECT "host", "region", "value" FROM "cpu"
name: cpu
time host region value
---- ---- ------ -----
1646909654112201899 serverA us_west 0.64
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> SELECT * FROM "temperature"
name: temperature
time external internal machine type
---- -------- -------- ------- ----
1646909703830575693 25 37 unit42 assembly
>