转自:http://www.jianshu.com/p/b925b1584ab2

RRDTool 是一套监测工具,可用于存储和展示被监测对象随时间的变化情况。比如,我们在 Windows 电脑上常见的内存和 CPU 使用情况。

RRD 全称是 Round Robin Database ,即「环型数据库」。顾名思义,它是一种循环使用存储空间的数据库,适用于存储和时间序列相关的数据。

RRD 数据库在被创建的时候就已经定义好了大小,当空间存储满了以后,又从头开始覆盖旧的数据,所以和其他线性增长的数据库不同,RRD 的大小可控且不用维护。

你可以把 RRD 理解为一个有时间刻度的圆环,每个刻度上可以存储一个数值,同时有一个从圆心指向最新存储值的指针。

可以想象,随着时间推移,指针会绕着圆心一直移动下去,当它指向下一个刻度后,就可以在那个位置上存储一个新的数值。但是,指针只能绕一个方向前进,假设你存储了时刻3的监测值,那就不能再存储时刻2的监测值了。如下图所示:

圆环

创建 RRD 基本语法

rrdtool create filename 

[--start|-b start-time]

[--step|-s step]

[DS:ds-name:DST:dst-arguments]

[RRA:CF:xff:step:rows]

其中

rrdtool create filename

表示使用 rrdtool 命令 create 创建一个名为 filename 的数据库文件,通常 RRD 数据库文件的后缀为 .rrd ,但是你随便使用文件名也不会有影响。

--start|-b start-time

这个选项表示 RRD 数据库的起始 (start/begin) 时间点为 start-time,这是一个从 1970-01-01 00:00:00 开始计时,以秒为间隔的一个整数值。所以,start-time 是一个代表时间点的整数值,表示 RRD 数据库记录的监测值从这个时刻开始。

[--step|-s step]

这个选项表示监测的时间间隔,即多久时间去获取一次被监测对象的数值,默认值为5分钟(300秒)。比如,我们可以从10:00开始每60秒去获取一次电脑内存的使用值,这个时候 step 就是 60,获取到的数值如下图所示:

每隔60秒获取监测值

[DS:ds-name:DST:dst-arguments]

这个选项用来定义数据源(Data Source)属性,包括数据源名称 ds-name,比如我们可以给监测内存使用率的数据源命名为 memory-rate。

还要定义数据源类型(Data Source Type),常用的有以下4种数据源类型,分别是:

1、GAUGE

实测值,RRD 将如实记录,比如温度变化曲线:

温度变化曲线

2、COUNTER

计数值,这是一个只增不减的正整数。比如,汽车行驶里程,从汽车第一次上路开始,里程就从0开始不断增长。

汽车里程表

假设每隔30分钟监测一次汽车里程,当 RRD 收到 COUNTER 类型的数据时,并不会像 GAUGE 类型那样直接存储,而是计算变化率:

汽车里程监测

计算原理: (12121km - 12100km) / (10:30 - 10:00) = 11000m / 1800s = 6.11m/s

所以,RRD 对于 COUNTER 类型的数据源存储的是变化率,对于上述里程表而言就是行驶速度。

(注:第一个存储值为 UNKNOWN,因为没有更早的数据,所以没有变化可言)

3、ABSOLUTE

ABSOLUTE 类型存储的也是变化率,假设我们正在微信和好友聊天,每五分钟我们会看一下有没有新消息,如果有的话就立即处理,这样未读提醒就会变为0,然后下一个五分钟后继续看未读新消息数,会得到这样一个监测表:

微信未读消息

计算原理:120条 / 300秒 = 0.4条/秒

这样我们就可以知道一段时间内聊天快慢的情况,数值越大表示5分钟内收到的未读消息越多,聊天也就越火热。

4、DERIVE

DERIVE 类型存储的也是变化率,和 COUNTER 类型不同的是,监测值可以增长也可以下降,例如水库的水位监测:

水库水位监测

可以看到水位一时升高,一时降低,通过计算变化率能够监测某一时段水位正在升高还是降低,以及相应的速度。

[RRA:CF:xff:step:rows]

RRA (Round Robin Archive) 是用来定义 RRD 数据库归档模型,RRDTool 绘图展示监测情况的时候就从 RRA 中获取数据。

为什么不直接获取存储的原始数据来绘图呢?

这得从监测场景的实际需求出发,通常我们对最近一小时或一天的监测数据最关心,对于一个月或者一年以上的监测数据有个大概的认知就可以。

假设我们每秒监测一次某台服务器 CPU 使用率,那么一年后将获得:

1 x 60秒 x 60分钟 x 24小时 x 365天 = 31536000

个监测值。

如果这么多数据点在一张图表上展示,即使一个数据点只占一个像素,你也可以想象得多长的图片才能完整展示监测数据。

但是,如果我们把每60秒监测的60个原始数据点计算出一个平均值 AVERAGE(d1,d2,d3,...,d60) 的话,这样数据量就比使用原始值降低了60倍!这种经过计算平均值后得到的数据称为归档值。

虽然丧失了一定的精度,但是并不影响我们观察一年来的变化趋势。

