InfluxDB OSS 入门指南
此页面记录了早期版本的 InfluxDB OSS。InfluxDB OSS v2 是最新的稳定版本。请参阅等效的 InfluxDB v2 文档: InfluxDB 入门指南。
安装 InfluxDB 开源 (OSS) 后,您就可以开始做一些很棒的事情了。在本节中,我们将使用 influx
命令行界面 (CLI),它包含在所有 InfluxDB 软件包中,并且是与数据库交互的轻量级且简单的方式。CLI 通过向默认端口 8086
上的 InfluxDB API 发出请求,直接与 InfluxDB 通信。
注意: 数据库也可以通过发出原始 HTTP 请求来使用。有关使用
curl
应用程序的示例,请参阅 写入数据 和 查询数据。
创建数据库
如果您已在本地安装 InfluxDB,则 influx
命令应可通过命令行使用。执行 influx
将启动 CLI 并自动连接到本地 InfluxDB 实例(假设您已使用 service influxdb start
或直接运行 influxd
启动服务器)。输出应如下所示
$ influx -precision rfc3339
Connected to https://127.0.0.1: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
>
注意: 按下回车键后,会出现一个新的提示符,并且不显示其他任何内容。在 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
数据库运行。
写入和浏览数据
现在我们有了一个数据库,InfluxDB 已准备好接受查询和写入。
首先,简要介绍一下数据存储。InfluxDB 中的数据按“时间序列”组织,其中包含一个度量值,例如“cpu_load”或“temperature”。时间序列有零到多个 点
,每个指标的离散样本一个点。点由 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,您可以拥有数百万个 measurement,您不必预先定义模式,并且不会存储空值。
点使用 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
>
现在,已将 measurement 名称为 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 会在摄取点时分配本地当前时间戳。这意味着您的时间戳将有所不同。
让我们尝试存储另一种类型的数据,在同一 measurement 中包含两个字段
> 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/) 页面。
此页对您有帮助吗?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB 和本文档的反馈和错误报告。要获得支持,请使用以下资源
拥有年度或支持合同的客户 可以 联系 InfluxData 支持。