时序数据库,InfluxDB
老板新需求又来了,这次是要用一个时序数据库,用来保存工厂生产时的各种监控指标。
一番调查之后,决定使用InfluxDB,为啥?排名高呗排名前十的时序数据库
1.InfluxDB简介(都是抄来的)
InfluxDB是一款用Go语言编写的开源分布式时序、事件和指标数据库,无需外部依赖。该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics,loT传感器数据和实时分析数据。
作为目前开源排名最高的时序数据库,InfluxDB支持数据存储策略(RP)和数据归档(CQ),能够实时查询,数据在写入时被索引后就能够被立即查出,内置HTTP接口,安装管理很简单,并且读写数据非常高效。
InfluxDB有三大特性:
1、Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求和等)
2、Metrics(度量):你可以实时对大量数据进行计算
3、Eevents(事件):它支持任意的事件数据
特点
・为时间序列数据专门编写的自定义高性能数据存储。 TSM引擎具有高性能的写入和数据压缩
・Golang编写,没有其它的依赖
・提供简单、高性能的写入、查询 http api,Native HTTP API, 内置http支持,使用http读写
・插件支持其它数据写入协议,例如 graphite、collectd、OpenTSDB
・支持类sql查询语句
・tags可以索引序列化,提供快速有效的查询
・Retention policies自动处理过期数据
・Continuous queries自动聚合,提高查询效率
・schemaless(无结构),可以是任意数量的列
・Scalable可拓展
・min, max, sum, count, mean,median 一系列函数,方便统计
・Built-in Explorer 自带管理工具
2、安装
这边只记录下docker的安装(docker是个好东西啊)
$ docker run -dit --restart=always --privileged --name influxdb2 -p 8086:8086 \
-v $PWD/influxdb2/data:/var/lib/influxdb2 \
-v $PWD/influxdb2/config:/etc/influxdb2 \
-e DOCKER_INFLUXDB_INIT_MODE=setup \
-e DOCKER_INFLUXDB_INIT_USERNAME=admin \
-e DOCKER_INFLUXDB_INIT_PASSWORD=admin1234 \
-e DOCKER_INFLUXDB_INIT_ORG=my-org \
-e DOCKER_INFLUXDB_INIT_BUCKET=my-bucket \
influxdb:2.0
注意点1:这里的PASSWORD不能太短,否则启动会报错(晕)
注意点2:这边安装的是2.0版本,和1.*版本在使用上有很大不同,请注意区分
3、WEB管理后台
直接访问服务器8086端口
还能看到Java的使用示例
还有超多可用数据源
4、基本概念
4.1、与传统数据库中的名词做比较
注意点:2.*版本中已经没有database了,取而代之的是bucket
4.2、Point
Point由时间戳(time)、数据(field)、标签(tags)组成。
Point相当于传统数据库里的一行数据,如下表所示:
5、增删改查操作
6、Java Spring Demo
写了个springboot整合InfluxDB2.*的demo
https://github.com/xuhai19901018/InfluxDBDemo
7、数据收集实践
下边以计算机系统监控作为示例,来尝试下数据收集吧。
首先在需要监控的主机上安装Telegraf插件,我的测试服务器系统是debian11。
apt update
apt install apt-transport-https
wget https://repos.influxdata.com/influxdb.key
apt-key add influxdb.key
apt update
apt install telegraf
systemctl start telegraf
在InfluxDB的web管理后台添加配置
直接告诉你下步要做啥了,在刚刚安装Telegraf插件的主机上执行上图中的两条命令
成功。
查询下是否有数据了
influx query 'from(bucket:"my-bucket")|> range(start:-3m) '
出来好多数据,默认监控的东西太多了,修改下Telegraf配置,只监控cpu,并增加查询条件
图形化数据展示influx query 'from(bucket:"my-bucket")|> range(start:-3m) |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_idle" and r.cpu == "cpu-total" ) '
参考文章
Influxdb基本操作(详细) (这边的应该是1.*版本的使用方法)
spring boot使用InfluxDB超简单三步搞定(这边的应该是1.*版本的使用方法)