InfluxDB学习笔记

网友投稿 1433 2022-08-28

InfluxDB学习笔记

InfluxDB学习笔记

telegraf + influxdb + grafana​

海量日志监控,logstash&Beats(Ingest) + ES(store|search|analyze) + kibana(visualize|manage),​

influxDB​

1、是什么,是一个由InfluxData开发的开源时序型数据库(opentsdb基于Hbase,timescaleDB基于postgreSQL,kairosDB基于cassandra;另通用数据库kudu,CrateDB基于ES),go写成,着力于高性能地查询与存储时序型数据,被广泛用于存储系统的监控数据,IoT行业的实时数据等场景;有3大特征:基于时序序列、可度量性、基于事件;​

time series database,TSDB,用于存储大量基于时间的数据,time series data指一系列基于时间的数据,如cpu使用率、房价变化趋势、温度变化等;​

时序数据库支持时序数据的快速写入、持久化、多维度查询、聚合等操作,同时可以记录所有的历史数据,查询时将时间作为数据的过滤条件;​

时序数据的使用场景广泛,包括DevOps监控、应用程序指标、IoT传感器数据、实时动态数据分析等场景;​

InfluxDB是时序数据库中应用比较广泛的一种,在DB-Engines TSDB rank中位居首位,go语言开发,自发布至今有2个版本,1.x系列提供一种类似SQL的查询语言InfluxQL,用于数据交互,2019-1新推出的2.0 alpha版本,主推全新的查询语言Flux,支持TICK架构,在2020底推出2.0正式版本,该版本又分InfluxDB Cloud和InfluxDB OSS两个系列;​

特点:​

1、数据写入,高并发高吞吐,可持续的数据写入;写多读少,时序数据95%以上都是写操作,如在监控系统数据时,监控数据特别多,但通常只会关注几个关键指标;数据实时写入,不支持数据更新,但可人为更新修改;​

2、数据分析与查询,数据查询是按照时间段读取,如1h|1min,给出具体时间范围;最近的数据读取率高,越旧的数据读取率越低;​

3、数据存储,存储数据规模大的数据,监控数据的数据大多数情况下都是TB或PB级;数据存放具体时效性,InfluxDB提供了保存策略,可认为是数据的保质期,超过周期范围,就可认为数据失效,需要回收,清理低价值的数据;​

2、数据模型(字段含义)​

database,可创建多个数据库,不同数据库中的数据文件是隔离存放的,存放在磁盘上的不同目录;​

Measurement,测量指标名,可认为是时序数据库中的表,同MySQL的表;​

retention policy,简称RP,创建数据库时会自动创建一个默认的存储策略autogen,永久保存,对应的在此策略下的shard所保存的数据的时间段为7天;​

timestamp,可认为是时序数据库的主键;​

tag(indexed),维度列,同prom的label,如下图b1楼的dev1设备;tag key = tag value键值对存储具体的数据,会构建索引有利于查询,tag set就是tag key-value键值对的不同组合;​

field(not indexed),数值列,同prom的指标,如下图的internal内部温度,external,外部温度;field key=field value键值对也是存储具体数据,但不会被索引;​

series,一个series序列是由同一个RP策略下的同一个measurement里的同一个tag set构成的数据集合;​

point,同SQL的record;一个point点代表一条数据,由measurement、tag set、field set、timestamp组成,一个series上的某个timestamp时间对应唯一一个point;​

3、时间线​

Series = Measurement + Tags;​

一个数据源采集的一个指标随着时间的流逝,而源源不断地吐出的数据,这样形成的一条数据线;​

4、系统架构(存储原理)​

InfluxDB的存储结构树是时间结构合并树(Time-Structured Merge Tree,TSM),它是由日志结构化合并树(Log-Structured Merge Tree,LSM),根据实际需求变化而来的;​

LSM树,包含3部分,Memtable、Immutable和SSTable,Memtable是内存中的数据结构,用于保存最近产生的数据,并按照Key有序地组织数据,内存并不是可靠存储,若断电就会丢失数据,因此通常会使用预写式日志(Write-ahead logging,WAL)的方式来保证数据的可靠性;​

