目录
influxDB 时序数据库
时序数据库:
opentsdb 基于HBASE
TimeScaleDB 基于postgreSQL
KairosDB 基于Cassandra
通用数据库
kudu
CreateDB 基于ElasticSearch
InfluxDB是一个由InfluxData开发的开源时序型数据库,它由
Go语言写成,着力于高性能地查询与存储时序型数据。InfkuxDB被广
泛应用与存储系统的监控数据,loT行业的实时数据等场景。
InfluxDB有如下三大特性:
* 基于时间序列
* 可度量性
* 基于事件
InfluxDB数据模型
Measurement(表)
Tags(维度列)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-APXDkWkX-1659933382527)(influxDB_files/1.jpg)]
device = dev1 building = b1
device = dev2 building = b1
device = dev2 building = b2
device = dev1 building = b2
类似于主键,不唯一
Field 数值列
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BmmsK6um-1659933382528)(influxDB_files/2.jpg)]
point
相当于数据库中的一条记录
InfluxDB时间线(Series)
Series = Measurement + Tags
时间线:一个数据源采集的一个指标随着时间的流逝而源源不断吐出数据,这样形成的一条数据线
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lgIYYNp8-1659933382528)(influxDB_files/3.jpg)]
InfluxDB系统架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m4O3eDce-1659933382529)(influxDB_files/4.jpg)]
DataBase
create database test;
RP (数据保留策略)
RP是数据库级别的,不是表级别的属性
每个数据库有多个保留策略,但是只能有一个默认策略
– 查看库数据的过期策略
show retention policies on telegraf
ShardGroup
每个ShardGroup只存储指定时间段的数据。
不同的ShardGroup对应的时间段不会重合
为什么这样划分?
* InfluxDB中数据过期删除的执行力度就是ShardGroup
* 可以有效根据时间维度选择目标分区,淘汰部分数据
Shard
shard才是真正存储数据的部分
influxdb命令行命令
systemctl status influxdb #查看influxdb状态
systemctl start influxdb #启动influxdb
systemctl status influxdb #查看状态
systemctl enable influxdb #开启开机启动
cd /usr/bin
influxd #influxdb服务器
influx #influxdb命令行客户端
influx_inspect #查看工具
influx_stress #压力测试工具
influx_tsm #数据库转换工具(将数据库从b1或bz1格式转换为tsm1格式)
cd /var/lib/influxdb
data #存放最终存储的数据,文件以.tsm结尾
meta #存放数据库元数据
wal #存放预写日志文件
cd /var/log/influxdb 日志存储位置
cd /etc/influxdb 配置文件位置
vim influxdb.conf
systemctl start telegraf *
service grafana-server start *
systemctl status telegraf --查看telegraf状态
systemctl stop telegraf --停止telegraf
– 重启 telegraf 服务,使配置文件生效
service telegraf restart
– Linux 不同系统服务的启动方式不同
systemctl start telegraf
– 查看telegraf状态
systemctl status telegraf
wget https://dl.influxdata.com/chronograf/releases/chronograf-1.8.6.x86_64.rpm
influxdb语法
– 插入
measurement:表名
tag:维度列
field:数值列
insert [,=…] =[,=…] [unix-nano-timestamp]
insert test,host=127.0.0.1,monitor_name=test1,app=ios count=2,num=3
– 查看所有维度列
show tag keys from 表名
– distinct的字段只能是数值列,不能是维度列
select distinct(数值列) from 表名
– group by 只能对维度列使用,不能对数值列使用
select * from test group by 维度列
– 查看某个维度列的value值
show tag values from 表名 with key=“维度列”
– 模糊查询
-- =~/字符串/ 包含指定字符串的
select * from 表名 where 维度列|数值列 = ~/aaa/
-- =~/^字符串/ 以指定字符串开始
select * from 表名 where 维度列|数值列 = ~/^aaa/
-- =~/aaa$/ 以指定字符串结尾
select * from 表名 where 维度列|数值列 = ~/aaa$/
– 分页
– 从第2条记录开始,显示2条
limit 2 offset 2
– 没有IN操作,有OR操作
select * from cpu where cpu =‘aa’ or cpu=‘bb’
influxdb函数
– count()函数 数值列
返回一个字段中的非空值的数量
语法:
SELECT COUNT(<field_key>) FROM <measurement_name> [WHERE ] [GROUP BY ]
示例:
select count(usage_idle) from cpu where time > xxx and time < xxx
注意:influxdb中的函数如果没有指定时间的话,
会默认以1970年1月1日00时00分00秒作为时间
– MEAN()函数 数值列
返回一个字段(数值列)中的值的算术平均值,字段类型必须是长整型或float64
语法:
SELECT MEAN(<field_key>) FROM <measurement_name> [WHERE ] [GROUP BY ]
示例:
select MEAN(usage_idle) from cpu
– MEDIAN()函数 数值列
从单个字段(数值列)中的排序值返回中间值(中位数)。
字段值的类型必须是长整型或float64
语法:
SELECT MEDIAN(<field_key>) FROM <measurement_name> [WHERE ] [GROUP BY ]
示例:
select MEDIAN(usage_idle) from cpu
– SPREAD()函数 数值列
返回字段的最小值和最大值之间的差值
数据的类型必须是长整型或float64
语法:
SELECT SPREAD(<field_key>) FROM <measurement_name> [WHERE ] [GROUP BY ]
示例:
select SPREAD(usage_idle) from cpu
– SUM()函数 数值列
返回一个字段中的所有值的和
字段的类型必须是长整型或float64
语法:
SELECT SUM(<field_key>) FROM <measurement_name> [WHERE ] [GROUP BY ]
示例:
select SUM(usage_idle) from cpu
– 给文件权限才能下载
chmod 777 log_info.log