app开发者平台在数字化时代的重要性与发展趋势解析
1511
2022-08-28
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
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~