InfluxDB入门
简介
-
InfluxDB是由InfluxData开发的开源时序型数据库。
-
由Go语言所写, 运维部署比较方便。
-
着力于高性能地查询与存储时序型数据。
-
被广泛应用于存储系统的监控系统, IoT行业的实时数据等场景。
对比关系型数据库(MySQL)
概念 | InfluxDB | MySQL |
---|---|---|
数据库(同) | database | database |
表(不同) | table | measurement |
列(不同) | column | tag(带索引的, 非必须)、field(不带索引)、timestamp(时间戳, 唯一主键) |
-
tag set
- 不同的人魅族tag key与tag value的集合
-
field set
- 每组field key与field value的集合
-
measurement
- 是fields,tags以及time列的容器
- 用于描述存储在其中的字段数据,类似mysql的表名
-
retention policy(保留政策)
- 数据存储策略(默认为autogenous), InfluxDB没有删除数据操作, 规定数据的保留时间达到清除数据的目的。(可以类比redis的expire time, Kafka的保留时间策略)
-
series
- 共同retention policy, measuremnt 和 tag set的集合
主要特点
-
无结构
-
可拓展
-
支持min, max, sum, count, mean, median 等一些列函数, 方便统计
-
原生的HTTP支持, 内置HTTP API
-
易上手的类SQL语法
三个端口
-
8083: Web admin管理服务的端口(较新版本已移除)
-
8086: HTTP API的端口
-
8088: 集群端口
需要注意的一些特点
- tag 只能为字符串类型
- field 类型无限制
- 不支持join语法(不能联表)
- 支持连续查询操作(汇总统计数据)[continuous query]
- 配合Telegraf服务(Telegraf可以监控系统CPU、内存、网络等数据)
- 配合Grafana服务(数据展示的UI, 将influxdb中的数据可视化)
安装InfluxDB单机版(Docker)
-
企业版是支持集群模式的, 开源版只有单击版。
-
默认已经安装好了docker, 如果不是root用户, 请将使用的当前用户加入到docker用户组中。
-
拉取influxdb镜像
docker pull influxdb
-
查看已有镜像
ubuntu@ronnie:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE api-server default dbf1ddd3f665 25 hours ago 954MB influxdb latest e1ab2d9add24 2 days ago 311MB python 3.6 e0384051b655 2 days ago 914MB grafana/grafana latest 199e063bb422 8 days ago 233MB wurstmeister/kafka latest 9a5842c217a8 6 weeks ago 432MB mongo latest a0e2e64ac939 6 weeks ago 364MB redis latest dcf9ec9265e0 2 months ago 98.2MB zjffdu/zeppelin-blink latest 41d3d93a261c 12 months ago 5.07GB wurstmeister/zookeeper latest 3f43f72cb283 12 months ago 510MB
-
启动InfluxDB 容器并将本机的8083, 8086端口映射到启动InfluxDB的容器的对应端口上, 这样访问本机端口即可访问InfluxDB服务。
docker run -d -p 8083:8083 -p 8086:8086 --name my_influxdb influxdb
- --name为容器名
-
查看容器信息
ubuntu@ronnie:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f26c6be56cc7 grafana/grafana "/run.sh" 25 hours ago Up 25 hours 0.0.0.0:3000->3000/tcp my_grafana 9eeb58698e3b influxdb "/entrypoint.sh infl…" 25 hours ago Up 25 hours 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp my_influxdb 4eeacbd09d2c api-server:default "bash bootstrap" 25 hours ago Up 25 hours 0.0.0.0:9000->9000/tcp api-server
-
进入docker镜像
docker exec -it my_influxdb bash
-
进入/usr/bin目录, 查看InfluxDB相关可执行程序
root@9eeb58698e3b:/# cd /usr/bin/ root@9eeb58698e3b:/usr/bin# find | grep influx ./influx ./influx_stress ./influx_tsm ./influx_inspect ./influxd
-
查看InfluxDB版本
root@9eeb58698e3b:/usr/bin# ./influx -version InfluxDB shell version: 1.7.9
-
进入InfluxDB shell
root@9eeb58698e3b:/usr/bin# ./influx Connected to http://localhost:8086 version 1.7.9 InfluxDB shell version: 1.7.9
常用shell操作
-
查看数据库
show databases
-
使用指定数据库
use 数据库名
-
查看measurement
show measurements
-
查询N条数据
select * from measurement名 limit 10
-
按照rfc格式查询
precision rfc3339 或 influx -precision rfc3339
-
查看 tag key
show tag keys
-
查看 field key
show field keys
-
查看 measurement中的所有保存策略
show retention policies
写个操作Demo
-
创建数据库并使用
create database ronnie_test use ronnie_test
-
插入数据
insert disk_free,hostname=server01 value=442221834240i 1435362189575692182 insert disk_free,hostname=server02 value=132221834240i 1435362189575692182 insert disk_free,hostname=server03 value=242221834240i 1435362189575692182 insert disk_free,hostname=server04 value=342221834240i 1435362189575692182 insert disk_free,hostname=server05 value=542221834240i 1435362189575692182 insert disk_free,hostname=server06 value=642221834240i 1435362189575692182 insert disk_free,hostname=server07 value=742221834240i 1435362189575692182 insert disk_free,hostname=server08 value=842221834240i 1435362189575692182 insert disk_free,hostname=server09 value=942221834240i 1435362189575692182 insert disk_free,hostname=server10 value=122221834240i 1435362189575692182 insert disk_free,hostname=server11 value=432221834240i 1435362189575692182 insert disk_free,hostname=server12 value=462221834240i 1435362189575692182 insert disk_free,hostname=server13 value=482221834240i 1435362189575692182 insert disk_free,hostname=server14 value=492221834240i 1435362189575692182 insert disk_free,hostname=server15 value=272221834240i 1435362189575692182
-
查看measurements数据
> show measurements; name: measurements name ---- disk_free
> select * from disk_free; name: disk_free time hostname value ---- -------- ----- 1435362189575692182 server01 442221834240 1435362189575692182 server02 132221834240 1435362189575692182 server03 242221834240 1435362189575692182 server04 342221834240 1435362189575692182 server05 542221834240 1435362189575692182 server06 642221834240 1435362189575692182 server07 742221834240 1435362189575692182 server08 842221834240 1435362189575692182 server09 942221834240 1435362189575692182 server10 122221834240 1435362189575692182 server11 432221834240 1435362189575692182 server12 462221834240 1435362189575692182 server13 482221834240 1435362189575692182 server14 492221834240 1435362189575692182 server15 272221834240
-
将时间改为rfc格式
> precision rfc3339 > select * from disk_free; name: disk_free time hostname value ---- -------- ----- 2015-06-26T23:43:09.575692182Z server01 442221834240 2015-06-26T23:43:09.575692182Z server02 132221834240 2015-06-26T23:43:09.575692182Z server03 242221834240 2015-06-26T23:43:09.575692182Z server04 342221834240 2015-06-26T23:43:09.575692182Z server05 542221834240 2015-06-26T23:43:09.575692182Z server06 642221834240 2015-06-26T23:43:09.575692182Z server07 742221834240 2015-06-26T23:43:09.575692182Z server08 842221834240 2015-06-26T23:43:09.575692182Z server09 942221834240 2015-06-26T23:43:09.575692182Z server10 122221834240 2015-06-26T23:43:09.575692182Z server11 432221834240 2015-06-26T23:43:09.575692182Z server12 462221834240 2015-06-26T23:43:09.575692182Z server13 482221834240 2015-06-26T23:43:09.575692182Z server14 492221834240 2015-06-26T23:43:09.575692182Z server15 272221834240
-
带where的查询, 基本和SQL一样
> select hostname, value from disk_free where value > 200000000000 name: disk_free time hostname value ---- -------- ----- 2015-06-26T23:43:09.575692182Z server01 442221834240 2015-06-26T23:43:09.575692182Z server03 242221834240 2015-06-26T23:43:09.575692182Z server04 342221834240 2015-06-26T23:43:09.575692182Z server05 542221834240 2015-06-26T23:43:09.575692182Z server06 642221834240 2015-06-26T23:43:09.575692182Z server07 742221834240 2015-06-26T23:43:09.575692182Z server08 842221834240 2015-06-26T23:43:09.575692182Z server09 942221834240 2015-06-26T23:43:09.575692182Z server11 432221834240 2015-06-26T23:43:09.575692182Z server12 462221834240 2015-06-26T23:43:09.575692182Z server13 482221834240 2015-06-26T23:43:09.575692182Z server14 492221834240 2015-06-26T23:43:09.575692182Z server15 272221834240
-
查看tag key
> show tag keys name: disk_free tagKey ------ hostname
-
查看field key
> show field keys name: disk_free fieldKey fieldType -------- --------- value integer
顺带记录下Docker安装Grafana
-
拉取Grafana镜像
docker pull grafana/grafana
-
运行Grafana(本质上还是端口映射, 不说了)
docker run -d -p 3000:3000 --name my_grafana grafana/grafana