文档章节

influxdb 学习

solate
 solate
发布于 07/19 15:43
字数 2373
阅读 11
收藏 0

InfluxDB 学习

安装

brew install influxdb

启动

influxd -config /usr/local/etc/influxdb.conf

入门

$ influx -precision rfc3339
Connected to http://localhost:8086 version 1.2.x
InfluxDB shell 1.2.x
>
  • InfluxDB的HTTP接口默认起在8086上,所以inlux默认也是连的本地的8086端口,你可以通过influx --help来看怎么修改默认值。
  • -precision参数表明了任何返回的时间戳的格式和精度,在上面的例子里,rfc3339是让InfluxDB返回RFC339格式(YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ)的时间戳。

用exit 退出命令行。

创建数据库

CREATE DATABASE <db-name>

例如:

CREATE DATABASE mydb

查看数据库

SHOW DATABASES

系统自带的_internal数据库。

  • _internal数据库是用来存储InfluxDB内部的实时监控数据的。
> show databases
name: databases
name
----
_internal
mydb

查看表

show measurements

使用数据库

USE <db-name>

如:

> USE mydb
Using database mydb

读写数据

现在我们已经有了一个数据库,那么InfluxDB就可以开始接收读写了。

InfluxDB里存储的数据被称为时间序列数据

时序数据有零个或多个数据点,每一个都是一个指标值。

数据点包括time(一个时间戳),measurement(例如cpu_load),至少一个k-v格式的field(也即指标的数值例如 “value=0.64”或者“temperature=21.2”),零个或多个tag,其一般是对于这个指标值的元数据(例如“host=server01”, “region=EMEA”, “dc=Frankfurt)。

measurement类比于SQL里面的table,其主键索引总是时间戳。tagfield是在table里的其他列,tag是被索引起来的,field没有。

在InfluxDB里,你可以有几百万的measurements,你不用事先定义数据的scheme,并且null值不会被存储。

将数据点写入InfluxDB,只需要遵守如下的行协议:

<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]

例如

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

使用CLI插入单条的时间序列数据到InfluxDB中,用INSERT后跟数据点:

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

一个measurementcputaghostregionvalue值为0.64的数据点被写入了InfluxDB中。

> SELECT "host", "region", "value" FROM "cpu"
name: cpu
time                        host    region  value
----                        ----    ------  -----
2019-04-16T02:14:49.279748Z serverA us_west 0.64

说明:我们在写入的时候没有包含时间戳,当没有带时间戳的时候,InfluxDB会自动添加本地的当前时间作为它的时间戳。

支持golang样式的正则

> SELECT * FROM /.*/ LIMIT 1
--
> SELECT * FROM "cpu_load_short"
--
> SELECT * FROM "cpu_load_short" WHERE "value" > 0.9

使用

写入数据

向InfluxDB写数据的方式,包括命令行、客户端还有一些像Graphite有一样数据格式的插件

使用HTTP接口创建数据库

使用POST方式发送到URL的/query路径,参数qCREATE DATABASE <new_database_name>

curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mydb"

使用HTTP接口写数据

通过HTTP接口POST数据到/write路径是我们往InfluxDB写数据的主要方式

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'

measurement为cpu_load_short,tag的key为host和region,对应tag的value是server01和us-west,field的key是value,对应的数值为0.64,而时间戳是1434055562000000000。

POST的请求体我们称之为Line Protocol,包含了你希望存储的时间序列数据。它的组成部分有measurement,tags,fields和timestamp。measurement是InfluxDB必须的, 严格地说,tags是可选的,但是对于大部分数据都会包含tags用来区分数据的来源,让查询变得容易和高效。 tag的key和value都必须是字符串。fields的key也是必须的,而且是字符串,默认情况下field的value是float类型的。 timestamp在这个请求行的最后,是一个从1/1/1970 UTC开始到现在的一个纳秒级的Unix time,它是可选的,如果不传, InfluxDB会使用服务器的本地的纳米级的timestamp来作为数据的时间戳,注意无论哪种方式,在InfluxDB中的timestamp只能是UTC时间。

同时写入多个点

同时发送多个数据点到多个series(在InfluxDB中measurement加tags组成了一个series),可以用新的行来分开这些数据点。这种批量发送的方式可以获得更高的性能。

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server02 value=0.67
cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257
cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257'

写了三个数据点到mydb数据库中。第一个点属于series其measurement为cpu_load_short,tag是host=server02, timestamp是server本地的时间戳;第二个点同样是measurement为cpu_load_short, 但是tag为host=server02,region=us-west,且有明确timestamp为1422568543702900257的series; 第三个数据点和第二个的timestamp是一样的,但是series不一样,其measurement为cpu_load_short, tag为direction=in,host=server01,region=us-west。

写入文件中的数据

可以通过curl的@filename来写入文件中的数据,且这个文件里的数据的格式需要满足InfluxDB那种行的语法。

正确的文件(cpu_data.txt)的例子

cpu_load_short,host=server02 value=0.67
cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257
cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257

把cpu_data.txt里的数据写入mydb数据库

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary @cpu_data.txt

如果你的数据文件的数据点大于5000时,你必须把他们拆分到多个文件再写入InfluxDB。 因为默认的HTTP的timeout的值为5秒,虽然5秒之后,InfluxDB仍然会试图把这批数据写进去,但是会有数据丢失的风险

无模式设计

InfluxDB是一个无模式(schemaless)的数据库,你可以在任意时间添加measurement,tags和fields。注意:如果你试图写入一个和之前的类型不一样的数据(例如,filed字段之前接收的是数字类型,现在写了个字符串进去),那么InfluxDB会拒绝这个数据。

对于REST的一个说明

InfluxDB API并不是RESTful的。InfluxDB也只提供了三个API。

