「influxDB 原理与实践(二)」详解influxDB的写入与查询

1. 操作模式

支持两种原生的操作模式:

  1. influx命令行工具,类似mysql命令行工具,可以方便的执行管理、运维、调试性质的操作。
  2. InfluxDB API,是一种可编程性强、编程语言友好的RESTful API的操作接口,支持HTTP和HTTPS协议。

1.1 influx命令行模式

上一篇讲过influx命令行的含义和基本用法。这里用几个示例演示。

  • format命令
    设置服务器响应数据的格式,支持JSON/CSV/COLUMN3种数据格式。
  • history命令
    显示命令操作的历史记录。默认情况下,influx记录最后使用的1000条命令,存储在主目录中的./influx_history文件中。
  • precision命令
    指定查询和写入的时间戳的格式/精度,支持rfc3339(YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ)、h(小时)、m(分)、s(秒)、ms(毫秒)、u(微秒)、ns(纳秒),进度默认为纳秒。
    设置命令 precision rfc3339
    设置到h(小时)级别,precision h
    设置到ns(纳秒)级别,precision ns
  • pretty,开启json格式的漂亮打印
    format json
    pretty
  • settings

1.2 API模式

RESTful风格的接口,返回JSON格式的响应数据,并支持身份认证、JWT令牌、丰富的HTTP响应代码等。
influxDB API接口及接口的定义描述如下图所示:


2. 写入

写操作支持简明的行协议,行协议是一种基于文本格式的协议。

2.1 行协议

行协议的单行文本表示一条时序数据,由表、标签集、指标集和时间戳4部分组成,行协议的基本语法如下所示:


  • 标签tag-key=tag-value分别表示标签键和标签值,用于创建索引,提高查询性能。标签键和标签值都要求是字符串,该数据保存在META节点中。
  • 指标field-key=field-value分别是指标键和指标值,不会被索引,一般存放的是具体的时序数据,即随着时间戳的变化而变化的数据。指标键要求是字符串,而指标值可以是字符串类型、浮点型、整型、或布尔型
  • timestamp,可选参数,纳秒级精度的时间戳,如果没有该参数,InfluxDB将采用数据写入时间为时间戳


//cpu_usage是表明,host、region是tag,value、name是值,最后是时间戳
insert cpu_usage,host=server01,region=ch  value=2,name=zhongguo 1592906727717942736

2.1.1 数据类型

行协议中,不同的字段支持不通的数据类型


注意:整形数据,需要在数据后面加个i,否则会被当成浮点型。

2.1.2 特殊符号

行协议中一些字段对特殊符号较敏感,当需要使用这些敏感符号作为字段的一部分时,需要在前面加\进行转义处理。


注意
1. 行协议对空格敏感,标签集和指标集中间必须有空格。
2. 时间戳参数不可以加引号,否则会报错。
3. 指标值支持字符串类型,要使用双引号将字符串类型的指标值括起来

2.1.3 保留字和命名规范

需避免在表明和字段名中使用InfluxDB的保留字。


注意
1.关键字time是一个特殊的保留字,time不可以用作标签键和指标键的命名。但可以用作其他命名,如表的命名、保留策略的命名
2.除了时间戳字段外,其他字段都是大小写敏感的

2.2 写入数据

写入数据前,先指定数据库 : use 数据库名

2.2.1通过API写入

实际应用中,我们也是通过API写入的。写入语法如下:



其中,line_protocol_expression表示行协议格式的时序数据,每条时序数据之间使用换行分隔符。



2.2.1文件数据导入

InfluxDB支持两种方式导入InfluxDB API导入和influx-import导入

InfluxDB API导入

支持导入内容为行协议格式时序数据的文本文件。


其中,<file>标识导入文件的存储路径
例子:将server1和server2某一天的内存监控数据导入monitor数据库


注意:
1.默认情况下InfluxDB API的超时时间为5秒,超时之后InfluxDB仍然会继续将数据写完,但请求方由于已经超时无法知道最终是否写入成功。
2.当写入数据超过5000个的时候,应使用多次HTTP请求分批次写入数据

2.2.1influx-import导入

功能更丰富。




