全部产品
云市场

命令行界面

更新时间:2019-04-24 10:03:49

TSDB For InfluxDB®的命令行界面(influx)是与HTTP API进行交互的shell。可以使用influx写入数据(手动地或者从文件中)、交互式地查询数据和以不同的格式查看查询结果。

下载CLI

进入到下载页面,选择InfluxDB v1.7.6,如下图所示。

然后根据操作系统的不同,下载合适的二进制包,如下图所示。

解压下载好的二进制包,进入到解压后的文件夹,在目录usr/bin/下可获得命令行工具:influx(如果下载的是Windows二进制包,只需进入到解压后的文件夹即可获得二进制文件influx.exe)。例如,如果用户使用的是Mac OS X操作系统,可按如下方式下载和进入influx所在的目录:

  1. $ wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.6_darwin_amd64.tar.gz
  2. $ tar zxvf influxdb-1.7.6_darwin_amd64.tar.gz
  3. $ cd influxdb-1.7.6-1/usr/bin
  4. $

启动influx

要使用CLI,首先在终端启动influx。成功连接到TSDB For InfluxDB®实例后,您会看到以下输出:

  1. $ ./influx -ssl -username <账号名称> -password <密码> -host <网络地址> -port 3242
  2. Connected to https://<网络地址>:3242 version 1.7.x
  3. InfluxDB shell version: 1.7.x

TSDB For InfluxDB®使用SSL协议保障数据传输过程中的安全性。-ssl-username-password-host-port这五个参数是必需的,在每次连接TSDB For InfluxDB®的时候都需要提供。

参数解释

  • -ssl:指的是使用HTTPS连接InfluxDB服务器

  • -username:指的是已创建好的用户账号

  • -password:指的是用户账号对应的密码

  • -host:指的是网络地址,在管理控制台的实例详情中可查看,如下图所示。

  • -port: 指的是网络端口,默认是3242

现在,您可以直接在终端中输入InfluxQL查询和一些CLI命令。如果要输入Flux查询,您需要将选项-type设置为flux。您可以随时使用help来获取可用的命令。如果您想要中断一个长时间运行的InfluxQL查询,请使用Ctrl+C

环境变量

以下环境变量可用于配置influx客户端使用的设置,它们可以用小写或大写的形式来指定,但是优先考虑用大写。

HTTP_PROXY

定义HTTP使用的代理服务器。

value的格式:[protocol://][:port]

  1. HTTP_PROXY=http://localhost:1234

HTTPS_PROXY

定义HTTPS使用的代理服务器。如果同时设置了HTTP_PROXY和HTTPS_PROXY,优先考虑HTTPS_PROXY的值。

value的格式:[protocol://][:port]

  1. HTTPS_PROXY=https://localhost:1443

NO_PROXY

不通过任何代理的host名字的列表。如果仅仅设置为星号(*),那么表示它与所有host匹配。

value的格式:用逗号将多个host隔开

  1. NO_PROXY=123.45.67.89,123.45.67.90

influx选项

您可以在启动influx时,将选项传递给influx。你可以使用$ influx --help列出可用的选项。在下面的列表中,我们简要地讨论了每个选项,在本小节后面,我们详细地介绍了选项-execute-format-import

-compressed

如果导入的文件已经是压缩好的了,请设置为true。-compressed需要和-import一起使用。

-consistency 'any|one|quorum|all'

设置写入一致性的级别。

-database 'database name'

influx连接的数据库。

-execute '<command>'

执行一个InfluxQL命令并退出。

-format 'json|csv|column'

指定服务器返回结果的格式。

-host '<hostname>'

influx连接的host。

-import

从文件中导入新的数据,或者从文件中导入之前导出的数据库。

-password '<password>'

influx用于连接服务器的密码。如果该选项设置为空(-password ''),influx会提示您输入密码。类似的,你也可以使用环境变量INFLUX_PASSWORD设置CLI的密码。

-path

导入文件的路径。-path需要和-import一起使用。

-port 'port #'

influx连接的端口。TSDB For InfluxDB®默认在端口3242上运行。

-pps

每秒允许导入的数据点的个数。默认情况下,pps设置为0并且influx不限制数据导入的速度。-pps需要和-import一起使用。

-precision 'rfc3339|h|m|s|ms|u|ns'

指定查询和写入的时间戳的格式/精度:rfc3339YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ),h (小时),m (分钟),s (秒),ms (毫秒),u (微秒),ns (纳秒)。默认的精度是纳秒。

注释:如果精度设置为rfc3339-precision rfc3339),那么它可以和选项-execute一起使用,但是不能跟选项-import同时使用。其它所有的精度格式(例如,hmsmsuns)既可以跟-execute同时使用,又可以跟-import同时使用。