HTTP返回值

  • 2xx:如果你写了数据后收到HTTP 204 No Content,说明写入成功了!
  • 4xx:表示InfluxDB不知道你发的是什么鬼。
  • 5xx:系统过载或是应用受损。

查询数据

使用HTTP接口查询数据

过发送一个GET请求到/query路径,并设置URL的db参数为目标数据库,设置URL参数q为查询语句。

curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"

多个查询

在一次API调用中发送多个InfluxDB的查询语句,可以简单地使用分号;分隔每个查询,

curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west';SELECT count(\"value\") FROM \"cpu_load_short\" WHERE \"region\"='us-west'"

其他可选参数

时间戳格式

在InfluxDB中的所有数据都是存的UTC时间,时间戳默认返回RFC3339格式的纳米级的UTC时间,例如2015-08-04T19:05:14.318570484Z,如果你想要返回Unix格式的时间,可以在请求参数里设置epoch参数,其中epoch可以是[h,m,s,ms,u,ns]之一。例如返回一个秒级的epoch:

curl -G 'http://localhost:8086/query' --data-urlencode "db=mydb" --data-urlencode "epoch=s" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"
{"results":[{"statement_id":0,"series":[{"name":"cpu_load_short","columns":["time","value"],"values":[[1422568543,2],[1422568543,0.55]]}]}]}
认证

InfluxDB里面的认证默认是关闭的,

最大行限制

可选参数max-row-limit允许使用者限制返回结果的数目,以保护InfluxDB不会在聚合结果的时候导致的内存耗尽。

在1.2.0和1.2.1版本中,InfluxDB默认会把返回的数目截断为10000条,如果有超过10000条返回,那么返回体里面会包含一个"partial":true的标记。该默认设置可能会导致Grafana面板出现意外行为,如果返回值大于10000时,这个面板就会看到截断/部分数据。

在1.2.2版本中,max-row-limit参数默认被设置为了0,这表示说对于返回值没有限制。

这个最大行的限制仅仅作用于非分块(non-chunked)的请求中,分块(chunked)的请求还是返回无限制的数据。

分块(chunking)

可以设置参数chunked=true开启分块,使返回的数据是流式的batch,而不是单个的返回。返回结果可以按10000数据点被分块,为了改变这个返回最大的分块的大小,可以在查询的时候加上chunk_size参数,例如返回数据点是每20000为一个批次。

curl -G 'http://localhost:8086/query' --data-urlencode "db=deluge" --data-urlencode "chunked=true" --data-urlencode "chunk_size=20000" --data-urlencode "q=SELECT * FROM liters"

采样和数据保留

InfluxDB提供了两个特性——连续查询(Continuous Queries简称CQ)和保留策略(Retention Policies简称RP),分别用来处理数据采样和管理老数据的。

Continuous Query (CQ)是在数据库内部自动周期性跑着的一个InfluxQL的查询,CQs需要在SELECT语句中使用一个函数,并且一定包括一个GROUP BY time()语句。

Retention Policy (RP)是InfluxDB数据架构的一部分,它描述了InfluxDB保存数据的时间。InfluxDB会比较服务器本地的时间戳和你数据的时间戳,并删除比你在RPs里面用DURATION设置的更老的数据。单个数据库中可以有多个RPs但是每个数据的RPs是唯一的。

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1u7stsfxrqbez

参考

InfluxDB中文文档

Telegraf+Influxdb+Grafana构建监控平台

© 著作权归作者所有

上一篇: 正则表达式
solate
粉丝 10
博文 134
码字总数 119760
作品 0
成都
程序员
私信 提问
InfluxDB - 开源的时间序列数据库简介及安装

  InfluxDB   什么是时间序列数据库,最简单的定义就是数据格式里包含Timestamp字段的数据,比如某一时间磁盘使用率、网络流量、CPU的使用率等。   InfluxDB是一个开源的时间序列数据库...

linux运维菜
2018/07/02
0
0
饿了么 Influxdb 实践之路

饿了么 Influxdb 实践之路 前言 Influxdb(https://github.com/influxdata/influxdb)是一个基于 golang 编写,没有额外依赖的开源时序数据库,用于记录 metrics、events,进行数据分析。这篇...

憬薇
2018/07/04
0
0
telegraf v0.1.3 发布,Go 编写的代理程序

telegraf v0.1.3 发布,更新内容如下: Features -- [#35](https://github.com/influxdb/influxdb/pull/35): Add Kafka plugin. Thanks @EmilS! -- [#47](https://github.com/influxdb/influ......

oschina
2015/07/07
2K
4
Jmeter + Grafana搭建实时监控可视化

小贴士: 建议使用jmeter3.3+版本,在这个版本以后才有backend listenter 对接influxDB. Jmeter中backend listenter如图 influxdbUrl :http://localhost:8086/write?db=jmeter #host写安装inf......

Louiezhou
01/18
0
0
重磅 | 物联网数据分析利器 阿里云发布时序数据库InfluxDB版

近年来,由于IOT,APM等系统的需求,一种以时间戳为主键的数据模型,越来越流行,存储该数据模型的数据库被称为时序数据库。 若干年中,市面上出现了很多种不同的时序数据库,他们或数据模型...

焦先
04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
51分钟前
4
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
5
0
OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌:#今日歌曲推荐# 分享The Score的单曲《Revolution》 《Revolution》- The Score 手机党少年们想听歌,请使劲儿戳(这里) @批判派...

小小编辑
今天
2.6K
19
oracle ORA-39700: database must be opened with UPGRADE option

ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00704: bootstrap process failure ORA-39700: database must be opened with UPGRADE option 进程 ID: 3650 会话 ID: 29......

Tank_shu
今天
3
0
分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部