TSM存储引擎,主要包括4部分,Cache、WAL、TSM File、Compactor,下图中shard与TSM引擎主要部分放在一起,但其实shard是在TSM存储引擎之上的一个概念,在InfluxDB中按照数据产生的时间范围,会创建不同的shard分组,每个shard都有本身的cahce、WAL、tsm file、compactor;​

Database,create database test;​

RP,数据保留策略,是数据库级别而不是表级别的属性,每个数据库有多个保留策略,但只能有一个默认策略;​

ShardGroup,每个ShardGroup只存储指定时间段的数据,不同的ShardGroup对应的时间段不会重合;为什么这么划分?1InfluxDB中数据过期删除的执行力度就是ShardGroup;2可以有效根据时间维度选择目标分区,淘汰部分数据;​

Shard,真正存储数据的地方并提供读写服务,ShardGroup是逻辑概念;​

5、安装部署​

wget -pv /data/influxdb/{data/, log/, meta/, wal/}​

tar xf influxdb-1.7.8_linux_amd64.tar.gz​

cd xf influxdb-1.7.8_linux_amd64​

ll -h usr/bin/ # influx命令行工具,influxd服务启动,influx_inspect查看工具,influx_stress压力测试,influx_tsm转换工具​

ll -h etc/ # influxdb.conf​

egrep -v "^#|^$|#" etc/influxdb.conf​

[meta]​

dir = "/data/influxdb/meta"​

[data]​

dir = "/data/influxdb/data"​

预写日志,防止日志丢失,回放​

series-id-set-cache-size = 100​

[coordinator]​

[retention]​

enabled = true​

check-interval = "30m"​

[shard-precreation]​

[monitor]​