-pretty

美观地输出json格式的数据,方便阅读。

-ssl

对请求使用HTTPS。

-type

确定使用哪种交互式的shell。默认值是influxql。如果要使用Flux REPL shell,请设置-type的值为flux

-username 'username'

influx用于连接服务器的用户名。类似的,你也可以使用环境变量INFLUX_USERNAME设置CLI的用户名。

-version

显示TSDB For InfluxDB®的版本并退出。

使用-execute执行一个InfluxQL命令并退出

执行不需要指定数据库的查询:

  1. $ influx -ssl -username <账号名称> -password <密码> -host <网络地址> -port 3242 -execute 'SHOW DATABASES'
  2. name: databases
  3. ---------------
  4. name
  5. NOAA_water_database
  6. _internal
  7. telegraf
  8. pirates

执行需要指定数据库的查询,同时,改变时间戳精度:

  1. $ influx -ssl -username <账号名称> -password <密码> -host <网络地址> -port 3242 -execute 'SELECT * FROM "h2o_feet" LIMIT 3' -database="NOAA_water_database" -precision=rfc3339
  2. name: h2o_feet
  3. --------------
  4. time level description location water_level
  5. 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064
  6. 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12
  7. 2015-08-18T00:06:00Z between 6 and 9 feet coyote_creek 8.005

使用-format指定服务器返回结果的格式

默认的格式是column

  1. $ influx -ssl -username <账号名称> -password <密码> -host <网络地址> -port 3242 -format=column
  2. [...]
  3. > SHOW DATABASES
  4. name: databases
  5. ---------------
  6. name
  7. NOAA_water_database
  8. _internal
  9. telegraf
  10. pirates

将格式改为csv

  1. $ influx -ssl -username <账号名称> -password <密码> -host <网络地址> -port 3242 -format=csv
  2. [...]
  3. > SHOW DATABASES
  4. name,name
  5. databases,NOAA_water_database
  6. databases,_internal
  7. databases,telegraf
  8. databases,pirates

将格式改为json

  1. $ influx -ssl -username <账号名称> -password <密码> -host <网络地址> -port 3242 -format=json
  2. [...]
  3. > SHOW DATABASES
  4. {"results":[{"series":[{"name":"databases","columns":["name"],"values":[["NOAA_water_database"],["_internal"],["telegraf"],["pirates"]]}]}]}

将格式改为json并开启美观的输出:

  1. $ influx -ssl -username <账号名称> -password <密码> -host <网络地址> -port 3242 -format=json -pretty
  2. [...]
  3. > SHOW DATABASES
  4. {
  5. "results": [
  6. {
  7. "series": [
  8. {
  9. "name": "databases",
  10. "columns": [
  11. "name"
  12. ],
  13. "values": [
  14. [
  15. "NOAA_water_database"
  16. ],
  17. [
  18. "_internal"
  19. ],
  20. [
  21. "telegraf"
  22. ],
  23. [
  24. "pirates"
  25. ]
  26. ]
  27. }
  28. ]
  29. }
  30. ]
  31. }

使用-import从文件中导入数据

导入的文件包含两部分:

  • DDL (Data Definition Language,数据定义语言):包含创建数据库和管理保留策略的InfluxQL命令。由于您的数据库和保留策略已经创建好,所以在文件中可以忽略这部分。
  • DML (Data Manipulation Language,数据操纵语言):列出了相关的数据库和保留策略(如果需要的话),并包含符合行协议的数据。

示例:
假设名为pirates的数据库和名为oneday的保留策略都已经创建好。

文件(datarrr.txt):

  1. # DML
  2. # CONTEXT-DATABASE: pirates
  3. # CONTEXT-RETENTION-POLICY: oneday
  4. treasures,captain_id=dread_pirate_roberts value=801 1439856000
  5. treasures,captain_id=flint value=29 1439856000
  6. treasures,captain_id=sparrow value=38 1439856000
  7. treasures,captain_id=tetra value=47 1439856000
  8. treasures,captain_id=crunch value=109 1439858880

命令:

  1. $influx -ssl -username <账号名称> -password <密码> -host <网络地址> -port 3242 -import -path=datarrr.txt -precision=s

