最近做nginx 的访问监控,用到到 influxdb, 把自己对于 influxdb 的使用记录下来.由于现在主要是单机在做实验,所以先写下第一部分给大家分享,第一部分是概念及使用,接下来会是集群的部署及相关概念,第三部分是优化,我会慢慢跟着自己的项目进度补全这三部分,不过也许会太监,写多少是多少吧.[以下说明是基于0.9版本的]
influxdb的安装
首先 influxDB 是一个时序数据库.我的理解是主要按照时间维护提供查询与存储的数据库,我没有去百度上查(因为我不是理论党),所以看到我的理解你也不要惊讶和你在网上看到的不一样,但最终只要用对用好产生价值才是王道.
首先说 influxDB 的安装方式:我的是 centos
|
|
估计有的童鞋访问不了这个地址,但是作为大陆 IT 从业人员,不会或者不能翻墙的话,可以开率换个行业.
然后就是配置文件的修改,/etc/influxdb/influxdb.conf
单机最简配置:
|
|
然后启动就 ok 了service influxdb start
influxdb的一些概念
databse:
数据库,你完全可以理解为 mysql 里面 database 一样的意思
measurement:
英文的意思是度量,这里理解为 mysql 里面的 table, 基本上这是记录一类数据集的一张表,包含在 database 下面.
series(tags):
这个有点不太好解释,理解为标签也是可以的,例如记录一组机器的 CPU 采样的时候,你可以设置两个 tag, 一个是机器的 IP, 一个是 第几个 cpu, 他是一个 map[stirng]string 结构的,在查询的时候,放在 where 条件里面
fields:
这个就是实际记录的数据值,结果是 map[string]interface{},这里面 interface{}可以是 int,int32,int64,float32,float64,是真正需要显示或者计算的值.接着上面的例子说,你可以记录 cpu 里面 sys,io,use 等值.
内置函数:
这里主要是用户 query 的时候让 influxdb 内置计算结果的函数,有点类似 mysql 里面的函数,常用的是 mean(),sum() 其他的我没去用,可以参考官网的说明.
time字段:
这个算是一个内置字段,你不设置的时候数据库会自己添加当前时间,你也可以设置自己想要的时间戳
sequense:
这个也是数据库内置的一个值,用于唯一标记行的,我没有用到基本上也不会用所以没有去深究,有兴趣可以自己去看看官网说明或者 google(别跟我说不会翻墙).
总的来说,没有什么很特别的,只是 series 和 fields在查询的时候和普通的数据库操作不太一样,这点要注意,另外还有一点就是 influxdb 对时间单位的定义是这样的:
|
|
influxdb 会自动解析这个时间后缀,这个在后面会讲到.
influxdb 的操作
有了上面的概念说明,下面的操作也好讲了,
先连接数据库, influxdb 提供了很简单的管理界面,端口是8083,如:http://localhost:8083
,补充说一点,8086是它的 RestAPI 端口,还可以使用本地的 client 来连接,命令就是
|
|
首先说说常用数据库操作:
|
|
这三条基本上会用 mysql 的就不用我解释了.
下面是measurement的操作:
|
|
这里并没有 cteate 的操作,因为在代码里面只要存储了这个measurement,那么就会自动生成.
有了数据库有了表,再来操作 tag与 field.
操作 tag 使用的是 series 这个,具体操作有下面几个:
|
|
这里有两个警告,我是没用到,所以直接借用官网的内容:
|
|
删除写完了,其实还有一个数据切割策略,这里我确实没有用到,所以留到做集群的时候再一并写掉.
下面是查询的说明:
基本上语法结构是和SQL 的语法一致,都是 select xxx from table_name where xxx=xxx order by xxx group by xxx limit 10
这种结构.
例如:
|
|
另外, where 的时候如果带时间的查询可以有两种方式:
第一种是指定具体时间,格式如下”
|
|
第二种时间格式为:
|
|
这事使用内置函数来做计算,后面的1h也就是用上面提到的时间单位来换算的.
注意,这里指定时间的查询条件里面对空格是有规定的,
|
|
以上写法都可以,但是一下写法都是错误的:
|
|
再讲讲二元操作符,直接官网摘抄一下:
|
|
还可以用正则来进行查询,例如:
|
|
其实我没有用过这些,也就没有深究,知道有这么回事就够了.有问题再查官网文档.
说了新增,删除和,那么更新能做么?
不好意思,不能更新,官方的说法是, influxdb 是一个时间序列数据库,它里面的数据是一个时间点的实际情况的记录,要想获取结果,是这些时间点聚合出来的结果,所以不需要更新,更新的话相反会破坏数据的完整性与真实性,所以要么就生成要么就销毁,这理论说起来也对,谁叫别人是这个数据库的原作者呢
influxdb 的一些问题
其实我在使用过程中确实也没有遇到什么问题,只是宕机了两次,没有任何的 dump 文件,在日志里面也找不到,触发条件是我在 grafana 里面