1.InfluxDB介绍
1.1安装使用
下载地址
直接官网下载就好,非常简单。
https://influxdata.com/downloads/#influxdb
influxdb是这两年比较流行的时序数据库,是有go语言开发的.无需外部依赖,安装配置非常方便,适合构建大型分布式系统的监控系统。
安装
sudo dpkg -i influxdbName.deb
启动
sudo service influxdb start
使用
启动成功之后,我们就可以开始使用influxDB啦!
命令行
在命令行中直接输入influx,就可以管理数据库了。
root@xtutu:~# influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 0.10.0
InfluxDB shell 0.10.0
> show databases
name: databases
---------------
name
_internal
mydb
使用web页面来操作
在浏览器中输入localhost:8083 即可进入web管理页面。
创建一个数据库
-
> CREATE DATABASE "testDB"
-
> show databases
-
name: databases
-
---------------
-
name
-
_internal
-
mydb
-
testDB
使用数据库
-
> use testDB
-
Using database testDB
现在我们就可以在这个数据库上进行各种操作了!
1.2名词解释
在InfluxDB中有不少名词,初学者非常容易搞混,这一节主要就是对这些名词进行解释。
场景定义
我们有一个数据库名为testDB,里面有一张表weather用于记录:多个地区在几组海拔下的一天的温度变化,所以表中有以下字段:
时间 time
温度 temperature
湿度 humidity
地区 area
海拔 altitude
与传统数据库中的名词做比较
influxDB中的名词 | 传统数据库中的概念 |
---|---|
database | 数据库 |
measurement | 数据库中的表 |
points | 表里面的一行数据 |
InfluxDB中独有的一些念概
Point由时间戳(time)、数据(field)、标签(tags)组成。
Point属性 | 传统数据库中的概念 |
---|---|
time | 每个数据记录时间,是数据库中的主索引(会自动生成) |
fields | 各种记录值(没有索引的属性)也就是记录的值:温度, 湿度 |
tags | 各种有索引的属性:地区,海拔 |
这里不得不提另一个名词:series
所有在数据库中的数据,都需要通过图表来展示,而这个series表示这个表里面的数据,可以在图表上画成几条线:通过tags排列组合算出来。
比如有如下数据:
-
> select* from weather
-
name: weather
-
-------------
-
time altitude area humidity temperature
-
1456386985094000000 1000 北 18 17
-
1456386985094000000 5000 上 20 47
-
1456386985094000000 5000 北 26 68
-
1456386985094000000 1000 广 17 83
-
1456387267668000000 1000 上 12 77
-
1456387267668000000 1000 北 16 20
-
1456387267668000000 5000 广 -3 66
-
1456387267668000000 5000 上 19 60
它的series为:
-
> show series from weather
-
name: weather
-
-------------
-
_key altitude area
-
weather,altitude=1000,area=北 1000 北
-
weather,altitude=5000,area=北 5000 北
-
weather,altitude=5000,area=上 5000 上
-
weather,altitude=1000,area=广 1000 广
-
weather,altitude=1000,area=上 1000 上
-
weather,altitude=5000,area=广 5000 广
2.基本操作
本章将介绍InfluxDB中的一些基本操作,包括数据的增删改查、数据库与表的操作等。
2.1增
在名词解释这一章节中,我们看到在weather中的有不少数据。
本节将演示下如何为数据库插入数据。
通过命令行
-
use testDB
-
insert weather,altitude=1000,area=北 temperature=11,humidity=-4
这样,我们就向数据库中添加了一条数据。
通过Http接口
InfluxDB提供了Http的API接口,所以我们也可以通过下面的方式来插入数据。
-
curl -i -XPOST 'http://localhost:8086/write?db=testDB' --data-binary 'weather,altitude=1000,area=北 temperature=11,humidity=-4'
Line Protocol格式
插入数据的格式似乎比较奇怪,这是因为influxDB储存数据所采用的是Line Protocol格式。
在上面两个插入数据的方法中,都有一样的部分。
weather,altitude=1000,area=北 temperature=11,humidity=-4
其中:
weather : 表名
altitude=1000,area=北 : tag
temperature=11,humidity=-4 :field
2.2删与改
在InfluxDB中并没有提供数据的删除与修改方法。
不过我们可以通过数据保存策略(Retention Policies)来实现删除。
2.3查
本节将演示下查询数据的一些常用方法。
通过命令行
-
use testDB
-
# 查询最新的三条数据
-
SELECT * FROM weather ORDER BY time DESC LIMIT 3
通过Http接口
-
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testDB" --data-urlencode "q=SELECT * FROM weather ORDER BY time DESC LIMIT 3"
InfluxDB是支持类SQL语句的,具体的查询语法都差不多,就不再详细描述了。
2.4数据库与表的操作
以下语句都可以直接在InfluxDB的Web管理界面中调用
-
# 创建数据库
-
CREATE DATABASE "db_name"
-
# 显示所有数据库
-
SHOW DATABASES
-
# 删除数据库
-
DROP DATABASE "db_name"
-
# 使用数据库
-
USE mydb
-
# 显示该数据库中的表
-
SHOW MEASUREMENTS
-
# 创建表
-
# 直接在插入数据的时候指定表名(weather就是表名)
-
insert weather,altitude=1000,area=北 temperature=11,humidity=-4
-
# 删除表
-
DROP MEASUREMENT "measurementName"
2.5数据保存策略(Retention Policies)
InfluxDB没有提供直接删除Points的方法,但是它提供了Retention Policies。
主要用于指定数据的保留时间:当数据超过了指定的时间之后,就会被删除。
查看当前数据库的Retention Policies
-
SHOW RETENTION POLICIES ON "testDB"
创建新的Retention Policies
-
CREATE RETENTION POLICY "rp_name" ON "db_name" DURATION 30d REPLICATION 1 DEFAULT
其中:
rp_name:策略名
db_name:具体的数据库名
30d:保存30天,30天之前的数据将被删除
它具有各种时间参数,比如:h(小时),w(星期)
REPLICATION 1:副本个数,这里填1就可以了
DEFAULT 设为默认的策略
修改Retention Policies
-
ALTER RETENTION POLICY "rp_name" ON db_name" DURATION 3w DEFAULT
删除Retention Policies
-
DROP RETENTION POLICY "rp_name"
具体效果,大家可以直接自己在测试数据库上试验
2.6连续查询(Continuous Queries)
当数据超过保存策略里指定的时间之后,就会被删除。
如果我们不想完全删除掉,比如做一个数据统计采样:把原先每秒的数据,存为每小时的数据,让数据占用的空间大大减少(以降低精度为代价)。
这就需要InfluxDB提供的:连续查询(Continuous Queries)。
当前数据库的Continuous Queries
-
# 这条命令得在命令行下输入,在web管理界面不能显示。
-
SHOW CONTINUOUS QUERIES
创建新的Continuous Queries
CONTINUOUS QUERY cq_30m ON testDB BEGIN SELECT mean(temperature) INTO weather30m FROM weather GROUP BY time(30m) END
其中:
- cq_30m:连续查询的名字
- testDB:具体的数据库名
- mean(temperature): 算平均温度
- weather: 当前表名
- weather30m: 存新数据的表名
- 30m:时间间隔为30分钟
当我们插入新数据之后,可以发现数据库中多了一张名为weather30m(里面已经存着计算好的数据了)。这一切都是通过Continuous Queries自动完成的。
-
> SHOW MEASUREMENTS
-
name: measurements
-
------------------
-
name
-
weather
-
weather30m
删除Continuous Queries
DROP CONTINUOUS QUERY <cq_name> ON <database_name>
具体效果,大家可以直接自己在测试数据库上试验
2.7用户管理
以下语句都可以直接在InfluxDB的Web管理界面中调用
-
# 显示用户
-
SHOW USERS
-
# 创建用户
-
CREATE USER "username" WITH PASSWORD 'password'
-
# 创建管理员权限的用户
-
CREATE USER "username" WITH PASSWORD 'password' WITH ALL PRIVILEGES
-
# 删除用户
-
DROP USER "username"
3.Grafana简单使用
下载安装
Grafana也是用GO语言写的,无任何依赖,安装非常简单。
启动
-
sudo service grafana-server start
运行
直接访问:http://your_ip:3000
登入
默认帐号:admin
默认密码:admin
添加数据库
在Data Sources中添加数据库testDB
其中user和password,如果没有设置过,可以随便填下。
保存之后,可以通过Test Connection来测试,是否填写正确。
创建Dashboard
点击New按钮就可以了。
添加一个图形界面
为界面关联数据
- 选择testDB数据库
- 添加查询语句
- 完美显示!记得保存