influxdb介绍
- InfluxDB用Go语言编写的一个开源分布式时序、事件和指标数据库
- 提供了Http接口的API来操作数据
- 提供了类似sql的数据库语句
- linux(centos)下安装
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.2.2.x86_64.rpm
yum localinstall influxdb-1.2.2.x86_64.rpm
- 使用docker安装,使用
1.docker pull influxdb
2.sudo docker run -d -p 8083:8083 -p8086:8086 --expose 8090 --expose 8099 --name influxDbService influxdb
3.进入influxdb docker
4.cd /usr/bin/ find | grep influx
5. ./influx
也可以在外部直接使用http方式
curl -G ‘http://127.0.0.1:8086/query?pretty=true’ --data-urlencode “db=xxx” --data-urlencode “q=show measurements;”
表解释
- 每一条数据称为Point,有三部分组成 time,fields,tags
- time:代表时间,每个数据记录时间,是数据库中的主索引
- fields:没有索引的属性, 类似于mysql中的字段
- tags: 有索引的字段
- 在一张表中,只有时间和tags可以用来分组(group by),fields不可以
- 表与表之间没有非常明确的关联关系(外键)
- series集合 简单理解为对tags进行分组,所有tags相同为一组(show series from xxx)
- 支持的http形式
部分经常使用的基本语句
- 连接数据库:influx -host ‘xxx’ -port ‘xx’
- 创建数据库:create database “db_name”
- 查看有哪些数据库:show databases; 使用:use xxx; 查看表:show measurements;
- 创建表,tags,fields如下
- insert test_data,host=127.0.0.2,monitor_name=test1 count=11
简单的查询语句
- 语句查询:select * from “cpu_detail” where time > now() - 5m group by device_name limit 10;(根据最近五分钟的时间查询根据cpu名称分组的十条数据)
- http查询:curl -G ‘http://xxx.xxx.xx.xx:8060/query?pretty=true’ --data-urlencode “db=system” --data-urlencode “q=SELECT * FROM cpu_detail where time > now() - 5m group by device_name LIMIT 10” (查询同上,会返回json数据)
比较重要的数据保存策略
- 简单解释就是多久删一次数据,应为influxdb不支持删除和修改操作
- 官方解释:InfluxDB没有提供直接删除Points的方法,但是它提供了Retention Policies。主要用于指定数据的保留时间:当数据超过了指定的时间之后,就会被删除
- 查看当前数据库的Retention Policies:show RETENTION POLICIES ON “xxx”
创建保存策略
- CREATE RETENTION POLICY “2_hours” ON “telegraf” DURATION 2h REPLICATION 1 DEFAULT(通过这份语句可以添加策略,本例在 telegraf 库添加了一个2小时的策略,名字叫做 2_hours, duration为2小时,副本为1,设置为默认策略)
- 其中duration 它具有各种时间参数,比如:h(小时),w(星期)
修改保存策略
- ALTER RETENTION POLICY “2_hours” ON “telegraf” DURATION 4h DEFAULT(把添加的过期时间改为4小时)
删除策略
- drop retention POLICY “2_hours” ON “telegraf”
对某张表进项单独的数据策略
- insert into “2_hours” devops-idc-sz,host=server01 cpu=23.1,mem=0.63(需要在新增数据的时候对这个数据进行选用保存策略)
第三方库API接口
- https://docs.influxdata.com/influxdb/v0.10/clients/api/
- 用python举例
from influxdb import InfluxDBClient
client = InfluxDBClient('xxx', xx, '', '', 'xx')
result = client.query('SELECT * FROM xxx WHERE time > now() - 5m limit 1;')
print "Result: {0}".format(result)