开始使用 InfluxDB OSS
此页面记录了 InfluxDB OSS 的早期版本。InfluxDB OSS v2 是最新的稳定版本。查看等效的 InfluxDB v2 文档: 开始使用 InfluxDB。
安装了 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.11.8
InfluxDB shell 1.11.8
>
注意:
- InfluxDB API 默认运行在端口
8086。 因此,influx默认会连接到端口8086和localhost。 如果您需要更改这些默认值,请运行influx --help。 -precision参数 指定任何返回时间戳的格式/精度。在上面的示例中,rfc3339告诉 InfluxDB 以 RFC3339 格式 返回时间戳 (YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ)。
命令行现在准备好以 Influx 查询语言(即 InfluxQL)语句的形式接收输入。
要退出 InfluxQL shell,请输入 exit 并按回车。
新安装的InfluxDB没有数据库(除了系统 _internal),所以创建一个是我们的第一项任务。您可以使用 CREATE DATABASE <db-name> InfluxQL语句创建一个数据库,其中 <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 ,
它将自动为所有未来的请求设置数据库。例如:
> USE mydb
Using database mydb
>
现在未来的命令将只在 mydb 数据库上运行。
书写与探索数据
现在我们有了一个数据库,InfluxDB 准备好接受查询和写入。
首先,关于数据存储的简要介绍。
在 InfluxDB 中,数据按“时间序列”组织,
时间序列包含一个测量值,例如“cpu_load”或“temperature”。
时间序列有零到多个 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 概念的更多信息,请查看[关键概念](/influxdb/v1/concepts/key_concepts/)页面。