支持两种原生的操作模式:
上一篇讲过influx命令行的含义和基本用法。这里用几个示例演示。
RESTful风格的接口,返回JSON格式的响应数据,并支持身份认证、JWT令牌、丰富的HTTP响应代码等。 influxDB API接口及接口的定义描述如下图所示:
写操作支持简明的行协议,行协议是一种基于文本格式的协议。
行协议的单行文本表示一条时序数据,由表、标签集、指标集和时间戳4部分组成,行协议的基本语法如下所示:
//cpu_usage是表明,host、region是tag,value、name是值,最后是时间戳
insert cpu_usage,host=server01,region=ch value=2,name=zhongguo 1592906727717942736
行协议中,不同的字段支持不通的数据类型
注意:整形数据,需要在数据后面加个i,否则会被当成浮点型。
行协议中一些字段对特殊符号较敏感,当需要使用这些敏感符号作为字段的一部分时,需要在前面加\
进行转义处理。
注意
1. 行协议对空格敏感,标签集和指标集中间必须有空格。
2. 时间戳参数不可以加引号,否则会报错。
3. 指标值支持字符串类型,要使用双引号将字符串类型的指标值括起来
需避免在表明和字段名中使用InfluxDB的保留字。
注意
1.关键字time是一个特殊的保留字,time不可以用作标签键和指标键的命名。但可以用作其他命名,如表的命名、保留策略的命名
2.除了时间戳字段外,其他字段都是大小写敏感的
写入数据前,先指定数据库 : use 数据库名
实际应用中,我们也是通过API写入的。写入语法如下:
其中,line_protocol_expression表示行协议格式的时序数据,每条时序数据之间使用换行分隔符。
InfluxDB支持两种方式导入InfluxDB API导入和influx-import导入
支持导入内容为行协议格式时序数据的文本文件。
其中,<file>标识导入文件的存储路径
例子:将server1和server2某一天的内存监控数据导入monitor数据库
注意:
1.默认情况下InfluxDB API的超时时间为5秒,超时之后InfluxDB仍然会继续将数据写完,但请求方由于已经超时无法知道最终是否写入成功。
2.当写入数据超过5000个的时候,应使用多次HTTP请求分批次写入数据
功能更丰富。
当数据量较大时,每插入100000条数据会输出一次执行状态日志。 使用-compressed参数可以导入gz压缩文件中的时序数据。
支持类sql的语法进行数据查询,简称influxQL。 支持SELECT语句、GROUP BY语句、INTO语句、正则表达式、SHOW语句、数据库管理语句、保留策略管理语句、DROP语句、持续查询、丰富的函数和数据运算符等。
其中,<field_key>和<measurement_name>是必须的,其它部分为可选。<field_key>[,<field_key>,<tag_key>]表示指定查询结果展现的字段:
<conditional_expression>表示查询过滤条件,AND表示条件与,OR表示条件或。
注意:不支持在where语句中使用or来指定多个时间范围。
select * from my where time='2019-07-31T20:07:00Z' or time='2019-07-31T20:07:00Z' 将返回空
从cpu_usage表中查询CPU使用率大于30的时序数据
select * from cpu_usage where percent > 30
在cpu_usage中过滤主机名为server1的时序数据
select * from cpu_usage where host='server01' and time>now()-1d
根据用户指定的标签或者时间间隔对查询结果数据进行分组。
对结果集进行排序,排序方式包括时间升序和时间降序
返回指定查询的前N个时间序列线中的时序数据,一般与GROUP BY搭配使用。 SLIMET是对分组个数进行限制,LIMIT是对记录数进行限制。
类似于分页功能。
对分组进行分页啦。
作为时序数据库, 支持丰富的时间计算、时间查询、时间分组等操作。 时间语法支持绝对时间和相对时间。
可以通过rfc3339时间字符串或Epoch时间来指定绝对时间。 rfc3339时间字符串如下:
其中,.nnnnnnnnnZ为可选,默认为000000000 简化版rfc3339时间字符串如下:
其中,HH:MM:SS.nnnnnnnnnZ为可选,默认全为0
infludDB支持的时间单位有:
可以通过now()函数实现相对当前服务器本地时间的数据查询,now()函数以当前服务器本地时间作为值,使用+ -等操作符获取指定时间间隔的当前绝对时间
select查询语句<database> <field_key> <measurement> <retension_policy> <tag_key>中以下情况要加双引号
通过”内存使用量/内存使用率=总内存“可以只到两台服务器都是8G内存
& 按位与
| 按位或
^ 按位异或
select value&10 from cpu
包括聚合函数和选择函数。
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
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
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有