InfluxDB 1.3初步接触

InfluxDB 1.3初步接触

InfluxDB是从头开始构建的时间序列数据库,用于处理非常高的写入和查询负载。 这是TICK Stack的第二块。 InfluxDB旨在用作涉及大量时间戳数据的任何用例的后备存储,包括DevOps监控,应用指标,IoT传感器数据和实时分析。
官方英文版本:https://docs.influxdata.com/influxdb/v1.3/

主要特征

以下是InfluxDB目前支持的一些功能,使其成为处理时间序列数据的绝佳选择。

  • 专门针对时间序列数据所定制的高性能数据存储,TSM引擎允许高数据获取速度和数据压缩能力。
  • 完全由Go编写。它编译成一个没有外部依赖关系的单个二进制文件。
  • 简单,高性能的写入和查询HTTP(S)API。
  • 插件支持其他数据采集协议,如Graphite,collectd和OpenTSDB。
  • 可以使用SQL类查询语言来进行简单的数据查询和汇总。
  • Tags允许被尽可能快的查询和索引。
  • 保留策略有效地自动过期失效数据。
  • 连续查询会自动计算聚合数据,使频繁查询更有效率。
  • 内置Web管理界面。
  • 然而,InfluxDB的开源版本在单个节点上运行。如果您的要求规定了高可用性设置以消除单点故障,则应探索InfluxDB Enterprise Edition

下载

https://portal.influxdata.com/downloads#influxdb

安装

网络

默认情况下,InfluxDB使用以下网络端口:

  • TCP端口8086用于通过InfluxDB的HTTP API进行client-server通信
  • TCP端口8088用于RPC服务进行备份和还原
  • 除了上述端口,InfluxDB还提供可能需要自定义端口的多个插件。 所有端口映射可以通过配置文件进行修改,配置文件位于/etc/influxdb/influxdb.conf,用于默认安装。

NTP

InfluxDB使用主机在UTC的本地时间为数据和协调目的分配时间戳。 使用网络时间协议(NTP)来同步主机之间的时间; 如果主机的时钟与NTP不同步,写入InfluxDB的数据的时间戳可能不正确。

安装

更完整的平台安装请看官网:https://docs.influxdata.com/influxdb/v1.3/introduction/installation/
对于Ubuntu平台来说:
使用下面的命令添加 InfluxData repository并安装InfluxDB

	curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
	source /etc/lsb-release
	echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
	sudo apt-get update && sudo apt-get install influxdb
	sudo service influxdb start

或者如果您的操作系统使用systemd(Ubuntu 15.04+,Debian 8+):

	sudo apt-get update && sudo apt-get install influxdb
	sudo systemctl start influxdb

开始使用

InfluxDB安装以后,你可以开始做一些很棒的事情。 在本节中,我们将使用influx命令行界面(CLI),它包含在所有InfluxDB软件包中,是一种与数据库进行交互的轻量级和简单的方式。 默认情况下,CLI通过端口8086向InfluxDB HTTP API发出请求,直接与InfluxDB进行通信。
注意:也可以通过制作原始HTTP请求来使用数据库。参考writing_dataquerying_data

创建数据库

如果您已经在本地安装了InfluxDB,那么流行命令应该通过命令行可用。 执行influx将启动CLI并自动连接到本地InfluxDB实例(假设您已经启动服务器启动服务service influxdb start)。 输出应如下所示:

	$ influx -precision rfc3339
	Connected to http://localhost:8086 version 1.3.x
	InfluxDB shell 1.3.x
	>

注意:
默认情况下,InfluxDB HTTP API在端口8086上运行。 因此,influx将默认连接到端口8086和localhost。 如果您需要更改这些默认值,请运行influx --help
-precision参数指定任何返回的时间戳的格式/精度。
rfc3339告诉InfluxDB返回RFC3339格式(YYYY-MM-DDTHH:MM:SS.nnnnnnnnnnZ)的时间戳。
命令行现在可以以Influx查询语言(a.k.a InfluxQL)语句的形式进行输入。要退出InfluxQL外壳,请键入exit并返回。
全新安装的InfluxDB没有数据库(除了系统_internal),因此创建一个数据库是我们的第一个任务。 您可以使用CREATE DATABASE <db-name> InfluxQL语句创建数据库,其中是要创建的数据库的名称。 只要字符串被双引号,数据库的名称可以包含任何Unicode字符。 如果名称只包含ASCII字母,数字或下划线,并且不以数字开头,那么名称也可以不引用。
在本指南中,我们将使用数据库名称mydb

	CREATE DATABASE mydb