当数据量较大时,每插入100000条数据会输出一次执行状态日志。
使用-compressed参数可以导入gz压缩文件中的时序数据。

3.查询

支持类sql的语法进行数据查询,简称influxQL。
支持SELECT语句、GROUP BY语句、INTO语句、正则表达式、SHOW语句、数据库管理语句、保留策略管理语句、DROP语句、持续查询、丰富的函数和数据运算符等。

3.1基本的SELECT语句


其中,<field_key>和<measurement_name>是必须的,其它部分为可选。<field_key>[,<field_key>,<tag_key>]表示指定查询结果展现的字段:


3.2WHERE过滤


<conditional_expression>表示查询过滤条件,AND表示条件与,OR表示条件或。
注意:不支持在where语句中使用or来指定多个时间范围。
select * from my where time='2019-07-31T20:07:00Z' or time='2019-07-31T20:07:00Z' 将返回空

3.2.1过滤指标





从cpu_usage表中查询CPU使用率大于30的时序数据
select * from cpu_usage where percent > 30

3.2.2过滤标签




在cpu_usage中过滤主机名为server1的时序数据


3.2.3过滤时间戳

  • 查询主机名为server1的最近一天的数据
    select * from cpu_usage where host='server01' and time>now()-1d

3.3 GROUP BY

根据用户指定的标签或者时间间隔对查询结果数据进行分组。






3.4 ORDER BY

对结果集进行排序,排序方式包括时间升序和时间降序



3.5 LIMIT


3.6 SLIMIT

返回指定查询的前N个时间序列线中的时序数据,一般与GROUP BY搭配使用。
SLIMET是对分组个数进行限制,LIMIT是对记录数进行限制。

3.7 OFFSET



类似于分页功能。

3.8 SOFFSET


对分组进行分页啦。

3.9 时间语法

作为时序数据库, 支持丰富的时间计算、时间查询、时间分组等操作。
时间语法支持绝对时间和相对时间。

3.9.1 绝对时间

可以通过rfc3339时间字符串或Epoch时间来指定绝对时间。
rfc3339时间字符串如下:



其中,.nnnnnnnnnZ为可选,默认为000000000
简化版rfc3339时间字符串如下:



其中,HH:MM:SS.nnnnnnnnnZ为可选,默认全为0



infludDB支持的时间单位有:

  • ns 纳秒
  • u 微妙
  • ms 毫秒
  • s 秒
  • m 分钟
  • h小时
  • d天
  • w周

3.9.1 相对时间

可以通过now()函数实现相对当前服务器本地时间的数据查询,now()函数以当前服务器本地时间作为值,使用+ -等操作符获取指定时间间隔的当前绝对时间




3.10 关于双引号

select查询语句<database> <field_key> <measurement> <retension_policy> <tag_key>中以下情况要加双引号

  • 包含非[A-z,0-9]范围的字符
  • 以数字开头
  • 使用保留字
    其他情况,允许使用不加双引号的简写。

3.11 数学运算符

  • '+' 、'-'、 '*'、 '/'、 '%'
    在select等语句中,指标值和WHERE条件语句支持以上数学运算。




    通过”内存使用量/内存使用率=总内存“可以只到两台服务器都是8G内存

  • 与 或 异或
    & 按位与
    | 按位或
    ^ 按位异或
    select value&10 from cpu

3.12函数

包括聚合函数和选择函数。

  • 聚合函数


select count(distinct(value)) from cpu_usage
select mean(value) from cpu_usage where host='server01'



  • 选择函数


    返回value最大的4个值
    select TOP(value,4) from cpu_usage

3.13通过API查询数据

InfluxDB API接口是生产环境中常用的查询方式,通过发送一个GET请求/query路径,并设置URL的db参数为目标数据库,设置URL参数q为查询语句






注意,多条查询用;隔离,这在influx客户端是没问题的,但是应用程序需要将;号转换成%3B才能正常放回两条结果,不然不返回也不会报错。如下所示:
http://192.168.0.138:8086/query?--data-urlencode&db=my&--data-urlencod=&q=select * from cpu where myname='丛治志' %3Bselect count(myname) from cpu
参考https://blog.csdn.net/qq_35981283/article/details/76254420

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342