详解时序数据库InfluxDB|一个不为人知的数据库

概述

认识influxdb是之前在做docker展示的时候接触的,那时候是跟grafana一起配套用,图形还是挺好看的,趁周六分享给大家。


一、什么是InfluxDB?

InfluxDB是一款用Go语言编写的开源分布式时序、事件和指标数据库,无需外部依赖。该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics, loT传感器数据和实时分析数据。

InfluxDB特征:

– 无结构(无模式):可以是任意数量的列(tags)。

– 可以设置metric的保存时间。

– 支持与时间有关的相关函数(如min、max、sum、count、mean、median等),方便统计。

– 支持存储策略:可以用于数据的删改(influxDB没有提供数据的删除与修改方法)。

– 支持连续查询:是数据库中自动定时启动的一组语句,和存储策略搭配可以降低InfluxDB的系统占用量。

– 原生的HTTP支持,内置HTTP API。

– 支持类似SQL语法。

– 支持设置数据在集群中的副本数。

– 支持定期采样数据,写入另外的measurement,方便分粒度存储数据。

– 自带web管理界面,方便使用(登入方式:http://< InfluxDB-IP >:8083)。

– 最关键的一点,也是我采用的原因,支持Grafana画图展示。


二、InfluxDB基本概念

在具体的讲解influxdb的相关操作之前先说说influxdb的一些专有名词,这些名词代表什么。先看下面一段Influxdb中的表信息。

详解时序数据库InfluxDB|一个不为人知的数据库

InfluxDB是时序数据库,所以怎么都绕不开时间,第一纵列time存储着时间戳,而时间戳是与数据进行关联,这样才能将时间和数据进行展示。

InfluxDB名词

database:数据库,根关系型数据库一个概念。
measurement:数据库中的表,就是关系型数据库中的表。
points:表里面的一行数据,就是关系型数据库中的记录。
InfluxDB中独有的一些概念
Point由时间戳(time)、标签(tags)和值(field)组成。
time:每条数据记录的时间,也是数据库自动生成的主索引。
tags:各种有索引的属性。
fields:各种记录的值。
tag set:tag在InfluxDB中会按照字典序排序,不管是tag-key还是tag-value,只要不一致就分别属于两个tag set,例如hostname=server01,device=/data和hostname=server02,device=/data就是两个不同的tag set。

还有三个重要的名词:Series、Retention policy和Shard

Series:相当于是InfluxDB中一些数据的集合,在同一个database中,retention policy、measurement、tag sets完全相同的数据同属于一个series,同一个series的数据在物理上会按照时间顺序排列存储在一起。
Retention policy:存储策略,用于设置数据保留的时间,每个数据库刚开始会自动创建一个默认的存储策略autogen,数据保留时间为永久,之后用户可以自己设置,例如保留最近2小时的数据。插入和查询数据时如果不指定存储策略,则使用默认存储策略,且默认存储策略可以修改。InfluxDB会定期清除过期的数据。
Shard:在InfluxDB中是一个比较重要的概念,它和Retention policy相关联。每一个存储策略下会存在许多shard,每一个shard存储一个指定时间段内的数据,并且不重复,例如7点-8点的数据落入shard0中,8点-9点的数据则落入shard1中。每一个shard都对应一个底层的tsm存储引擎,有独立的 cache、wal、tsm file。

TSM存储引擎主要由几个部分组成:cache、wal、tsm file、compactor。

详解时序数据库InfluxDB|一个不为人知的数据库

三、InfluxDB安装配置

1)安装配置

# 安装influxdb;
$ yum install influxdb
 
# 启动influxdb;
$ systemctl start influxdb
 
# 连接influxdb;
$ influx -database 'test' -host 'localhost' -port '8086'

2)相关文件

$ rpm -ql influxdb
# 配置文件;
/etc/influxdb/influxdb.conf
 
# 日志轮转;
/etc/logrotate.d/influxdb
 
# 命令行客户端;
/usr/bin/influx
 
# 查看工具;
/usr/bin/influx_inspect
 
# 压力测试工具;
/usr/bin/influx_stress
 
# 数据库转换工具(将数据库从b1或bz1格式转换为tsm1格式);
/usr/bin/influx_tsm
 
# 服务端;
/usr/bin/influxd
 
# Systemctl服务管理;
/usr/lib/influxdb/scripts/influxdb.service
/usr/lib/influxdb/scripts/init.sh
................
 
# 数据目录;
/var/lib/influxdb
 
# 日志目录;
/var/log/influxdb

3)开启Web

influxdb提供的简单web管理页面,可以用来操作influxdb,默认没有开启,如果想开启需要修改配置文件中[admin]部分,如下:

[admin]
 # Determines whether the admin service is enabled.
 enabled = true
 
 # The default bind address used by the admin service.
 bind-address = ":8080"

篇幅有限,今天关于influxdb就介绍到这了,有时间大家可以测试下,一般infulxdb是要跟grafana一起使用的。在有了InfluxDB+Grafana后,你就可以写一些简单的程序了,可以只负责写后端逻辑部分,数据都可以存入InfluxDB,然后通过Grafana展示出来。

后面会分享更多关于devops和DBA内容,感兴趣的朋友可以关注下~

详解时序数据库InfluxDB|一个不为人知的数据库

相关推荐