1. 操作模式
支持两种原生的操作模式:
- influx命令行工具,类似mysql命令行工具,可以方便的执行管理、运维、调试性质的操作。
- 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接口及接口的定义描述如下图所示:
- curl -ig http://192.168.0.224:8086/ping
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