InfluxDB is the open source time series database
官网中列出了它的几个重要特点:
开源版本的 InfluxDB 只有一个节点。如果有高可用的需求,可考虑企业版本。
一句话:InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。
https://docs.influxdata.com/influxdb/v1.7/introduction/installation/
要求如下端口:
InfluxDB 采用主机的时间进行时序数据记录,需要本机支持 NTP。
https://hub.docker.com/_/influxdb?tab=description
运行容器:
$ docker run --name=influxdb -d -p 8086:8086 influxdb
在容器中运行 client:
$ docker exec -it influxdb influx
先掌握 InfluxDB 的几个基本概念。
时间序列是由 0到多个 points
来组成,points 是由以下元素组成:
time
(时间戳)measurement
(例如“cpu_load”,仅仅是字符串表示的名称,测量值的名称)field
(例如“value=0.64” 或 “temperature=21.2”,是测量值的值本身)tag
(例如“host=server01”, “region=EMEA”, “dc=Frankfurt”,表示测量的一些元数据)time
是主索引;
measurement
相当于 SQL 的表;
field
是 SQL 的列,没有被建立索引;
tag
被建立的索引,可以通过它来查询;
points
写入 InfluxDB 是按照 InfluxDB line protocol 语法,具体格式如下:
[,=...] =[,=...] [unix-nano-timestamp]
如下是一个示例:
cpu,host=serverA,region=us_west value=0.64
payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230
stock,symbol=AAPL bid=127.46,ask=127.48
temperature,machine=unit42,type=assembly external=25,internal=37 1434067467000000000
示例中有4个 point
,第1个 point
中:
measurement
为 cputag
为 host=serverA,region=us_westfield
为 value=0.64InfluxDB 的基础使用可以查看官方的入门教程,这是命令行的操作,也支持 HTTP 直接写入和查询,可以查看 curl
示例。
在终端中使用 influx
命令可以进入 InfluxDB client 的命令行工具,会连接到本地的 InfluxDB 实例。接下来就可以使用 Influx Query Language (a.k.a InfluxQL) 语句。
如果想要退出 InfluxQL shell,输入 exit
就可以退出。
使用如下 InfluxQL 语句:
CREATE DATABASE
例如:
> CREATE DATABASE mydb
>
SHOW DATABASES
可以查看所有数据库。
> SHOW DATABASES
name: databases
name
----
_internal
mydb
>
_internal
数据库是 InfluxDB 的内部监控日志。
我们通常要操作某个具体数据库,可以在每次 QL 语句的后面加上具体的数据库名。也可以直接进入具体数据库,使用语句 USE
。
> USE mydb
Using database mydb
>
> INSERT cpu,host=serverA,region=us_west value=0.64
>
> SELECT "host", "region", "value" FROM "cpu"
name: cpu
---------
time host region value
2015-10-21T19:28:07.580664347Z serverA us_west 0.64
>
当我们 INSERT 时没有携带时间戳的话,就会以当时的时间作为该数据的时间戳。
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
>
查询下结果:
> SELECT * FROM "temperature"
name: temperature
-----------------
time external internal machine type
2015-10-21T19:28:08.385013942Z 25 37 unit42 assembly
在 dockerhub 的镜像介绍页面有介绍了如果进行 InfluxDB 的配置以及手动初始化的实用操作。
$ docker run --rm \
-e INFLUXDB_DB=db0 -e INFLUXDB_ADMIN_ENABLED=true \
-e INFLUXDB_ADMIN_USER=admin -e INFLUXDB_ADMIN_PASSWORD=supersecretpassword \
-e INFLUXDB_USER=telegraf -e INFLUXDB_USER_PASSWORD=secretpassword \
-v $PWD:/var/lib/influxdb \
influxdb /init-influxdb.sh
我们进入到 influxdb 的容器内,发现根目录下确实有一个 init-influxdb.sh
的脚本,它会根据环境变量来创建用户和数据库。
# docker exec -it influxdb bash
root@ad46f1238d2a:/# ls
bin boot dev entrypoint.sh etc home init-influxdb.sh lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
这里对手动初始化的步骤进行个验证,实践如下:
# mkdir InfluxDB
# cd InfluxDB/
# sudo docker run --rm\
-e INFLUXDB_DB=db0 -e INFLUXDB_ADMIN_ENABLED=true \
-e INFLUXDB_ADMIN_USER=admin -e INFLUXDB_ADMIN_PASSWORD=supersecretpassword \
-e INFLUXDB_USER=telegraf -e INFLUXDB_USER_PASSWORD=secretpassword \
-v $PWD:/var/lib/influxdb \
influxdb /init-influxdb.sh
# ls
data meta
# docker run --name=influxdb -d -p 8086:8086 -v $PWD:/var/lib/influxdb influxdb
#
在运行这条命令后,目录下确实增加了一些文件,再次进入到容器中查看,确实增加了 db0。
这篇笔记中介绍了 InfluxDB 的特点和基础概念,进行了 Docker 容器的安装和入门基础操作。