[= true # 开户用户登录认证​

[logging]​

[subscriber]​

[[graphite]]​

[[collectd]]​

[[opentsdb]]​

[[udp]]​

[continuous_queries]​

[tls]​

nohup usr/bin/influxd -config etc/influxdb/influxdb.conf &​

# 库操作​

usr/bin/influx # 登录​

show databases;​

create database influxdb​

drop database influxdb​

use influxdb​

# 保留策略操作​

create retention policy on duration replication [SHARD DURATION ] [DEFAULT] # 保留策略语法​

create retention policy "influx_retention" on "influxdb" duration 30d replication 1 default; # 创建数据保留策略,最后的default为“是否为默认保留策略”​

show retention policies on influxdb # 查看保留期​

alter retention policy "influx_retention" on influxdb duration 15d # 修改保留期​

drop retention policy "influx_retention" on influxdb​

# 表增删查操作​

show measurements # 显示所有表​

use influxdb​

insert weather,altitude=1000,area=北 temperature=11,humidity=-4 # 插入数据​

insert weather,altitude=500,area=北 temperature=18,humidity=5​

insert weather,altitude=1000,area=南 temperature=12,humidity=-5​

insert weather,altitude=500,area=南 temperature=25,humidity=7​

select * from weather # 查询表​

precision rfc3339 # 设置时间显示格式​

drop measurement weather # 删除表​

# 用户操作​

show users # 显示用户​

create user influx with password 'influxdb'; # 普通用户创建用户并设置密码​

create user "admin" with password 'admin' with all privileges; # 管理员用户​

set password for influx='influx'​

drop user admin;​

# 数据库访问权限​

grant all privileges on influxdb to influx; # 用户授权,授权用户数据库操作权限​

grant all privileges to influx; # 赋予用户influx有管理员权限,默认只能使用admin权限才可以操作数据库​

show users​

revoke all privileges on influxdb from influx # 撤销用户数据库操作权限​

revoke all privileges from influx # 撤销用户管理员权限​

usr/bin/influx -username influx -password influx # 前提先在[all privileges to influx​

CLI操作​

java操作​

influxdb2​

它是一个数据库,是一个时序数据库,按照时间顺序来存储数据,国内相关技术问题非常多;​

2021年6月,发布2.X,与前面版本有结构性差异;​

安装​

1、使用编译好的包,github.com/influxdata/influxdb/releases,wget -y install influxdb2-2.2.0.x86_64.rpm;​

2、docker,hub.docker.com/_/influxdb,docker run -itd --name influxdb2 -p 8086:8086 influxdb:2.2.0-alpine;​

启动​

1、systemctl start influxdb # service influxdb start或influxdb run​

2、docker start influxdb2 # restart​

使用​

​​start --> ​

Username|Password|Initial Organization Name|Initial Bucket Name,必须要初始化org和bucket,Continue -->​

Quick Start -->​

telegraf监控​

1、influxdb2自带的监控,监控自身;​

2、直接使用influxdb2来监控被监控服务器的硬件资源;​

填Telegraf Configuration Name和Telegraf configuration Description,Create&Verify-->​

根据提示有3步,在被监控端安装Telegraf(github.com/influxdata/telegraf,使用influxdata.repo,yum -y install telegraf)-->​

Configure your API Token,复制token,在被监控端执行export INFLUX_TOKEN=... -->​

Start Telegraf,复制命令,telegraf --config -->​

点Finish -->​

点Boards,有刚添加的被监控端;​

与grafana集成​

使用grafana展示;​

安装grafana,rpm或docker,docker run -itd --name grafana -p 3000:3000 grafana/grafana,admin/admin;​

点Data Sources,选InfluxDb -->​

Query Language选Flux,URL(Auth Details(User|Password),InfluxDb Details(Organization|Token|Default Bucket)-->​

Save & test -->​

Import,引入模板,下拉框找到14126,Load -->​

最下面选InfluxDB-2,点Import;​

wget xf influxdb2-client-2.3.0-linux-amd64.tar.gz​

cd influxdb2-client-2.3.0-linux-amd64​

./influx --help​

./influx config create --config-name influxdb-cli-config \​

--host-url \​

--org lemon​

--token ...​

--active # 创建配置信息让influxdb-cli能连接到influxdb2​

./influx v1 dbrp --help​

./influx v1 dbrp create --help​

./influx v1 dbrp create --db jmeter --rp jmeter --bucket-id xxx --default # 创建库​

查询:​

curl --get --header "Authorization: Token ..." --data-urlencode "q=select * from jmeter.jmeter.jmeter order by time desc limit 2;"​

telegraf + influxdb + grafana​

grafana​

是开源的、炫酷的可视化监控、分析工具,主要特点:​

多种展示方式;​

支持多数据源;​

多种通知提醒(email|sms|dingding);​

混合展示(同一个图表中混合使用不同的数据源);​

grafana支持接入当前各种主流的数据库,并能将各数据库的数据以非常灵活炫酷的图表展现出来,同时也因为是开源软件方便二次开发定制;​

另当前主流开源的监控系统,如zabbix|prometheus|open-falcon等均能与其完美结合起来展示图表数据;​

安装:​

​​xf grafana-7.2.0.linux-amd64.tar.gz​

cd grafana-7.2.0.linux-amd64​

.bin/grafana-server web​

# 登录地址,admin/admin​

grafana与influxdb集成​

添加数据源;​

创建dashboard;​

保存dashboard;​

大屏制作:​

​​metric用于在处理期间对数据建模的内部表示,这些指标完全基于influxdb的数据模型,饱含个主要组件:measurement度量名称、tags标签、field字段、time时间戳;​

可以采集多种组件;​

配置简单;​

与influxdb完美结合;​

安装:​

wget xf telegraf-1.15.3_linux_amd64.tar.gz​

cd telegraf-1.15.3​

telegraf与influxdb集成​

vim telegraf.conf​

urls = ["= "influxdb"​

retention_policy = "influx_retention"​

username = "influx"​

password = "influx"​

bin/telegraf --config ./telegraf.conf​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:2021最新版 史上最全的50个Redis面试题(含答案)
下一篇:.NET开发不可错过的25款高效工具(net开发软件工具)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~