0
点赞
收藏
分享

微信扫一扫

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;

InfluxDB学习笔记_InfluxDB



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)的方式来保证数据的可靠性;

InfluxDB学习笔记_InfluxDB_02


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是逻辑概念;

InfluxDB学习笔记_InfluxDB_03


InfluxDB学习笔记_influxdb2_04



5、安装部署

wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.8_linux_amd64.tar.gz

mkdir -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]

[http]

auth-enabled = 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 <retention_policy_name> on <database_name> duration <duration> replication <n> [SHARD DURATION <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 # 前提先在[http]段开户认证,再给此用户授权grant all privileges to influx


CLI操作

java操作



influxdb2

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

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


安装

1、使用编译好的包,github.com/influxdata/influxdb/releases,wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.2.0.x86_64.rpm,yum -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


使用

​​http://ip:8086​​

get start -->

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

Quick Start -->

点击用户头像,About可看到orgid和userid -->

点击Data,API Tokens,Copy to Clipboard -->

点击Data,Buckets,复制bucket id -->


telegraf监控

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

点击Boards,选InfluxDB 2.0 OSS Metrics,

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

点击Data,Telegraf,create configuration,选System,Continue -->

填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 http://ip:8086/api/v2/telegrafs/0947f81ae5a14000 -->

点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(http://192.168.36:8086),Basic Auth Details(User|Password),InfluxDb Details(Organization|Token|Default Bucket)-->

Save & test -->

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

最下面选InfluxDB-2,点Import;


wget https://dl.influxdata.com/influxdb/releases/influxdb2-client-2.3.0-linux-amd64.tar.gz

tar 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 http://127.0.0.1:8086 \

--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 http://192.168.36.131:8086/query --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等均能与其完美结合起来展示图表数据;


安装:

​​https://grafana.com/docs/grafana/latest/installation/rpm/​​

wget https://dl.grafana.com/oss/release/grafana-7.2.0.linux-amd64.tar.gz

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

cd grafana-7.2.0.linux-amd64

.bin/grafana-server web

http://ip:3000 # 登录地址,admin/admin


grafana与influxdb集成

添加数据源;

创建dashboard;

保存dashboard;


大屏制作:

​​https://grafana.com/grafana/dashboards/​​



telegraf轻量级监控

是一个用go编写的代理程序,可收集系统和服务的统计数据,并写入到influxDB,内存占用小,通过插件可轻松添加支持其他服务的扩展;

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

InfluxDB学习笔记_InfluxDB_05


可以采集多种组件;

配置简单;

与influxdb完美结合;


安装:

wget https://dl.influxdata.com/telegraf/releases/telegraf-1.15.3_linux_amd64.tar.gz

tar xf telegraf-1.15.3_linux_amd64.tar.gz

cd telegraf-1.15.3


telegraf与influxdb集成

vim telegraf.conf

urls = ["http://192.168.20.121:8086"]

database = "influxdb"

retention_policy = "influx_retention"

username = "influx"

password = "influx"


bin/telegraf --config ./telegraf.conf

举报

相关推荐

0 条评论