入门指南
使用已安装的InfluxDB OSS, 您就可以做一些有趣的事情了。在本节中,我们将使用influx
命令行界面(CLI),它包含在所有InfluxDB软件包中,是一种轻量简单的数据库交互工具。默认情况下,CLI通过在端口8086
向InfluxDB API发送请求来直接与InfluxDB通信。
创建数据库
如果您在本地安装了InfluxDB,则应该通过命令行使用influx
命令。执行influx
将启动CLI并自动连接到本地的InfluxDB实例(假设您已经使用service influxdb start
或直接运行influxd
启动了服务),输出将如下所示:
$ influx -precision rfc3339
Connected to http://localhost:8086 version 1.8.x
InfluxDB shell 1.8.x
>
说明:
- InfluxDB API 默认在端口
8086
上运行。 因此,默认情况下,influx
将连接到localhost
主机的8086
端口。 如果需要更改这些默认值,请运行influx --help
. -precision
参数指定所有时间戳返回的格式和精度。 在上面的示例中,rfc3339
告诉InfluxDB以RFC3339格式 (YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ
)返回时间戳。
命令行现在以influx查询语言(简称InfluxQL)格式的形式接收输入,如果需要退出InfluxQL Shell,请输入exit
并按回车键。
新安装的InfluxDB没有数据库(除了系统自带数据库_internal),因此第一步需要创建一个数据库,创建数据库的命令为CREATE DATABASE <db-name>
,其中<db-name>
是您要创建的数据库名称,数据库的名字可以是被双引号引起来的任意Unicode字符。如果名称仅包含ASCII字母、数字、下划线并且不以数字开头,则也可以不加引号。
在指南中,我们使用的数据库名称为mydb
:
> CREATE DATABASE mydb
>
说明: 按下回车键后,不会出现任何提示和内容。在CLI中,这意味着该语句已成功执行。如果出现提示或内容,则表示命令出错。这就是所谓的
没有消息就是好消息
。
现在你已经创建了数据库mydb
,我们将使用SHOW DATABASES
语句显示所有现有的数据库:
> SHOW DATABASES
name: databases
name
----
_internal
mydb
>
说明: 数据库_internal由InfluxDB自己创建,用于存储内部运行的监控指标。
与SHOW DATABASES
不同,大多数InfluxQL语句必须针对特定数据库进行操作。您当然可以在每一个查询语句上带上你想查的数据库的名字,但是CLI提供了一条便捷语句,USE <db-name>
语句为以后所有请求自动设置数据库,例如:
> USE mydb
Using database mydb
>
之后的命令只针对数据库mydb
运行。
写入和探索数据
现在我们有了一个数据库,InfluxDB准备接收查询和写入请求。
首先,简单介绍一下InfluxDB数据存储模型。InfluxDB中的数据按照time series(时间序列)
来组织,其包含一个被测量的指标值,如“cpu_load”或者”temperature”。time series有零个或多个points(数据点)
,每个point都是一个测量值。point由time
(一个时间戳)、measurement
(测量指标,例如“cpu_load”)、至少一个key-value格式的field
(测量值,例如“value=0.64”或者“temperature=2.12”)和零或多个包含测量值元数据的key-value格式的tag
(标签,例如“host=server01”,“region=EMEA”,“dc=Frankfurt”)组成。
从概念上来讲,您可以将measurement
看成是SQL里面的table。其中,time
始终是主索引,tag
和field
是表格中的列,tag
会被索引,而field
则不会。不同之处在于,使用InfluxDB,您可以有数百万的measurements,无需预先定义数据的schema,并且null值不会被存储。
数据写入InfluxDB需要使用行协议(Line Protocol),该协议遵循以下格式:
<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
说明: 更多关于行协议的信息, 请参考 行协议参考 .
使用CLI写入一个point到InfluxDB,请先输入INSERT
,然后输入该point的信息:
> INSERT cpu,host=serverA,region=us_west value=0.64
>
现在,一个measurement为cpu
,tag为host
和region
,fieldvalue
为0.64
的point已经写入数据库。
查询刚刚写入的数据:
> SELECT "host", "region", "value" FROM "cpu"
name: cpu
---------
time host region value
2015-10-21T19:28:07.580664347Z serverA us_west 0.64
>
说明: 前面我们在写入ponts的时候病没有提供时间戳。如果写入没有带时间戳的数据点,InfluxDB会在获取该点时,把本地当前时间分配给该数据点,作为该数据点的时间戳。这意味着您的时间戳跟上面的会有所不同。
让我们尝试写入另一种类型的数据,同一个measurement有两个field:
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
>
查询的时候,若想返回所有的field和tag,可以使用操作符*
:
> 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相关的概念,请查看文档关键概念。