结果:

  1. 2015/12/22 12:25:06 Processed 0 commands
  2. 2015/12/22 12:25:06 Processed 5 inserts
  3. 2015/12/22 12:25:06 Failed 0 inserts

注释:对于包含大量数据的数据集,influx每10万个点输出一个状态信息。例如:
2015/08/21 14:48:01 Processed 3100000 lines. Time elapsed: 56.740578415s. Points per second (PPS): 54634

关于-import,需要注意的事项:

  • 通过使用-pps设置每秒允许导入的数据点的个数,将数据点写入数据库。默认情况下,pps设置为0并且influx不限制数据导入的速度。
  • 允许导入.gz文件,只需在命令中加入-compressed
  • 对于文件中的数据点,请提供时间戳。TSDB For InfluxDB®为没有时间戳的数据点分配相同的时间戳,这可能会导致意外的数据覆盖现象。
  • 如果您的数据文件中有超过5,000个数据点,那么可能有必要将文件拆分成多个文件,使得数据可以批量写入TSDB For InfluxDB®。我们建议以5,000或10,000个数据点为一批数据写入TSDB For InfluxDB®。如果每一批数据的数据点变少,会产生更多的HTTP请求,导致性能无法达到最优。默认情况下,HTTP请求在五秒后超时。虽然在请求超时后TSDB For InfluxDB®依旧会尝试写入数据,但是并不保证这些数据点已成功写入。

influx命令

在CLI中输入help可获得部分可用的命令。

命令

在下面的列表中,我们简要地讨论了每个命令,在本小节后面,我们详细地介绍了命令insert

auth

提示您输入用户名和密码。在向数据库发送请求时,influx需要这些认证信息。类似的,你也可以使用环境变量INFLUX_USERNAMEINFLUX_PASSWORD分别设置CLI的用户名和密码。

chunked

当发出查询请求时,开启服务器的分块返回结果功能。默认情况下开启该功能。

chunk size <size>

设置返回结果的分块大小。默认大小是10,000。通过将size设置为0,chunk size可重置为默认值。

clear [ database | db | retention policy | rp ]

清除当前数据库或保留策略的上下文。

connect <host:port>

在不退出shell的情况下,连接到其它服务器。默认情况下,influx连接到localhost:8086。如果您没有指定host或者port,influx假设未指定的参数使用默认值。

consistency <level>

设置写入一致性的级别:anyonequorum或者all

Ctrl+C

中断当前正在运行的查询。当交互式查询因为试图返回太多数据而太长时间没有返回结果时,这个命令就变得非常有用。

exit quit Ctrl+D

退出influx shell。

format <format>

指定服务器返回结果的格式:jsoncsvcolumn

history

显示命令的历史记录。若想在shell中使用历史命令,只需使用“向上”箭头即可。influx将您最后的1000个命令存储在主目录中的.influx_history文件。

insert

使用行协议写入数据。

precision <format>

指定查询和写入的时间戳的格式/精度:rfc3339YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ),h(小时),m(分钟),s(秒),ms(毫秒),u(微秒),ns(纳秒)。默认的精度是纳秒。

pretty

美观地输出json格式的数据,方便阅读。

settings

输出shell的当前设置,包括HostUsernameDatabaseRetention PolicyPretty状态、Chunked状态、Chunk SizeFormatWrite Consistency

use [ "<database_name>" | "<database_name>"."<retention policy_name>" ]

设置当前使用的数据库和/或保留策略。一旦influx设置了数据库和/或保留策略,那么在查询中无需再指定数据库和/或保留策略。如果您没有指定保留策略,influx自动查询数据库的默认(DEFAULT)保留策略。

使用insert将数据写入TSDB For InfluxDB®

输入insert,然后输入符合行协议的数据,可将数据写入TSDB For InfluxDB®。使用insert into <retention policy> <line protocol>可将数据写入到指定的保留策略。

将数据写入单个field,其中,该field在measurement treasures中,并且这个measurement带有tag captain_id = pirate_kinginflux自动将数据写入到数据库的默认(DEFAULT)保留策略中。

  1. > INSERT treasures,captain_id=pirate_king value=2
  2. >

将跟上面相同的数据点写入到已经存在的保留策略oneday中:

  1. > INSERT INTO oneday treasures,captain_id=pirate_king value=2
  2. Using retention policy oneday
  3. >

查询

influx中执行所有的InfluxQL查询。

有关InfluxQL的文档,请查看文档数据探索Schema探索数据库管理


InfluxDB® is a trademark registered by InfluxData, which is not affiliated with, and does not endorse, TSDB for InfluxDB®.