InfluxDB简介
InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。
主要功能:
- 基于时间序列(Time Series),支持与时间有关的相关函数(如最大,最小,求和等)
- 可度量性(Metrics):你可以实时对大量数据进行计算
- 基于事件(Eevents):它支持任意的事件数据
主要特点:
- 无结构(无模式):可以是任意数量的列
可拓展的 - 支持min, max, sum, count, mean, median 等一系列函数,方便统计
- 原生的HTTP支持,内置HTTP API
- 强大的类SQL语法
- 自带管理界面,方便使用
安装部署
官网
- https://portal.influxdata.com/downloads
- https://github.com/influxdata/influxdb
- https://docs.influxdata.com/influxdb/v1.2/guides/
目前最新版本为1.6.x,但1.2.x之后的版本将后台web功能关闭了,所以我们此次还是选择1.2.x的版本进行安装。
在讲解具体的安装步骤之前,先说说influxdb的两个http端口:8083和8086
- port 8083:管理页面端口,访问localhost:8083可以进入你本机的influxdb管理页面;
- port 8086:http连接influxdb client端口,一般使用该端口往本机的influxdb读写数据。
安装环境
- 本次安装的系统环境为CentOS 7.6,其他系统的安装基本上也类似, IP:192.168.56.32 (此处为虚拟机)
- influxdb 1.2.4
YUM包安装
1 | wget https://dl.influxdata.com/influxdb/releases/influxdb-1.2.4.x86_64.rpm |
启动服务
1 | service influxdb start |
非服务方式启动 influxd
安装后,在/usr/bin下面有如下文件:1
2
3
4
5influxd influxdb服务器
influx influxdb命令行客户端
influx_inspect 查看工具
influx_stress 压力测试工具
influx_tsm 数据库转换工具(将数据库从b1或bz1格式转换为tsm1格式)
在/var/lib/influxdb/下面会有如下文件夹:1
2
3data 存放最终存储的数据,文件以.tsm结尾
meta 存放数据库元数据
wal 存放预写日志文件
在/var/log/influxdb下面有如下文件:
1 | influxd.log 日志文件 |
在/etc/influxdb下面有如下文件:
1 | influxdb.conf 配置文件 |
在/var/run/influxdb/下面有如下文件:
1 | influxd.pid PID文件 |
web管理页面
配置/etc/influxdb/influxdb.conf如下:
1
2
3[admin]
enabled = true
bind-address = ":8083"
源码编译安装
下载解压
1
2wget https://github.com/influxdata/influxdb/archive/v1.2.4.tar.gz
tar -zxvf v1.2.4.tar.gz /home/influxdb[目标目录]启动服务
1
$: ./home/influxdb/usr/bin/influxd # 启动服务时要确保8080端口没有被占用
启动客户端
1
$: ./home/influxdb/usr/bin/influx
端口设定
1
2firewall-cmd --permanent --add-port=8083/tcp
firewall-cmd --permanent --add-port=8086/tcp
influxdb.conf说明
全局配置
1 | reporting-disabled = false # 该选项用于上报influxdb的使用信息给InfluxData公司,默认值为false |
meta相关配置
1 | [meta] |
data相关配置
1 | [data] |
coordinator查询管理的配置选项
1 | [coordinator] |
retention旧数据的保留策略
1 | [retention] |
shard-precreation分区预创建
1 | [monitor] |
admin web管理页面
1 | [admin] |
Restful API
1 | [http] |
subscriber 控制Kapacitor接受数据的配置
1 | [subscriber] |
graphite 相关配置
1 | [[graphite]] |
collectd
1 | [[collectd]] |
opentsdb
1 | [[opentsdb]] |
udp
1 | [[udp]] |
continuous_queries
1 | [continuous_queries] |
连接influxdb
用默认的配置文件启动后,输入 influx 命令即可直接连接到本地的influxdb服务1
2
3
4$ influx
Connected to http://localhost:8086 version 1.2.4
InfluxDB shell 1.2.4
>
InfluxQL语言介绍
InfluxDB使用的是一种SQL like的查询语言,叫做InfluxQL。与标准SQL的语法类似,但也有为InfluxDB定制的语法,比较容易上手。比如接下来先创建用户:1
2
3
4
5
6
7
8-- 创建一个管理员用户
CREATE USER "admin" WITH PASSWORD '111111' WITH ALL PRIVILEGES
-- 创建一个普通用户
CREATE USER "user" WITH PASSWORD '111111'
-- 为用户授权读权限
GRANT READ ON [database] to "user"
-- 为用户授权写权限
GRANT WRITE ON [database] to "user"
修改InfluxDB的配置文件,设置http下的auth-enabled = true,重启后,使用influx命令登录数据库就需要用户名和密码了。(Influx命令实际上也是使用API来操作InfluxDB的,InfluxDB只提供了API接口)
1 | $ influx -username admin -password '' |
在-password后接空字符串回车后输入密码可以屏蔽掉密码显示,不要直接在-password后跟上密码。
接下来是一系列的创建操作1
2
3
4
5
6
7
8-- 创建数据库,默认设置
CREATE DATABASE "foo"
-- 创建数据库,同时创建一个Retention Policy,这个东西不知道怎么翻译,可以认为是一个DATABASE的属性描述
-- Retention Policy各部分描述:DURATION为数据存储时长,下面的1d即只存1天的数据;REPLICATION为数据副本,一般在使用集群的时候才会设置为>1;SHARD DURATION为分区间隔,InfluxDB默认对数据分区,下面的30m即对数据每隔30分钟做一个新的分区;Name是RP的名字。
CREATE DATABASE "bar" WITH DURATION 1d REPLICATION 1 SHARD DURATION 30m NAME "myrp"
-- 可以单独创建RP,加在已经创建的DB上
CREATE RETENTION POLICY "events" ON "somedb" DURATION 60m REPLICATION 2 SHARD DURATION 30m
InfluxDB还支持其他DDL,具体可猛击https://docs.influxdata.com/influxdb/v1.2/query_language/spec/#queries 查看Influx Reference。
由于InfluxDB的无结构(schemeless)特性,我们不需要预先建表,直接use [ database ]后就可以写入数据了。举个栗子。
1 | INSERT cpu,host=serverA,region=us_west value=0.64 |
面语句中的cpu, temperature为InfluxDB某个database的measurement;host,region,machine,type为对应measurement下的tags;value,external,internal为对应measurement下的field,是measurement的实际值;而INSERT的一行数据称为一个point
measurement,tags,fields,points与普通的关系型数据库的对应:
- measurement类似于SQL中的table;
- tags类似SQL中的被索引的列;
- fields类似于SQL中没有被索引的列;
- points对应SQL的table中的每行数据。
更详细的介绍猛戳https://docs.influxdata.com/influxdb/v1.2/concepts/glossary/
然后读数据:
1 | SELECT "host", "region", "value" FROM "cpu" |
在select中使用tags的字段来作为where中的条件最好,因为tags都是有索引的,而field是没有索引的。select的列必须带有一个field,否则是查不出来的。
参考文档
- http://www.cnblogs.com/MikeZhang/p/InfluxDBInstall20170206.html
- http://www.cnblogs.com/shhnwangjian/p/6893862.html
- https://docs.influxdata.com/influxdb/v1.2/administration/config/
- https://blog.csdn.net/kangkanglou/article/details/74012310
- https://blog.csdn.net/u010185262/article/details/53118711
- https://docs.influxdata.com/influxdb/v1.2/query_language/spec/#queries