安装 InfluxDB开源(OSS)后,您就可以开始做一些很棒的事情了. 在本节中,我们将使用influx
命令行界面 (CLI),它包含在所有InfluxDB软件包中,并且是与数据库进行交互的轻量级简单方法. 默认情况下,CLI通过在端口8086
上向InfluxDB API发出请求来直接与InfluxDB通信.
Creating a database
If you’ve installed InfluxDB locally, the influx
command should be available via the command line.
Executing influx
will start the CLI and automatically connect to the local InfluxDB instance
(assuming you have already started the server with service influxdb start
or by running influxd
directly).
The output should look like this:
$ influx -precision rfc3339
Connected to http://localhost:8086 version 1.7.x
InfluxDB shell 1.7.x
>
Notes:
- 默认情况下,InfluxDB API在端口
8086
上运行. 因此,默认情况下,influx
将连接到端口8086
和localhost
. 如果需要更改这些默认值,请运行influx --help
.-precision
参数指定任何返回的时间戳的格式/精度. 在上面的示例中,rfc3339
告诉InfluxDB以RFC3339格式 (YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ
)返回时间戳.
命令行现在准备好以Influx查询语言(aka InfluxQL)语句的形式接受输入. 要退出InfluxQL Shell,请键入exit
并按回车键.
全新安装的InfluxDB没有数据库(系统_internal
),因此创建数据库是我们的首要任务. 您可以使用CREATE DATABASE <db-name>
InfluxQL语句CREATE DATABASE <db-name>
,其中<db-name>
是您要创建的数据库的名称. 数据库名称可以包含任何unicode字符,只要该字符串被双引号引起来即可. 如果名称仅包含ASCII字母,数字或下划线并且不以数字开头,则也可以不加引号.
在本指南中,我们将使用数据库名称mydb
:
> CREATE DATABASE mydb
>
注意:按下Enter键后,会出现一个新的提示,并且不显示其他任何内容. 在CLI中,这意味着该语句已执行,没有错误可显示. 如果出现问题,将始终显示错误. 没有消息就是好消息!
现在已经创建了mydb
数据库,我们将使用SHOW DATABASES
语句显示所有现有数据库:
> SHOW DATABASES
name: databases
name
----
_internal
mydb
>
注意:
_internal
数据库由InfluxDB创建并用于存储内部运行时指标. 稍后进行检查,以有趣地了解InfluxDB的性能如何.
与SHOW DATABASES
不同,大多数InfluxQL语句必须针对特定数据库进行操作. 您可以为每个查询显式命名数据库,但是CLI提供了一个便利声明USE <db-name>
,它将自动为将来的所有请求设置数据库. 例如:
> USE mydb
Using database mydb
>
现在,将来的命令将仅在mydb
数据库上运行.
Writing and exploring data
现在我们有了数据库,InfluxDB准备好接受查询和写入.
首先,简要介绍一下数据存储. InfluxDB中的数据按"时间序列"进行组织,其中包含一个测量值,例如" cpu_load"或"温度". 时间序列有零到许多points
,每个度量的离散样本一个. 点包括time
(时间戳), measurement
(例如" cpu_load"),至少一个键值field
(测量值本身,例如" value = 0.64"或" temperature = 21.2")和零包含许多有关该值的任何元数据的键值tags
(例如" host = server01"," region = EMEA"," dc = Frankfurt").
从概念上讲,您可以将measurement
视为一个SQL表,其中的主要索引始终是时间. tags
和fields
实际上是表中的列. tags
已建立索引,而fields
未建立索引. 区别在于,使用InfluxDB,您可以进行数百万次的测量,无需预先定义架构,也不会存储空值.
使用InfluxDB行协议将点写入InfluxDB,该协议遵循以下格式:
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
以下几行都是可以写入InfluxDB的点的所有示例:
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
注意:有关InfluxDB线路协议的详细信息,请参阅InfluxDB线路协议语法页面.
要使用CLI将单个时间序列数据点插入InfluxDB,请输入INSERT
然后输入一个点:
> INSERT cpu,host=serverA,region=us_west value=0.64
>
现在将具有测量名称cpu
以及标签host
和region
写入数据库,测量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
>
注意:编写我们的观点时,我们没有提供时间戳. 如果没有为某个点提供时间戳,则在摄取该点时,InfluxDB会分配本地当前时间戳. 这意味着您的时间戳将有所不同.
让我们尝试存储另一种类型的数据,其中两个字段处于同一度量中:
> 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
>
警告:在大型数据库上使用
*
不带LIMIT
子句可能会导致性能问题. 您可以使用Ctrl+C
取消响应时间太长的查询.
InfluxQL具有许多此处未涵盖的功能和关键字 ,包括对Go风格的正则表达式的支持. 例如:
> SELECT * FROM /.*/ LIMIT 1
--
> SELECT * FROM "cpu_load_short"
--
> SELECT * FROM "cpu_load_short" WHERE "value" > 0.9
这就是您需要将数据写入InfluxDB并进行查询的全部. 要了解有关InfluxDB写协议的更多信息,请查看有关写数据的指南. 要进一步探索查询语言,请查看有关查询数据的指南. 有关InfluxDB概念的更多信息,请查看" 关键概念"页面.