注意:点击enter后,会出现一个新的提示,没有其他显示。 在CLI中,这意味着语句被执行,并且没有显示错误。 如果发生错误,总会出现错误。 没有消息就是好消息! 现在mydb数据库被创建,我们将使用SHOW DATABASES语句来显示所有现有的数据库:
可以使用SHOW DATABASES来列出所有的数据库:

	> SHOW DATABASES
	name: databases
	---------------
	name
	_internal
	mydb

注意:_internal数据库是由InfluxDB创建和使用的,用于存储内部运行时metrics。 稍后检查一下,以了解InfluxDB在引擎盖下的表现。
SHOW DATABASES不同,大多数InfluxQL语句必须针对特定的数据库进行操作。 您可以使用每个查询显式地命名数据库,但是CLI提供了一个便利语句USE <db-name>,它将自动设置数据库以供将来的所有请求使用。 例如:

	> use mydb
	Using database mydb

现在将来的命令只能针对mydb数据库运行。

写入数据和浏览数据

现在我们有一个数据库,InfluxDB已经准备好接受查询和写入。
InfluxDB中的数据由“时间序列”组织,其中包含测量值,如“cpu_load”或“temperature”。 时间序列具有零到多个点,一个用于度量的每个离散样本。 点包括时间(时间戳),测量(例如,“cpu_load”),至少一个键值字段(测量值本身,例如“value = 0.64”或“temperature = 21.2”),零到多个key-value tag包含有关该值的任何元数据(例如“host = server01”,“region = EMEA”,“dc = Frankfurt”)。
在概念上,您可以将度量视为SQL表,主索引始终是时间。 tags 和field在表中是有效的列。 tag被编入索引,field不是。 不同之处在于,使用InfluxDB,您可以进行数百万次测量,您无需先前定义模式,并且不存储空值。 使用Line Protocol将Points写入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

注意:有关 line protocol的更多信息,请参见“写入语法”页面
要使用CLI将单个时间序列数据点插入InfluxDB:

	INSERT cpu,host=serverA,region=us_west value=0.64

测量名称为cpu,标签hostregion的点已经写入数据库,测量值为0.64。现在我们将查询刚才写的数据:
现在我们将查询刚才写的数据:

	> select host, region, value from cpu
	name: cpu
	time                         host    region  value
	----                         ----    ------  -----
	2017-08-01T16:16:39.3036495Z 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
	----                         -------- -------- ------- ----
	2017-08-01T16:18:27.5343102Z 25       37       unit42  assembly

InfluxQL有许多功能和关键字,这里没有涵盖,包括支持Go风格正则表达式。例如:

	> SELECT * FROM /.*/ LIMIT 1
	name: cpu
	time                         external host    internal machine region  type value
	----                         -------- ----    -------- ------- ------  ---- -----
	2017-08-01T16:16:39.3036495Z          serverA                  us_west      0.64
	name: temperature
	time                         external host internal machine region type     value
	----                         -------- ---- -------- ------- ------ ----     -----
	2017-08-01T16:18:27.5343102Z 25            37       unit42         assembly
	>
	>
	>
	> select * from cpu where value > 0.5
	name: cpu
	time                         host    region  value
	----                         ----    ------  -----
	2017-08-01T16:16:39.3036495Z serverA us_west 0.64

这是您需要知道的将数据写入InfluxDB并将其进行查询的全部信息。 要了解有关InfluxDB写入协议的更多信息,请参阅写入数据指南。 要进一步探索查询语言,请查看查询数据指南。 有关InfluxDB概念的更多信息,请查看“关键概念”页面

本文版权归作者所有,禁止一切形式的转载,复制等操作
赞赏

微信赞赏支付宝赞赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注