1 它是什么

InfluxDB is the open source time series database

2 为什么是它!

官网中列出了它的几个重要特点:

  • Custom high performance datastore written specifically for time series data. The TSM engine allows for high ingest speed and data compression。采用 TSM 引擎,针对时序类型数据写入进行了优化。
  • Written entirely in Go. It compiles into a single binary with no external dependencies. 没有外部依赖。
  • Simple, high performing write and query HTTP APIs.
  • Plugins support for other data ingestion protocols such as Graphite, collectd, and OpenTSDB.
  • Expressive SQL-like query language tailored to easily query aggregated data. 类 SQL 查询语言。
  • Tags allow series to be indexed for fast and efficient queries.采用 Tags 进行快速高效查询。
  • Retention policies efficiently auto-expire stale data.
  • Continuous queries automatically compute aggregate data to make frequent queries more efficient.

开源版本的 InfluxDB 只有一个节点。如果有高可用的需求,可考虑企业版本。

一句话:InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。

3 安装

安装要求

https://docs.influxdata.com/influxdb/v1.7/introduction/installation/

要求如下端口:

  • 8086 HTTP API port
  • 8083 Administrator interface port, if it is enabled
  • 2003 Graphite support, if it is enabled

InfluxDB 采用主机的时间进行时序数据记录,需要本机支持 NTP。

使用 Docker 镜像快速安装

https://hub.docker.com/_/influxdb?tab=description

运行容器:
$ docker run --name=influxdb -d -p 8086:8086 influxdb

在容器中运行 client:
$ docker exec -it influxdb influx

4 基础介绍

基础概念

先掌握 InfluxDB 的几个基本概念。

时间序列是由 0到多个 points 来组成,points 是由以下元素组成:

  • 1个 time(时间戳)
  • 1个 measurement(例如“cpu_load”,仅仅是字符串表示的名称,测量值的名称)
  • 至少1个键值对 field(例如“value=0.64” 或 “temperature=21.2”,是测量值的值本身)
  • 0到多个的 tag(例如“host=server01”, “region=EMEA”, “dc=Frankfurt”,表示测量的一些元数据)

time是主索引;
measurement相当于 SQL 的表;
field是 SQL 的列,没有被建立索引;
tag被建立的索引,可以通过它来查询;

InfluxDB line protocol

points 写入 InfluxDB 是按照 InfluxDB line protocol 语法,具体格式如下:

<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [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 为 cpu
  • tag 为 host=serverA,region=us_west
  • field 为 value=0.64

5 入门

InfluxDB 的基础使用可以查看官方的入门教程,这是命令行的操作,也支持 HTTP 直接写入查询,可以查看 curl示例。

命令行的进入和退出

在终端中使用 influx 命令可以进入 InfluxDB client 的命令行工具,会连接到本地的 InfluxDB 实例。接下来就可以使用 Influx Query Language (a.k.a InfluxQL) 语句。

如果想要退出 InfluxQL shell,输入 exit 就可以退出。

创建数据库

使用如下 InfluxQL 语句:
CREATE DATABASE <db-name>

例如:

> CREATE DATABASE mydb
>

SHOW DATABASES 可以查看所有数据库。

> SHOW DATABASES
name: databases
name
----
_internal
mydb
>

_internal 数据库是 InfluxDB 的内部监控日志。

我们通常要操作某个具体数据库,可以在每次 QL 语句的后面加上具体的数据库名。也可以直接进入具体数据库,使用语句 USE <db-name>

> 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 时没有携带时间戳的话,就会以当时的时间作为该数据的时间戳。

试试插入两个 field

> 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

6 手动初始化数据库

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。

7 小结

这篇笔记中介绍了 InfluxDB 的特点和基础概念,进行了 Docker 容器的安装和入门基础操作。

END


Logo

尧米是由西云算力与CSDN联合运营的AI算力和模型开源社区品牌,为基于DaModel智算平台的AI应用企业和泛AI开发者提供技术交流与成果转化平台。

更多推荐