RRD 提供的归档方法有4种,除了上述的计算平均值 AVERAGE 方法外,还有:

计算最大值 MAX(d1,d2,d3,...dn) = 最大的那个监测值

计算最小值 MIN(d1,d2,d3,...dn) = 最小的那个监测值

计算最后值 LAST(d1,d2,d3,...dn) = 最后的那个监测值

转载于:https://www.cnblogs.com/bonelee/p/6236962.html

RRDTool 存储原理简介——基于时间序列的环型数据库相关推荐

  1. 悠星网络基于阿里云分析型数据库PostgreSQL版的数据实践

    悠星网络基于阿里云分析型数据库PostgreSQL版的数据实践 说到"大数据",当下这个词很火,各行各业涉及到数据的,目前都在提大数据,提数据仓库,数据挖掘或者机器学习,但同时另外 ...

  2. 5. Docker容器互联1--Docker存储原理和基于Docker Volum的容器互联

    目录 Docker 容器互联 1  基于Docker Volum的容器互联 1.1 Docker的文件存储 1.2Docker Volume 1.3 数据容器共享解决方案(volumes-form) ...

  3. 分布式数据存储原理简介

    什么是分布式数据存储系统 分布式存储系统的核心逻辑,就是将用户需要存储的数据根据某种规则存储到不同的机器上,当用户想要获取指定数据时,再按照规则到存储数据的机器里获取. 如下图所示,当用户(即应用程序 ...

  4. RADOS分布式对象存储原理简介

    Ceph是一个开源的PB级文件系统,最早是加州大学Santa Cruz分校的一个研究项目,项目创始人sage weil是该校的一名博士.ceph包括一个兼容POSIX的分布式文件CephFS,一个分布 ...

  5. FastDFS合并存储原理分析

    FastDFS合并存储原理分析 基于FastDFS 5.03/5.04 2014-12-03 一.合并存储简介 在处理海量小文件问题上,文件系统处理性能会受到显著的影响,在读写次数与吞吐量这两个指标上 ...

  6. 基于MATLAB负载换流逆变器毕业设计,分享:基于电流内环的单相并网逆变器原理简介及仿真验证...

    本帖最后由 邮件人 于 2014-5-15 20:31 编辑 1.并网逆变器概述 并网逆变器是一种将直流电转换为与电网同频同相的交流电的电力电子装置,在工频范围内可分为风电并网逆变器与光伏并网逆变器. ...

  7. RRDTool原理简介

    1.概述 RRDtool 代表 "Round Robin Database tool" ,作者同时也是 MRTG 软件的发明人.官方站点位于http://oss.oetiker.c ...

  8. 基于闪存存储原理的U盘数据安全测试和U盘数据保护软件

    第一章 摘要 Flash Memory是一种长寿命的非易失性存储介质,其存储原理存在诸多漏洞.其中最为严重的则为写入次数上限.而以闪存作为存储介质的U盘是否会因闪存的存储缺陷而成为不安全的存储设备,这 ...

  9. 基于位表示的8叉树数据存储原理

    3D物体建模在计算机辅助设计系统.医疗系统.机器人以及物体自动检测中扮演了越来越重要的角色.在这其中,八叉树是一种非常有效的储存数据的方法,尤其是对于像流形物体.点云图(point cloud).体素 ...

最新文章

  1. 交换机SPAN功能配置
  2. 树莓派应用:摄像头条形码扫描
  3. mysql修改字符集utf8为utf8mb4
  4. 2018年区块链技术发展总结与展望(附报告全文) | 起风研究院
  5. 如何在Linux上安装Composer
  6. 《windows程序设计》第二章学习心得
  7. Mac 编译安装 Redis-3.2.3
  8. 5分钟带你了解Kafka的技术架构 | 技术头条
  9. 2.MySQL中的索引
  10. 计算机科学在地理信息科学中的作用,地理信息科学的孕育和发展
  11. PHP设计模式——六大原则
  12. 如何在 Web 前端做 3D 音效处理
  13. python库之SnowNLP(自然语言处理)
  14. 百度地图生成器添加标注后图标不显示的解决方法
  15. 小菜的Scala学习笔记,主要部分更新完成
  16. 微博首席架构师杨卫华:新浪微博技术架构分析
  17. 查询大数据各组件版本
  18. CRM客户关系管理系统源码
  19. 网易彩票APP:世界杯竞彩 细节定成败
  20. 三体 给岁月以文明, 给时光以生命

热门文章

  1. linux device注册
  2. 初识好朋友计算机课件,初识电脑朋友.ppt
  3. c语言编程员工信息排序,员工工资管理系统(c语言编程)
  4. git提交输入账号和密码_GitHub-本地项目提交至GitHub
  5. python语言的格式框架_django框架模板语言使用方法详解
  6. mysql 5.7 多实例主从_mysql-5.7.20源码安装 + 多实例 + 主从复制
  7. php html转化为pdf,PHP将html转换成PDF文件
  8. 深度无盘 连接服务器失败,深度无盘服务器配置
  9. json_decode的结果是null
  10. ajax提交表单,导致浏览器卡死