c#面向对象基础技术——学习笔记(三)基于OOP思想研商对象的【方法】

实例方法:(解决问题的步骤)完成有效率的各类语句的整合

转自http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=864861\#

  编写方法而考虑的始末:

不行谢谢此贴,给我了许多扶助。

    1、通过项目需要,确定各艺术的任务、功用;

再有前边同样个兄长的实例也让了了有的帮忙,特别是有关mysql数据的展现

    2、方法的但是访问性(默认是private);(字段private 属性internal
方法private)

http://freeloda.blog.51cto.com/2033581/1307492/

    3、调用后的返值结果;

 

    4、起名——动名词结合;

 

    5、确定调用方法的尺度(参数:不要多于三单,行数:不要多于40尽,可以将坏之道分成基本上独稍法)。

 

静态字段:

 

  为了定义能由两只实例共享的数目,需要接纳static关键字。

**********************************************************************************************************************
注 :该科目参考了之类内容 :
A)官方文档 :http://oss.oetiker.ch/rrdtool/doc/index.en.html
B)abel 兄的大作 :http://bbs.chinaunix.net/viewthr …
p;highlight=rrdtool

                      http://bbs.chinaunix.net/viewthr …
p;highlight=rrdtool

作者 :ailms <ailms{@}263{dot}net>
版本 :v1
最后修改 :2006/12/6 22:20

  静态字段不打属于实例,而是从属类。因而,从接近外部看静态字段是要接纳类名。

*2006/12/06 :修正了第4首被 create 命令中 RRA 行数之错误
**********************************************************************************************************************

静态方法:

注 :转载请表明出处

  用static修饰;

  于介绍 RRDtool
在此之前,让我们事先想起一下它的前身:MRTG。相信只要做网管工作之心上人,对 MRTG
那一个软件一定不会见生,

  项目启动就别,直到项目关闭,不受垃圾回收机制管理;

至少为或听罢。MRTG 能够通过 SNMP 协议直接访问 SNMP Object ,例如
ifInOctect 和 ifOutOctect ;也可经外部 

  不宜了多以。

script
的章程,来监测cpu、内存、磁盘利用率、数据库的表空间利用率等音信。只要拿
MRTG 放入 crontab 中让其机动运行,

  静态方法一般不可能引用实体方法(由于品种上马就创办,还尚无成立),要引用就要用new,通过对象模式调用。

MRTG 就得自行为汝绘制出每日、周周、每月、每年的总括图表。 MRTG
甚至还吧公提供了自动生成配置文件的 cfgmaker 和

  静态方法不能一贯访问类的实例字段,必须拿到类的实例才可以调用实例成员(无论该实例成员是法如故字段)。 

自动生成 HTML 页面的 indexmaker 这半个器,让你望去各类个编写 cfg
文件之切肤之痛。到目前截止,还有为数不少总人口当使其。它本

静态构造器:考虑因内联(inline)情势开端化静态字段,不要以静态构造器或者当宣称时赋值。

暴发 Unix、Windows 各个平台,windows 平台上居然现身了 PRTG 这样跟 MRTG
很形象的东东,轻点鼠标就得好的成就工作。

静态属性:使用静态属性比下集体静态字段好,提供一定程度的包。

既,我们为什么还要介绍 RRDtool 呢?先被大家看几乎单问题,几单当 MRTG
使用被广大的题目 :

 

一律)MRTG 无法犯什么?

构造器(constructor):构造方法

A)MRTG
一摆放图纸只好展现2单目的,一个输入,一个出口。要是你想同时体现多独目标也?例如笔者之单位暴发12高服务器。假设想

  强制性(固然无的话,编译器会协会一个.ctor,通过IL
DASM查看);假使忘记了拓展起始化,编译器会在编译时自动抬高一个,该构造器不获取参数,称为默认构造器,不过得的凡含有无效姓名的靶子(要也有着属性提供有意义的默认值,确保默认值未会合招致安全漏洞依旧促成代码效能大幅减退)。要允许以随机顺序设置属性,虽然这会造成对象临时处于低效状态。
如若为接近显式添加了构造器,C#即使不再自动提供。

   将它们的载重境况尚且来得在一个图上,MRTG 至少用6张图。

  构造器参数(camel)要动用和性(Pascal)相同之号,区别仅是高低写风格。

B)MRTG不能回看数据。MRTG
的希冀是自动生成的,所用的数目为是由 MRTG
自己提的,例如5分钟平均的记录有288长达,  MRTG每20秒钟集合一不良,

  要啊构造器提供可选参数,用好默认值起始化属性。

   
每一次合并4个记录。在50单小时后,288久记下将所有化20分钟平均的多少。假设你想重放那多少个多少怎么收拾也?对不起,只可以去

  创设时,用new关键字调用,无重返值,必须和类名一致,构造器就是起参数的,没有回来路的艺术,方法名必须与类名相同。是“运行时”用来起首化对象实例的格局。

    看第2个图了(每周)。

 作用:

C)MRTG 只来 COUNTER 和 GAUGE
这有限栽总结类新。假诺自己只要监测五只数值型的目的中的大小,它们之间的差值可以是正数,也得

  1、起始化对象方法;

   是负数。MRTG 能实现吗?笔者在屡试中发觉,MRTG 对于负数的跟
‘.15’  这样格式的小数(平时依旧bc的出口)的甄别会出错。

  2、传递参数;

   例如把 ‘.72’ 识别为 72,把 -1 识别为 1。

  3、信息读取,及其他对象开端化任务;

D)MRTG
不能实现有格的绘图。有时候大家只是想看有服务器在同年里的宕机时间,正常时间我们不关注;或者咱们怀恋看时值和二〇一八年同期相比究竟怎么?
这个还是

  4、如有多独构造方法,用this(参数)情势结合。

     MRTG无法做到的

  用this调用另一个构造器。

二) MRTG 的优点

 

这就是说 MRTG 和 RRDtool
相相比即使从未亮点了为?也无是。简单、方便就是它们的极端酷优点。

最先化器:

(MRTG 中还有一个好东西就是是半自动报警功效,相相比之下,RRDtool
在就点的布相比较复杂,

  效用:进一步简化属性初始化,用{, ,};分割;

还无若直接发到 shell script中)

  优点:无需关注参数顺序及参数个数。

前方提到 MRTG 可以因而 cfgmaker 和 indexmaker
快速建立布局文件以及HTML页面。而 RRDtool 在当下半方面还需协调出手。

 集合开端化器:P167(本质论c#)

数量的采访→插入数据→提取数据→绘图→建立 HTML
,这多少个步骤都是内需而自己动手的。RRDtool
给了使用它的人数顶老程度之人身自由。但这种

 

肆意对于新手或者没耐心的丁来说或许是同样种植考验。相比较之下,MRTG
就便于达成亲手多矣。

终结器:定义在对象销毁进程被暴发的政工。

三) RRDtool 的定义

 

   RRDtool 代表 “Round Robin Database tool” ,作者又为是 MRTG
软件之发明人。官方站点位于http://oss.oetiker.ch/rrdtool/ 。

最先化器与构造方法异同

   所谓的“Round Robin”
其实是相同种植存储数据的章程,使用一定大小的上空来储存数据,并发出一个指针指向最新的多少的职务。我们能够管用于存储
   
  数据的数据库的半空中作为一个周,上面有诸多刻度。这一个刻度所当的地方就是表示用于存储数据的地点。所谓指针,能够当是起圆心指向这么些刻度的

  相同点:

  一长达直线。指针会趁机数据的读写操作自动移动。要顾的是,这一个到没有起点和顶峰,所以指针可以一直倒,而不用担心达终点后便不可以前行

    1、对象创设时采取;

  的问题。在一段时间后,当有着的长空都满怀满了多少,就又从头开始存放。这样任何存储空间的大大小小就是一个原则性的数值。所以RRDtool
就是应用类

    2、可以得性能起首化。

  的措施来存放数据的家伙,RRDtool 所使用的数据库文件的继缀名是
‘.rrd’。

  不同点:

季)RRDtool 的奇特的处

    1、构造方法强制性,对象起首化器无强制性,一般写一个凭参数构造方法;

A) 首先 RRDtool 存储数据,扮演了一个后台工具的角色。但以 RRDtool
又允许成立图表,这让 RRDtoo  看起以像是前者工具。其他的数据库

    2、构造方法可以成功其余成员开头化,初步化器只可以对性起初化;

         只可以存储数据,不可知创设图表。

    3、构造方法提前定义,起先化器无需提前定义。

B) RDtool 的每个 rrd
文件之大小是一向的,而常见的数据库文件的轻重缓急是就时光使长的

 

C) 其他数据库只是被动的接受多少, RRDtool
可以对吸收的多少开展总结,例如前后两独数据的变更程度(rate
of  change),并储存该结果。

 

D) RRDtool
要求定时获取数据,其他数据库则从未拖欠要求。要是在一个时距离内(heartbeat)没有收受值,则会就此
UNKN 代替,其他数据库则免汇合这么做

 

五)总计RRDtool 和 MRTG
的不同之处

  

A) MRTG 是应用配备文件的方法来监督之;

 

      RRDtool
则从未配备文件一律说。所有操作都是通过命令(也可描绘成script形式)执行

B) MRTG 有活动采集数据的效能(通过 snmp);

     RRDtool 没有,需要手工或者通过 shell/perl 脚本来获取数据

C) MRTG 每一次运行都相会更新图片与日志;

     RRDtool 默认知识接收数据,并无碰面绘图,除非手工执行 graph 命令

D) MRTG 采取公开的 log 情势存放历史数据;
    
     RRDtool 采纳数据库的道来存放数据;

E) MRTG 不可能重播日志数据,因为 MRTG 会对日记举行统一;

     RRDtool 选取 RRA
的定义,把不同总计周期的多少单独存放,所以能够得历史数据的重播效率

F) MRTG 的 log 中每种周期的记录的数目是电动珍贵的;
   
     RRDtool 的 RRA 中之记录数是可打定义的。

G) MRTG 中数的总计时距离是一定的,例如
5分钟平均,30分钟平均,2刻钟平均,1龙平均;
    
      RRDtool 可以擅自设置(试了1分钟四次等)

H) MRTG 一摆设图只好呈现2独对象;

     RRDtool 可以展现多单。

I) MRTG 的数据类型只生 COUNTER 和 GAUGE 两栽;

    RRDtool 有5种,COUNTER、GAUGE、DERIVE、ABSOLUTE、COMPUTE

J) MRTG 的图片只好呈现当前价、最可怜价值、平均值;

     RRDtool
可以呈现当前值(LAST)、初值(FIRST)、最特别价值(MAX)、最小值(MIN)、平均值(AVG)、总和(TOTAL)等

K) MRTG 绘图格局只有 AREA、LINE 形式;

     RRDtool 则有 AREA、LINE(1|2|3)、STACK 方式;

L) MRTG 负责募集、存储、绘图、建档(HTML);

     RRDtool 只承担储存、绘图那有限独号,所以用自己立 HTML 文件

M) MRTG 的演算功效于差;

      RRDtool 可以经 CDEF 对获下的数额举行算术和逻辑运算;

N)MRTG 只可以原原本本的来得数据;

    RRDtool 可以对数码举行拍卖,或者出谱的亮;

如上所述 RRDtool 的效果是匪是比 MRTG 强很多吧?!

具体的距离时即令不得不想到那些,不知诸位还有无出什么补为?
!!^_^ !!

深信不疑这样讲的说话如故于抽象的,不过不用着急,如今独是一个方始而已。

下同样省大家开出口怎么着设置 RRDtool 。

 

 

 

 

 

设置,我一向用的apt-get install rrdtool即可安装成功

 

 

 

初规划

**********************************************************************************************************************
注 :该学科参考了之类内容 :
A)官方文档 :http://oss.oetiker.ch/rrdtool/doc/index.en.html
B)abel 兄的大作
http://bbs.chinaunix.net/viewthread.php?tid=552224&highlight=rrdtool
                    
 http://bbs.chinaunix.net/viewthread.php?tid=552220&highlight=rrdtool
作者 :ailms <ailms{@}263{dot}net>
版本 :v1
末尾修改 :2006/11/18 0:06
**********************************************************************************************************************

   可能我们照面认为意外,做只 RRDtool
还要统筹什么?俗话说:磨刀不误砍柴工。好之计划性必须怀有灵活性、可扩大性,否则会受

今天之接纳带来多之麻烦。我们事先说一下 MRTG 的设计,再谈 RRDtool
的宏图。

同一)MRTG 的初期规划

A)想使监测监测什么目的?并列出一个清单;

B)想使坐什么艺术来博取数据?是通过
SNMP 依旧 shell 、perl 。如若接纳 SNMP ,监测对象所当主机  

      的 SNMP 服务安装了啊?是否安排了;

C)每个对象的监测时间是多少长度期一破?并是对监测对象举办归类。例如笔者自我并用
MRTG 监测了 80 多独对象,并遵照

     内容分成四类 :

     首要状态方面 : 例如 HACMP 的切换动作监控;Oracle 服务的状态;LVM
中的 vg 是否在线;服务器是否宕机等。那么些监

                              
测对象对一个系的运作吧如故雅关键之,一旦出故障,需要这处理的。所以对于当下仿佛对象,按最好

                              刻钟间距离(5分钟一赖)设置

     I/O性能方面 :重假使 I/O 吞吐量、I/O
服务日方面的监测。这好像对象是7分钟一不善

      次要状态方面 :例如
cpu利用率、内存利用率、在线人数、温度、拨号用户人数等。20秒钟一不成

     利用率方面
: 由于实在用之问题,所以针对利用率相比较关心。单独拎出开一样块监测。首倘使监控Oracle
的依次表空间的利

                           
用率,以及LVM磁盘系统依次分区的利用率。每25分钟一潮

     监控机本身
:负责督察之监控机本身吗需监控。重要监督时监测的靶子数量,以及系统负荷。这看似即30分钟一蹩脚。

D)每个对象一个 cfg 文件?依然整个聚齐在一个
cfg 文件被为?我本身仍然于帮忙于每个 Target一个 cfg 文件,每个
cfg 中还定

        义 Workdir、Language   这一点儿个拔取。针对地方的5单分类,建立5只
“大之”cfg 文件,再下 MRTG 中的  Include 功用导入一个个

         “小的”、具体的 cfg
文件。这样当日晚对有监测对象开展修改时(例如修改数据的得到脚本,或者涂改图片的外观),可以独立测试

       
 该对象。不用连同其余对象为一并跑同坏,节省成千上万年华。如若想收回那些目的的监测,在前方提到的老大“大之”cfg
文件中,把针对诺

        的 Include 语句注释掉就足以了,是匪是又有益为?

E)为单监督对象从一个方便的名号。一般用
<host_iterm>
的法。这同一步也充满重要之。一开始免放在心上,随便给个名字,等到后来好还

    搞不清楚了,提议同样先河就设计好。倘若如运用 MRTG
的报警效能,就更当可以规划了,要不然收到告警邮件都非精通是怪目标,那一个机

    器出现问题,白白浪费时间。

F)是否要为此到 MRTG 的报警功效。MRTG
有报警功用,可以安装输入/出的顶老价值,最小值。超越限制就会调用
ThreshProgI 和 ThreshProgO 

 
 选项指定的次第。我一般用发送邮件和HTML配合的方法。下边是报警部分的截图

图片 1

图片 2
  

基本上也就这么些了,就可起始出手写 script 了。

 

 

 

 

 

第二)RRDtool 的中期计划

RRDtool 的头规划相对多一点,因为 RRDtool
很多物要协调设定。除了上述 MRTG 考虑的几点外,我一般还考虑以下几点

A)是一个 RRD
文件被概括多独监测对象(DS),仍旧分成基本上个 RRD 文件 ?RRDtool
提供了 tune 操作,可以加监测对象要去 RRD 文

   
件中的某部对象,而且绘图时为可指定要打的是老大目的,这一点看个人喜好而早晚。

B)如何总计取得的数据 :MRTG
是永恒的,5分钟、20秒钟、2时、1上。RRDtool 则可以协调安装

C)怎样保存/总括这一个数据 :这是暨 MRTG
不同的地方。MRTG log 的创设及维护是机动的,RRDtool 的数目存放

     则需要协调定义。但咱可参见 MRTG 的道:
   
    每一日总计图(5秒钟平均)  : 600 单,大约2上的辰

    周周总结图(20秒钟平均) : 600 个,大约8天的时刻

    每月总括图 (2刻钟平均) : 600 个,50 天之日子

    每年总括图 (1上平均) :730 独, 2年的年华

D 要因什么点子绘图 :MRTG
只生曲线(LINE)和方(AREA)二种植;RRDtool 除了及时简单种外,还有同种是
STACK 格局。就是于前面一个曲线仍旧方

    块的根底及绘图图,而未是一向由 X
轴起首绘图。那样绘制出的图于清楚,不谋面出现交叉的观,但这时 Y
轴的值等于当前目标的值加上前一

   个绘图对象的值。例如前一个靶(cpu
的类别经过利用率)的价值是10,拔取的是 AREA 情势绘图。当前目的(cpu
的用户级进程的利用率)是5,

   选用的凡 STACK
模式,则“cpu的用户级进程利用率”对应之Y轴刻度是10+5=15;所以若无加以表达,别人可能会面误解。

老三)实际例子

A)搞懂到底想只要监测什么目标:监测当地主机的网络流量。包括 eth0 和 lo 接口的流量。

B)想假使因为何办法来拿到数据 :sar
也得以总结网卡接口的流量。但此间大家用 SNMP ,访问 ifInOctets 和
ifOutOctets 。

    假如脚本名称是 get_eth0_traffic.sh 和 get_lo_traffic.sh

C)每个对象的监测时间是多少长度期一坏
:5分钟

D)是运用一个 RRD 文件还是多独 :2个
RRD 文件,一个是 eth0.rrd,一个凡是 lo.rrd

E)[color=bl;ue]为每个监测对象从名 :分别是 eth0_in ,eth0_out
,lo_in ,lo_out

F)总结频率
:5分钟、20分钟、2时、1天

G)如何保存总结数据
:600个、600单、600单、730单

H)要坐什么点子绘图
:最近少勿考虑该问题。等及实在绘图时再体会。

注 :实际上大家得以拿数量的插入、绘图一起形成
get_eth0_traffic.sh 和 get_lo_traffic.sh
中,但时这半独下论就是肩负取多少并出口而已,

               到最后我们重将那多少个效能合并及一同。

季)下面是本子的情节

  1. [root@dns1 bob]# cat get_eth0_traffic.sh 
  2. #!/bin/bash
    1. # 首先得到 eth0 接口的 ifIndex 
  3. index=$(snmpwalk -IR localhost RFC1213-MIB::ifDescr |grep eth0|cut
    -d ‘=’ -f 1|cut -d ‘.’ -f 2)
    1. # 再经过 snmp 协议得到 ififInOctets 和 ifOutOctets 的值
  4. # 由于当 /etc/snmp.conf 中配备了 defVersion 和 defCommunity ,所以
    snmpget 命令不用指定这半只参数
    1. eth0_in=$(snmpget -IR -Os localhost ifInOctets.${index}|cut -d
      ‘:’ -f 2|tr -d ‘[:blank:]’)
  5. eth0_out=$(snmpget -IR -Os localhost ifOutOctets.${index}|cut -d
    ‘:’ -f 2 |tr -d ‘[:blank:]’)
  6. echo $eth0_in
  7. echo $eth0_out
    1. [root@dns1 bob]#

复制代码

 

  1. [root@dns1 bob]# cat get_lo_traffic.sh      
  2. #!/bin/bash
  3. # 首先得 eth0 接口的 ifIndex 
    1. index=$(snmpwalk -IR localhost RFC1213-MIB::ifDescr |grep lo|cut
      -d ‘=’ -f 1|cut -d ‘.’ -f 2)
  4. lo_in=$(snmpget -IR -Os localhost ifInOctets.${index}|cut -d ‘:’ -f
    2|tr -d ‘[:blank:]’)
  5. lo_out=$(snmpget -IR -Os localhost ifOutOctets.${index}|cut -d ‘:’
    -f 2 |tr -d ‘[:blank:]’)
  6. echo $lo_in
    1. echo $lo_out
  7. [root@dns1 bob]#

复制代码

重管立时2独剧本放入 crontab 中,每5分钟实施同一糟

  1. */5 * * * * /home/bob/get_eth0_traffic.sh
  2. */5 * * * * /home/bob/get_lo_traffic.sh

复制代码

而是这样会时有暴发感冒的邮件来,也足以在剧本中用 while true 循环,配合 sleep
300 让剧本一向运转,而未是重复启动脚本。具体接纳这样你自己说了算。

当所有的备工作且好后,就好开考虑建库了。

 

 

 

 

 

 

建立 RRD 数据库

**********************************************************************************************************************
注 :该课程参考了之类内容 :
A)官方文档 :http://oss.oetiker.ch/rrdtool/doc/index.en.html
B)abel 兄的大作
http://bbs.chinaunix.net/viewthread.php?tid=552224&highlight=rrdtool
               
http://bbs.chinaunix.net/viewthread.php?tid=552220&highlight=rrdtool
作者 :ailms <ailms{@}263{dot}net>
版本 :v1
终极修改 :2006/11/17 17:35
**********************************************************************************************************************

   
准备工作还举行扫尾了,脚本也写了了,就好开建库了。建库实际上就是树立后缀名为
.rrd 的 RRD 文件。

一律)语法格式

  1. rrdtool create filename [–start|-b start time] [–step|-s
    step] 
  2.                          [DS:ds-name:DST:dst arguments]  
  3.                          [RRA:CF:cf arguments]

复制代码

个中 filename 、DS 部分以及 RRA 部分是必须的。其他两单参数可免。

其次)参数解释

A)<filename> :默认是盖 .rrd 结尾,但为因以你设定。

B) –step :就是 RRDtool “期望” 每隔多短期就接到一个值。和 MRTG 的
interval 同样含义。默认是5分钟。我们的本子也该是

          每5分钟运行一不良。

C) –start :给闹 RRDtool 的首先单记录之苗头时间。RRDtool
不相会经受任何采样时间低于或者当指定时间之数码。也就是说 –-start

      指定了数据库最早的老记录是自从何时起始的。假若 update
操作着叫起的时间在 –-start 在此以前,则 RRDtool拒绝接受。–satrt 选项也是
      
      可卜的。遵照 我们当眼前同首被之设定,则默认是现阶段时刻减去
600*300秒,也不怕是50独刻钟前。 假设您想指定–start 为1天前,可以用  

  1. –start $(date -d ‘1 days aog’ +%s)

复制代码

      注意,–start 选项之值必须是 timestamp 的格式。

D) DS :DS 用于定义 Data Soure
。也就是用于存放脚本的结果的变量叫做(DSN)。

      就是我们眼前提到的 eth0_in ,eth0_out, lo_in , lo_out 。DSN 从
1-19 个字符,必须是 0-9,a-z,A-Z 。

E) DST :DST 就是 Data Source Type 的意思。有
COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE 5种。

              由于网卡流量属于计数器型,所以这边当吗 COUNTER 。

F) RRA :RRA 用于指定数量怎么着存放。我们得把一个RRA
看成一个发明,各保存不同 interval 的总结结果

G)PDP :Primary Data Point 。正常情况下每个 interval RRDtool
都碰面收到一个价值;RRDtool 在收到脚本给来之值后 会统计起此外

      一个价(例如平均值),这些 值就是 PDP
;这一个价代表的相似是“xxx/秒”的意义。注意,该值不自然当RRDtool  收到的不可开交值。除非是 
      
       GAUGE ,能够拘留下的例证就是知晓了      

H) CF :CF 就是 Consolidation Function
的缩写。也便是联合(总括)效能。有 AVERAGE、MAX、MIN、LAST 四种

      分别代表对四只PDP
举办得平均、取最好深价值、取最好小值、取时价四系列型。具体意向相当于交 update
操作时 再说。

I) CDP :Consolidation Data Point 。RRDtool 使用六只 PDP
合并为(总括起)一个 CDP。也便是进行方 的CF
操作后底结果。那个价值就是是存入 RRA 

      的数目,绘图时用的为是这一个数量。

三)再说 DST 

    DST 的挑三拣四是挺重中之重之,如果选错了 DST
,尽管你的下面本取的数是本着之,放入 RRDtool
后为是左的,更不要提画出来的图是否发意义了。
    
    怎么样抉择 DST 看下的讲述 :

   A)COUNTER
:必须是与日俱增的,除非是计数器溢起(overflows)。在那种状态下,RRDtool
会自动修改收到的值。例如网络接口流量、收到的
   
        packets 数量还属于即无异于路。

   B)DERIVE:和 COUNTER
类似。但足以是与日俱增,也足以递减,或者一会增一会儿压缩。

   C)ABSOLUTE :ABSOLUTE
相比独特,它每一趟都设前一个interval的值是0,再计平均值。

   D)GAUGE :GAGUE 和下边二种不同,它从未“平均”的概念,RRDtool
收到值后字节存入 RRA 中

   E)COMPUTE :COMPUTE
相比奇特,它并无接受输入,它的定义是一个表明式,可以引用其他DS并机关测算出有值。例如 
   
      

  1. DS:eth0_bytes:COUNTER:600:0:U DS:eth0_bits:COMPUTE:bytes,8,*

复制代码

       则 eth0_bytes 每拿到一个价值,eth0_bits 会自动统计起其的值:将
eth0_bytes 的价就以 8 。然而 COMPUTE 型的 DS 有只限,只好采纳
       
       它所当的 RRD 的 DS ,不可以引用其他 RRD 的 DS。 COMPUTE 型 DS
是初本子的 RRDtool 才有,你吧足以用 CDEF 来实现该意义。 
        
         
    F)AVERAGE 类型适合为扣“平均”情状,例如一龙之平均流量,。所以
AVERAGE 适用于用驾驭 ‘xxx/秒’ 这样的求。但利用 AVERAGE
型时,你并不知道

        在每个 CDP
中(尽管30分钟平均,6单PDP组成)之中,流量具体是安变迁之,什么时大,什么时候没有。这吃用为此到其余总括类型了

    G)MAXIMUM
、MINIMUM不适用想清楚“xxx/秒”这样的求,而是适用于想通晓某对象在相继不同随时的变现的需要,也固然是主题在于各种时间点。

         也便是所谓的“趋势”了,仍然点的例证,假如选择 MAXIMUM 或者
MINIMUM 的 CF ,可以望接口在每个 CDP
的周期内最高是上多少,最低又是多

         少,假使是 AVERAGE 的言辞,有或前5个 PDP 都坏咸匀,但结尾一个
PDP 的值暴发特别老之突变。这时候要用 AVERAGE
可能是看不出来的,因为突变的部

         分被平均分配到全部时间段外了,所以看不出愈演愈烈这无异境况;但倘诺就此
MAXIMUM 就可解的通晓在该 CDP
的周期内,曾经发生高达某个值的时刻。所以用 

        MAXIMUM 或者 MINIMUM
就可以领略有对象在某个时间段内最老及多少,最低低至啊水平。

        例如要扣押有接口在同样上内暴发没有来跨50Mb 流量的当儿将要用
MAXIMUM

       例如要拘留磁盘空间的空闲率在同天内发出无出低于 20% 的时刻将用
MINIMUM

     H)LAST 类型适用于 “累计”的概念,例如从xxx时候到眼前偕累计xxxx
这样的要求。例如邮件数量,可以就此 LAST 来表示 30
分钟内一起收到多少只邮件,同

         样 LAST 也绝非平均的概念,也就是说不适用于 ‘xxx/秒’
这样的需,例如你无可知说平均每分钟多少封邮件这样的说法;同样为不适用于看每个周期内的转变,

         例如30分钟内一起接100查封邮件,分别是
:第一个5分钟20封,第二只5分钟30查封,第三独5秒钟无,第4个5分钟10查封,第5单5分钟啊从未,第6只5分钟
         
         40封闭。假若就此 MAXIMUM 或者 MINIMUM
就非精通当30秒钟内共收下100封邮件,而是得出30和0。所以 LAST
适用于各级隔一段时间被观望 对象就是会复位的
         
         情状。例如每30分钟就寿终正寝一不佳邮件,邮件数量就是 LAST
值,同时并存的初邮件数量就是让清零;到下一个30分钟再一次结一涂鸦邮件,又得一个
30  秒钟的 LAST 值。
         
       
 这样即使得得得出“距离达等同破操作后及近期截至共xxx”的求。(例如去达到同潮收受邮件后又一同接100查封新邮件)

季)DST 实例证实

诸如此类说或者要于模糊,可以看上边的事例,体会一下什么是 DST 和
PDP  :

Values = 300, 600, 900, 1200        # 假设 RRDtool
收到4个值,分别是300,600,900,1200

Step = 300 seconds                    # step 为 300

COUNTER = 1,1, 1,1                         #
(300-0)/300,(600-300)/300,(900-600)/300,(1200-900)/300
,所以结果吧 1,1,1,1

DERIVE = 1,1,1,1                         # 同上

ABSOLUTE = 1,2,3,4                   # (300-0)/300,(600-0)/300 ,
(900-0)/300, (1200-0)/300,所以结果为 1,2,3,4

GAUGE = 300,600,900,1200          # 300 , 600 ,900 ,1200
不开运算,直接存入数据库

故此率先行的 values 并无是 PDP ,后边4行才是 PDP 

五)开头建库

  1. [root@dns1 root]# rrdtool create eth0.rrd \
  2. > –start $(date –d ‘1 days ago’ +%s) \
  3. > –step 300 \
  4. > DS:eth0_in:COUNTER:600:0:12500000 \        #  600 是
    heartbeat;0 是极致小值;12500000 表示十分特别价值; 
  5. > DS:eth0_out:COUNER:600:0:12500000 \        #
    若是无最好小值/最可怜价值,可以用 U 代替,例如 U:U
  6. > RRA:AVERAGE:0.5:1:600 \        # 1 表示针对1个 PDP
    取平均。实际上即使等 PDP 的价
  7. > RRA:AVERAGE:0.5:4:600 \        # 4 表示每4独 PDP 合成为一个
    CDP,也不怕是20分钟。方法是对4单PDP取平均, 
  8. > RRA:AVERAGE:0.5:24:600 \  #
    同上,但改为24个,也就是24*5=120分钟=2小时。
  9. > RRA:AVERAGE:0.5:288:730        # 同上,但改为288个,也就是
    288*5=1440分钟=1天
  10. [root@dns1 root]#  

复制代码

横流:下面第2-4单 RRA的记录数实际上应该是
700,775,790,而非是 600,600,730。
600 samples of 5 minutes  (2 days and 2 hours)= 180000 秒 (2.08天)
700 samples of 30 minutes (2 days and 2 hours, plus 12.5 days)= 1260000
秒 (14.58天 ,2周)
775 samples of 2 hours    (above + 50 days) = 5580000 秒 (64.58
天,2个月)
797 samples of 1 day      (above + 732 days, rounded up to 797) =
68860800 秒(2年)
足看出每个 RRA 都存储了对应单位2倍增时间的数目,例如每一天的 RRA
存储2龙之数码,每一周的 RRA 存储2完善的数额,每月的 RRA
存储2只月之多寡,每年的 RRA 存储2年的数据

检查一下结果

  1. root@dns1 bob]# ll -h eth0.rrd
  2. -rw-r–r–    1 root     root          41K 11月 19 23:16 eth0.rrd
  3. [root@dns1 bob]#

复制代码

有人可能会师问,下面来三三两三只 DS,这 RRA 中究竟存的凡生 DS
的多寡吧?实际上,这一个 RRA 是共用的,你只是需要建立一个
RRA,它便可以用来所有的 DS 。

据此当概念 RRA 时不需要指定是为这个 DS 用的。

六)什么是 CF 

以第2个RRA 和 4,2,1,3 这4个 PDP 为例

AVERAGE :则结果为 (4+2+1+3)/4=2.5

MAX :结果吧4只数惨遭之顶可怜值 4

MIN :结果也4单数惨遭的绝小价1

LAST :结果为4独数着之末段一个 3

同理,第三个RRA和第4个RRA则是每24个 PDP、每288个 PDP 合成为1个 CDP

七)解释度(Resolution)

这边而干一个 Resolution 的定义,在官文档中几近处提到 resolution
一词。Resolution 究竟是什么?Resolutino 有什么用?

推个例子,假使我们要绘制1时的数量,也即是60分钟,那么我们可以起第一独RRA
中取出12独 CDP 来绘图;也可于第2个 RRA

受到取出2只 CDP 来绘图。到底 RRDtool 会使用特别也?

吃我们看一下 RRA 的定义 :RRA:AVERAGE:0.5:4:600 。

Resolution 就等于 4 * step = 4 * 300 = 1200 ,也就是说 ,resolution
是每个CDP 所代表的时限制,或者说 RRA 中每个 CDP(记录)

里的时间距离。所以率先只 RRA 的 resolution 是 1* step=300,第2凡是
1200,第五个是 24*300=7200,第4个 RRA 是 86400 。

默认情状下,RRDtool 会自动选取合适的 resolution 的不可开交 RRA
的数据来绘图。大家大可不必关心其。但要自己想拿到特定 RRA
的数,就需要采取它了。

关于 Resolution 大家尚相会于 fetch 和 graph 操作着涉嫌她。

八)xff 字段

仔细的意中人或会见意识,在 RRA 的概念着发出一个数值,固定是 0.5
,那么些到底是啊东东呢?

其一称呼 xff 字段,是 xfile factor 的缩写。让咱来拘禁其的定义 :

The xfiles factor defines what part of a consolidation interval may be
made up from *UNKNOWN* data while

the consolidated value is still regarded as known. It is given as the
ratio of allowed *UNKNOWN* PDPs to 

the number of PDPs in the interval. Thus, it ranges from 0 to 1
(exclusive)

这些看起有点晕,我们举个简单的例子 :例如

  1. RRA:AVERAGE:0.5:24:600

复制代码

夫 RRA 中,每24独 PDP (共少刻钟)就一头成为一个 CDP,假若立时 24 个 PDP
中出局部值是 UNKNOWN (原因可以多),例如1只,那么这 CDP 

合成的结果什么呢?是否就为 UNKNOWN 呢?

免是的,这使看 xff 字段而得。Xff 字段实际就是是一个比例值。0.5 表示一个
CDP 中的兼具 PDP 倘诺领先一半之值也 UNKNOWN ,则该 CDP 的价值就为标为

UNKNOWN。也就是说,假若24单 PDP中有12只或超越12只 PDP 的值是 UNKNOWN
,则该 CPD 就不可能合成,或者合成的结果也 UNKNOWN;

假设是11独 PDP 的价为 UNKNOWN ,则该 CDP 的值等于剩下 13  单 PDP
的平均值。

万一一个 CDP 是发2单 PDP 组成,xff 为 0.5 ,那么要有一个 PDP 为
UNKNOWN ,则该 PDP 所对应的 CDP 的值就是是 UNKNOWN 了

 

 

 

 

 

 

 

 

RRDtool简体粤语课_5:咋样取得RRD文件的信息
取 RRD 文件之音讯

**********************************************************************************************************************
注 :该学科参考了之类内容 :
A)官方文档 :http://oss.oetiker.ch/rrdtool/doc/index.en.html
B)abel 兄的大作
http://bbs.chinaunix.net/viewthread.php?tid=552224&highlight=rrdtool
               
http://bbs.chinaunix.net/viewthread.php?tid=552220&highlight=rrdtool
作者 :ailms <ailms{@}263{dot}net>
版本 :v1
最后修改 :2006/11/17 17:35
**********************************************************************************************************************

一)前言

   可能您都非常不需的记忆清楚哪些向 RRD
文件插入数据、怎样绘图了吧?hoho,先转移着急,在公开这些事情以前,最好先考虑以下六只问题

   A)若是被您一个 RRD 文件,你能知晓她的第一潮/最后一潮 update
的时是以啊时啊?

   B)如若你可怜漫长此前起了一个 RRD 文件,现在为工作原因要针对拖欠 RRD
文件进行有改动。但是遗憾的凡,
   
       你已经不记得当初设置的现实选项和参数了,  这时候该怎么惩罚也?
       
   那片只问题就是对准承诺今日设出口的鲜独操作 :first/last 、info 。
   
   first 就是用来查看该 RRD 文件被有 RRA
的率先独数据是以啊时插入的(或者说第一不行立异);
   
   last 就是翻开该 RRD 文件的近年同蹩脚立异;
   
   info就是查看 rrd 文件之构造音信。
   
   下面就是因为实际例子来拘禁一下拖欠怎么用这三单命令 :
   
   
其次)如何查询一个 RRD
文件之布局消息
   
    

  1. [root@dns1 bob]# rrdtool info eth0.rrd       
    (由于出口消息较多,截取了同样有的)
  2. filename = “eth0.rrd”
  3. rrd_version = “0003”
  4. step = 300                                        # RRDtool
    希望各级5分钟收取一个数码
  5. last_update = 1163862985                # 这是方今一致不良改进的
    timestamp 。可以就此 date 转换为实际的大运
  6. ds[eth0_in].type = “COUNTER”                # 有一个曰也
    eth0_in 的 DS,DST是 COUNTER
  7. ds[eth0_in].minimal_heartbeat = 600        # hearbeat 时间是600
  8. ds[eth0_in].min = 0.0000000000e+00        # eth0_in 的尽小值是
    0 (bytes)
  9. ds[eth0_in].max = 1.2500000000e+07        # eth0_in 的绝大值是
    1250000000 (bytes)
  10. ds[eth0_in].last_ds = “UNKN”        
  11. ds[eth0_in].value = 0.0000000000e+00
  12. ds[eth0_in].unknown_sec = 85
  13. ds[eth0_out].type = “COUNTER”
  14. ds[eth0_out].minimal_heartbeat = 600
  15. ds[eth0_out].min = 0.0000000000e+00
  16. ds[eth0_out].max = 1.2500000000e+07
  17. ds[eth0_out].last_ds = “UNKN”
  18. ds[eth0_out].value = 0.0000000000e+00
  19. ds[eth0_out].unknown_sec = 85
  20. rra[0].cf = “AVERAGE”                                # 第一独 RRA
    的号码是0,不是1。
  21. rra[0].rows = 600                                        # 共保存
    600 个记录
  22. rra[0].pdp_per_row = 1                        # 每个 CDP 由一个
    PDP 总括得出
  23. rra[0].xff = 5.0000000000e-01                # 只要当前interval
    的 PDP 为 unknown ,则该 CDP 的值也是unknown
  24. rra[0].cdp_prep[0].value = NaN
  25. rra[0].cdp_prep[0].unknown_datapoints = 0
  26. rra[0].cdp_prep[1].value = NaN
  27. rra[0].cdp_prep[1].unknown_datapoints = 0
  28. rra[1].cf = “AVERAGE”                                # 第二独 RRA
    的号是 1。同样也是 AVERAGE 型。
  29. rra[1].rows = 600                                        #
    也是保存 600 只记录
  30. rra[1].pdp_per_row = 4                        # 每个 CDP 由4独
    PDP 的呼吁平均值得出
  31. rra[1].xff = 5.0000000000e-01                # 每个 CDP
    最多允许2只 PDP 为 unknown ,超过则该 CDP 为unknown
  32. rra[1].cdp_prep[0].value = NaN
  33. rra[1].cdp_prep[0].unknown_datapoints = 3
  34. rra[1].cdp_prep[1].value = NaN
  35. rra[1].cdp_prep[1].unknown_datapoints = 3
  36. [root@dns1 bob]#

复制代码

出于消息最长,这里截取了背后2独 RRA
的信。

老三)第一次立异/目前一致软革新

假设想精通最近一模一样破革新暴发在何时,除了可据此面的 info
操作,还足以为此 last 操作

  1. [root@dns1 bob]# rrdtool last eth0.rrd
  2. 1163862985
  3. [root@dns1 bob]#

复制代码

若换成为现实的时间就是 :

  1. [root@dns1 bob]# rrdtool last eth0.rrd |xargs -i date -d
    ‘1970-01-01 {} sec utc’
  2. 六 11月 18 23:16:25 CST 2006
  3. [root@dns1 bob]#

复制代码

 

  1. [root@dns1 bob]# rrdtool first eth0.rrd
  2. 1163683200
  3. [root@dns1 bob]#

复制代码

而换成现实的日子尽管是 :

  1. [root@dns1 bob]# [root@dns1 bob]# rrdtool first eth0.rrd
    |xargs -i date -d ‘1970-01-01 {} sec utc’ 
  2. 四 11月 16 21:20:00 CST 2006
  3. [root@dns1 bob]#

复制代码

当下三单令的语法都分外简单,但并无可以为此轻视它的力量,尤其是 info
操作。日后而要针对 RRD 文件举行调,是时常用利用的。

 

 

 

 

 

 

 

 

更新 RRD 文件

**********************************************************************************************************************
注 :该课程参考了之类内容 :
A)官方文档 :http://oss.oetiker.ch/rrdtool/doc/index.en.html
B)abel 兄的大作
http://bbs.chinaunix.net/viewthread.php?tid=552224&highlight=rrdtool
               
http://bbs.chinaunix.net/viewthread.php?tid=552220&highlight=rrdtool
作者 :ailms <ailms{@}263{dot}net>
版本 :v1
末段修改 :2006/11/17 17:35
**********************************************************************************************************************

一)前言

形容了N多东东,总算到了 update 部分了。这里发生必不可少比一下 RRDtool 和 MRTG
在 update 方面的距离。

A)MRTG 可以经过 SNMP 协议直接访问 SNMP 对象,你只需要以 cfg 文件中之
Target 指定 OID ,MRTG 就可自行为你取回数据。
   
       例如Target[as1_eth0]: 2:n7css@172.17.64.11:::::1 ,表示以
SNMP v1 商讨看 172.17.64.11 主机上 index 为 2 的分外接口,
   
       默认是取 ifInOctets 和 ifOutOctets 这有限独对象的值。RRDtool
则并未是功能,只好你协调写脚本取数据。
       
B)MRTG 只援助 COUNTER 和 GAUGE 类型的 Target ;RRDtool 则还好运用
DERIVE、ABSOLUTE、COMPUTE
  
C)由于地点的案由,MRTG 不可能识别小数,负数。例如你吃 MRTG 一个 -1
的价值,它会说为 1 ;这一点好通过 LOG 看下。
  
       小数也极度。例如 .72 (bc 的输出)会让辨认为 72 ,而休是 0.72。
       
D)MRTG 每一次 update 每一遍运行就更新一不善,或者说只插入一行记录。但 RRDtool
可以于一个 updat操作着插入多独记录。

E)MRTG 一不成要求2单价值,RRDtool 则没有拖欠地点的限。

F)最酷之一个区别是, MRTG 在收受一个价值后会晤自动得出 timestamp ,并记下在
log 的率先单字段;而 RRDtool 是索要而吃有一个 timestamp ,
  
       表示该数据是呀时采访的。
   
次)update 操作的语法格式

  1. rrdtool {update | updatev} filename 
  2.          [–template|-t ds-name[:ds-name]…]
  3.          N|timestamp:value[:value…] 
  4.          at-timestamp@value[:value…]
  5.          [timestamp:value[:value…] …]
  6.        

复制代码

N 代表 now 的意,会于 RRDtool 替换为眼前的 timestamp ,也便是 date +%s
的结果。提姆estamp 部分较灵敏,可以是数字形式,也足以是

AT-风格的日(参考 at 命令的 manual),有硌类似于自然语言的风格。

老三)手工格局 update 数据库

咱先行念一下争手工 update 数据库。Update 命令分成两有些 :

A)时间戳 (timestamp):表示该数量是于老时刻接触采访的。提姆(Tim)estamp
的格式可以非常灵活 :

        数字模式 :例如1164419418 ,表示 “六 三月 25 09:50:18 CST
2006”。经常用于手工插入的艺术。

        快速模式 :N 。字母N 表示目前时刻(Now)。假如是经过 crontab
的办法来运作 update 操作,这是太实用的点子。

        AT-风格 :所谓的 AT 风格的年华,可以参照 at 命令的 manual。例如
now、yesterday、now-1hour、now+5min 都是 AT风格的年月。

                               要留意的是,假如下
AT风格的时空,则时间以及率先只value之间使用 @ 分隔,而不是 “:”

B)数值部分 :一个 RRD 文件能够生出差不多独 DS ,所以同样软 update 可以让闹五个value 。多单 value 之间用 “:” 分隔。不过是勿是兼具的 DS 都不可以不

     给出值呢?不必然。有时候你独自想吃来一部分 DS
的价,甚至有时候某些品种的 DS 是勿允许赋值的,例如 COMPUTE 型的 DS
就是这么一个例。
     

季)实际操作

实例一 :一个错的例子

  1. [root@dns1 bob]# rrdtool update eth0.rrd 1163862980:1:2        
  2. ERROR: illegal attempt to update using time 0 when last update time
    is 1163862985 (minimum one second step)
  3. [root@dns1 bob]#

复制代码

嘿?为啥发生错了为?是语法错误吗?不是的,RRDtool
提醒近期一模一样浅革新是当1163862985 这个上。也就是说,update
给闹底日穿必须超越该值。

无可以等于仍然小于该时刻。因为数量要插入到 RRA
中,就非容许再一次修改。所以 update
会检查为来的工夫穿是否超出最终一不好革新的光阴戳,如若不是

就算如此报错,不予执行。这什么样才可以明白近年来一律坏改进的岁月戳呢?还记得前同一首“怎么样赢得RRD文件之新闻”中介绍的
last 和 info 命令吗?对了!就是她。

举办一下看望是啊结果 ?

  1. [root@dns1 bob]# rrdtool last eth0.rrd
  2. 1163862985        
  3. [root@dns1 bob]#

复制代码

last 操作展现的日子戳和方面的报错信息被起的价值一样。那一个时刻是

  1. [root@dns1 bob]# date -d ‘1970-01-01 1163862985 sec utc’
  2. 六 11月 18 23:16:25 CST 2006
  3. [root@dns1 bob]#

复制代码

总的说来要要 update 数据库,则 update 操作让起底日穿必须晚于最终四回等
update 的时。

实例二 :仍然一个荒唐的例证

咱挑 23:16之生一个5分钟23:20看成日穿吧。

  1. [root@dns1 bob]# date -d ‘2006-11-18 23:20’ +%s
  2. 1163863200
  3. [root@dns1 bob]#

复制代码

所以 update 命令为 :

  1. [root@dns1 bob]# rrdtool update eth0.rrd 1163863200:1
  2. ERROR: expected 2 data source readings (got 1) from 1163863200:1:…
  3. [root@dns1 bob]#

复制代码

抑或不行?!!

仔细看错误消息,原来是我们于丢了一个价值。还记得 info
命令吗?这会儿它派上用场了。

  1. [root@dns1 bob]# rrdtool info eth0.rrd
  2. filename = “eth0.rrd”
  3. …..(省略)
  4. last_update = 1163862985
  5. ds[eth0_in].type = “COUNTER”
  6. ds[eth0_out].type = “COUNTER”

复制代码

原先是2只 DS ,怪不得 RRDtool 会报错了

实例三 :这一次应该成功了咔嚓?

  1. [root@dns1 bob]# rrdtool update eth0.rrd 1163863200:1:2
  2. [root@dns1 bob]#

复制代码

当时会也没有错误音讯,这究竟多少是否别插入到 RRA 中了也?

对此拖欠问题,有少单艺术,一个是由此 fetch 操作,从 RRA
中领到数据;但此大家下一样首再张嘴。

再有雷同种艺术就是是用 updatev 操作来顶替 update 。updatev 的 v 表示 verbose
的意,现在即令来拘禁 updatev 的企图 :

实例四 :updatev 的好处 

俺们举行多独 update 操作

  1. [root@dns1 bob]# rrdtool last eth0.rrd
  2. 1163864400
  3. [root@dns1 bob]#
  4. [root@dns1 bob]# rrdtool update eth0.rrd 1163864700:3000:4000
  5. [root@dns1 bob]# rrdtool updatev eth0.rrd 1163865000:3300:4600
  6. return_value = 0
  7. [1163865000]RRA[AVERAGE][1]DS[eth0_in] = 1.0000000000e+00
  8. [1163865000]RRA[AVERAGE][1]DS[eth0_out] = 2.0000000000e+00

复制代码

得望 return value 是 0,这个 return value 你得理解为 shell
编程中之 exit status 。updatev用 0 表示成功,-1 表示失利。

而我们插入的值明明是 3300 和 4600 ,为啥出去的结果是 1和2 呢?

即刻是因 eth0_in 和 eth0_out 都是 COUNTER 型的 DS,所以 RRDtool 在收受
3300 和 4600 后,会作一个运算,就是

(3300-3000)/ step (300)= 1,(4600-4000)/step(300)=2 ,这即是 1和
2 这点儿个价的源于了。还记得前边提到的 PDP 吗?

立马简单个值 (1 跟2)就是 PDP 了,而不是 3300 和 4600  。这点而作了解。

实例五 :此外一个 updatev 的事例

  1. [root@dns1 bob]#
  2. [root@dns1 bob]# rrdtool updatev eth0.rrd 1163865300:3300:4600
  3. return_value = 0
  4. [1163865300]RRA[AVERAGE][1]DS[eth0_in] = 0.0000000000e+00
  5. [1163865300]RRA[AVERAGE][1]DS[eth0_out] = 0.0000000000e+00
  6. [root@dns1 bob]#

复制代码

于1163865300 这些随时大家被闹之价和上次同样,所以 eth0_in 和 eth0_out
的 PDP 都为 0        

出手精通了 PDP 的概念,现在我们来拘禁什么是 CDP ,以及 CDP 是安算的

实例六 :通过 updatev 掌握 CF 的概念

  1. [root@dns1 bob]# rrdtool updatev eth0.rrd 1163865600:4000:5000
  2. return_value = 0
  3. [1163865600]RRA[AVERAGE][1]DS[eth0_in] = 2.3333333333e+00
  4. [1163865600]RRA[AVERAGE][1]DS[eth0_out] = 1.3333333333e+00
  5. [1163865600]RRA[AVERAGE][4]DS[eth0_in] = 1.6666666667e+00
  6. [1163865600]RRA[AVERAGE][4]DS[eth0_out] = 1.6666666667e+00
  7. [1163865600]RRA[AVERAGE][24]DS[eth0_in] = NaN
  8. [1163865600]RRA[AVERAGE][24]DS[eth0_out] = NaN
  9. [root@dns1 bob]#

复制代码

这一次的输出和上次同时非同等了。本次 update 操作影响及几乎独 RRA ,看到 []
中的 1,4,24 了啊?它们就是表示不同的 RRA 中每个 CDP 所富含的 PDP
数量。

1 就是 1个 CDP 包含1 个 PDP,4 就是 一个 CDP 包含4个 PDP(20分钟)、24
就是 一个 CDP 包含24个 PDP(2小时)。

然为什么没 288 呢?eth0.rrd 的第4独 RRA 不是确定各级288个 PDP
合并为一个 CDP 吗?

为此时还轮不至它们上。1163865600 / 7200 = 161648 ,
也就是说刚好1163865600 是于 7200 的之一周期上(161648)。

但1163865600 / 86400 ≈ 13470.66 ,说明1163865600 还不到 86400 的周期。

不可能不等交13471* 86400=1163894400 才会现出 [288] 的
CDP,这是时穿代表的年月是何时也?看下边的 date 命令就知了 :

  1. [root@dns1 bob]# date -d ‘1970-01-01 1163894400 sec utc’
  2. 日 11月 19 08:00:00 CST 2006
  3. [root@dns1 bob]#
  4. [root@dns1 root]# date -d ‘1970-01-01 1163865600 sec utc’ 
  5. 日 11月 19 00:00:00 CST 2006
  6. [root@dns1 root]#

复制代码

这般非就是刚刚相差1上的时间了呢?你或许会晤以为相当想拿到,为啥未是00:00
而是 08:00乎?

尚记create 操作的语法吗?其中起一个 –-start
参数为?不记了?没关系,那就是得用 first 操作来更寻找出来,

  1. [root@dns1 bob]# rrdtool first eth0.rrd –rraindex 3
  2. 1100822400
  3. [root@dns1 bob]#
  4. [root@dns1 bob]# date -d ‘1970-01-01 1100822400 sec utc’
  5. 五 11月 19 08:00:00 CST 2004
  6. [root@dns1 bob]#

复制代码

寓目了为?是 2004 年的 11 月19日上午8点正好,距离 2006-11-19
刚好是2年,也尽管是 730 天,因为 eth0.rrd 的第4只RRA 

仅仅保留730单记录。每个记录时间上离1龙。也便是第一独记录是 2004/11/19
8:00 ,第二个记录是 2004/11/20 8:00 ,

其五个记录代表 2004/11/21 8:00 ,依次类推。所以去1163865600
目前的下一个记录是起在 2006/11/19 8:00 。

故严厉意义上来说,RRDtool 中的一律上并不一定是于 0:00
起始的,但可管的哪怕是片只记录里自然相差86400秒(1上)。

季)自动更新数据库

实在这个还只不过是手工 update
时索要专注的有的地点,淌倘诺自动更新数据库,时间戳方面就是付 RRDtool
去处理吧,大家绝不顾虑了。

前面我们已写好了一个本子,现在即用她来更新

  1. [root@dns1 bob]# cat get_eth0_traffic.sh 
  2. #!/bin/bash
    1. # 首先得 eth0 接口的 ifIndex 
    1. index=$(snmpwalk -IR localhost RFC1213-MIB::ifDescr |grep
      eth0|cut -d ‘=’ -f 1|cut -d ‘.’ -f 2)
    1. # 再通过 snmp 协议拿到 ififInOctets 和 ifOutOctets 的价
    1. # 由于在 /etc/snmp.conf 中安排了 defVersion 和 defCommunity
      ,所以 snmpget 命令不用指定这片独参数
    1. eth0_in=$(snmpget -IR -Os localhost ifInOctets.${index}|cut -d
      ‘:’ -f 2|tr -d ‘[:blank:]’)
    1. eth0_out=$(snmpget -IR -Os localhost ifOutOctets.${index}|cut
      -d ‘:’ -f 2 |tr -d ‘[:blank:]’)
    1. echo ${eth0_in}
    1. echo ${eth0_out}
    1. # 需要自我若由此这一个数据来更新 eth0.rrd ,注意 update 时的
      timestamp 大家之所以的是 N         
    1. /usr/local/rrdtool-1.2.14/bin/rrdtool updatev /home/bob/eth0.rrd
      N:${eth0_in}:${eth0_out}
    1. [root@dns1 bob]#

复制代码

五)接下是啊为?

有矣数量,下面该法什么了邪?是绘图吗?

不是!^_^!! (估量有人抢疯了吧)

于绘图从前,你生出没发出想过 RRDtool 在绘图时怎么拿到多少的啊?

比如说我想写2钟头内之数据,那么我们来4单 RRA ,其 resolution 分别是
300,1200,7200,86400 

(还记什么是 resolution 吗?就是每个 RRA 中点滴只 CDP
相隔的流年)。是从第一独 RRA 取出 7200/300=24 个记录,

依旧由第二独 RRA 取出 7200/1200=6 个记录也?或者是于第多少个 RRA
中取有1单记录就是足以呢?

这个题材我们虽留待下一样首再上吧。这里吃我们留下两只问题 :

A)        固然 eth0.rrd
在5秒钟内接受不止1只革新,结果会咋样?提醒:用 updatev
就可以看出来了

B)        倘若过了 eth0.rrd
在5分钟内并未接受脚本再次来到的价值,是否立刻就由此 UNKNOWN 作为 PDP 的价?

C)        参考下面的例子,搞懂 heartbeat 的含义

D)        在闹了然 heartbeat 后,再惦记转手 heartbeat 和 step
之间的涉嫌。
     

 

 

 

 

 

 

 

 

 

 

 

 

从 RRD 文件被取数据

**********************************************************************************************************************
注 :该课程参考了之类内容 :
A)官方文档 :http://oss.oetiker.ch/rrdtool/doc/index.en.html
B)abel 兄的大作
http://bbs.chinaunix.net/viewthread.php?tid=552224&highlight=rrdtool
               
http://bbs.chinaunix.net/viewthread.php?tid=552220&highlight=rrdtool
作者 :ailms <ailms{@}263{dot}net>
版本 :v1
末修改 :2006/11/17 17:35
**********************************************************************************************************************

一)前言
RRD 是 Round 罗布(Rob)in Database
的意,那么是否好形象平日的数据库举行查询操作也?

答案是得的。fetch 就是用来做这种工作的家伙。当然 fetch 不能和 select
语句比较,它只有是依照用户指定的日,

由适用的 RRA 中取出数据,并加以格式化。但是和 MRTG
相比,已经好广大了,至少你莫用得看该大的 log 文件。

骨子里,fetch 操作实际能够不学,因为 RRDtool
会自动帮你挑好数据。但您怎么确定 RRDtool 取的数就是若想使的为?

抑或说您如何验证 RRDtool 绘制出来的希冀是没错的呢?

废话少说,下边起初正文

第二)fetch 操作的语法

  1. rrdtool fetch filename CF [–resolution|-r resolution]
    [–start|-s start] [–end|-e end]

复制代码

里面 –start、–end、-r 都是可选的 。RRDtool 默认的 –end 是 now
,–start 是 end-1day ,也即便是1上前。

CF 可以是 AVERAGE、MAX、MIN、LAST ,当然要构筑库时暴发欠 CF 类型的 RRA
才得翻,否则会报错。

其三)fetch 咋样得到多少

于规定了时限定后,RRDtool 会从三只 RRA 中摘特级的良 RRA
的数目。至于什么是“最佳”,则于个别单方面考虑 :

A)第一是拖欠 RRA
的数据假设尽量的幂所求的岁月限定。怎么样算一个 RRA
的掩盖时吧?以 eth0.rrd 的第一个RRA 为例,

     有 600 独记录,每个记录相隔300秒,则总的时刻覆盖范围是180000
秒≈2天,所以若 –-start 和 -–end 规定之工夫限制
     
     大于2天,则 RRDtool 不会师从该 RRA 中取数据。

B)第二凡是 resolution
的要求。依旧地方的例子,即使是要画3天之数,从日覆盖范围上来讲,第2、3、4
独 RRA 都符合要求。

     那到底挑选好 RRA 的多寡为?假使 fetch 中爆发指定 –r 选项,则采纳resolution 等于 –r 指定的价值好 RRA 的数量。即使没有 
     
     –r 选项,则于第一个贴切的 RRA 中取数据。

C)fetch 如若无加以 –-start、–end、-r ,则默认输出 resolution 最小的慌
RRA 的数量。就像下的事例1一如既往。

季)实际例子

实例一 :默认意况

  1. [root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE |more
  2.                         eth0_in            eth0_out
    1. 1164467700: 1.1337243905e+01 9.6323712631e-02
  3. 1164468000: 1.7896453039e+01 0.0000000000e+00
  4. 1164468300: 1.8469136234e+01 1.2215723119e+00
  5. 。。。。(中间略)
  6. 1164553800: 6.9634610564e+01 4.9644415243e+01
  7. 1164554100: nan nan

复制代码

  1. [root@dns1 bob]# date                        (当前光阴)
  2. 日 11月 26 23:11:12 CST 2006
    1. [root@dns1 bob]# date -d ‘1970-1-1 1164554100 sec utc’       
              (最终一个笔录之流年)
  3. 日 11月 26 23:15:00 CST 2006
  4. [root@dns1 bob]#
    1. [root@dns1 bob]# date -d ‘1970-1-1 1164467700 sec utc’       
              (第一独记录之日)
  5. 六 11月 25 23:15:00 CST 2006
  6. [root@dns1 bob]#

复制代码

fetch 输出的第一排列是 timestamp ,表示后边的数码是在什么日子接的。”:”
后边就是DS的值。fetch 不可能指定只取这一个 DS 的多寡,

只得三回性取出整 DS 的价值。可以视,eth0.rrd 有些许独 DS :eth0_in 和
eth0_out ,每个 DS 的值用 空格进行分隔,一律用科学记数法的格式。

而 fetch 不点名 –-start 和 -–end
,则默认取自眼前时时终于从,往前头1上的数码(289个记录)。因为前几日是 23:11
,还无交 23:15,所以最后一个记

抄送的价值是 NaN (Not a Number),也就是是 UNKNOWN
的意。可以看来,两独记录中的大运距离是300。

实例二:使用 –start 和 –end 指定时间范围

  1. [root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE –start
    1164467700 –end 1164553800 |more
  2.                         eth0_in            eth0_out
    1. 1164468000: 1.7896453039e+01 0.0000000000e+00
  3. 1164468300: 1.8469136234e+01 1.2215723119e+00
  4. 1164468600: 1.5988336199e+01 1.4417769382e-01
  5. 。。。。。(中间略很多)
  6. 1164553800: 6.9634610564e+01 4.9644415243e+01
  7. 1164554100: 1.7481962958e+02 2.3086574912e+02
  8. [root@dns1 bob]#

复制代码

可以看出第一独记录及终极一个笔录都于 –-start  和 –-end 晚了300秒。

实例三 :使用 AT风格的光阴

  1. [root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE –start end-1day
    –end 1164553800 |more
  2.                         eth0_in            eth0_out
    1. 1164467700: 1.1337243905e+01 9.6323712631e-02
  3. 1164468000: 1.7896453039e+01 0.0000000000e+00
  4. 。。。。。。。(中间略很多)
  5. 1164554100: 1.7481962958e+02 2.3086574912e+02
  6. [root@dns1 bob]#

复制代码

专注 –start 的价是 end-1day ,这就是是 AT风格的日。end 就是 –end
中吃有的1164553800 。具体的时限定是代表伊始时间由1164553800 往前方1天

好望,现在先是个记录以及实例二相比较,提前了300秒。和例2中的 –start
一致了。所以会用 AT风格的时光的时或用 AT 风格的年华比较便利。

足望去算的分神,别人吗比易于看。

实例四 :提取指定 resolution 的数额

  1. [root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE –start
    1164467700 –end start+1day -r 1200 |more
  2.                         eth0_in            eth0_out
    1. 1164468000: 1.7899370295e+01 3.8782610300e+00
  3. 1164469200: 2.0828335735e+01 3.4166666667e-01
  4. 1164470400: 1.4581351504e+01 3.5000000000e-02
  5. 。。。。。。(中间略很多)
  6. 1164554400: 9.4367707174e+01 9.4866775629e+01
  7. [root@dns1 bob]

复制代码

雅观来,现在记录点滴点儿内的日子间隔变成了1200 了。输出的行数为
(86400/1200)+1=73 (72+1)。

实例五:假如指定一个请勿设有的 resolution 呢?

  1. [root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE –start
    1164467700 –end start+1day -r 1000 |more 
  2.                         eth0_in            eth0_out
    1. 1164468000: 1.7899370295e+01 3.8782610300e+00
  3. 1164469200: 2.0828335735e+01 3.4166666667e-01
  4. 。。。。。。(中间略很多)
  5. 1164554400: 9.4367707174e+01 9.4866775629e+01
  6. [root@dns1 bob]#

复制代码

我们指定的 resolution 是 1000 ,但连无生 RRA 的 resolution 为
1000,所以 RRDtool 挑选了第一只方便的 resolution ,

否便是 1200 的不胜 RRA 的多寡作为结果输出。注意,RRDtool 只会挑
resolution 比 –r 指定的价当或者更强之 RRA ,不会面挑

选比 –r 指定的值小的 RRA 。例如当拖欠例子中,RRDtool 就无汇合选
resolution=300 的第一个 RRA 。为啥也?

诸君好协调按照第三有的“fetch 怎样提取数据”的简单单准则考虑一下

实例六 :再来拘禁一个 –r 的事例

假使自己无思指定 –-start 或者 –end ,就想看 resolution 为 1200 呢?

  1. [root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE -r 1200
  2.                         eth0_in            eth0_out
    1. 1164470400: 1.4581351504e+01 3.5000000000e-02
  3. 1164471600: 1.9312781373e+01 3.5000000000e-02
  4. 。。。。。(中间略很多)
  5. 1164555600: 8.5249300043e+01 7.0171152327e+01
  6. 1164556800: nan nan
  7. [root@dns1 bob]#

复制代码

啊?为啥要以记录的日子距离依旧 300 秒为?大家无是点名了 –r 1200
吗?

规矩说,这种格局 90% 以上之机率是勿会面马到成功吗?这该怎么收拾也?

实例七 :正确利用 –r 的不二法门

  1. [root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE -r 1200 –end
    $((($(date +%s)/1200)*1200)) |more
  2.                         eth0_in            eth0_out
    1. 1164470400: 1.4581351504e+01 3.5000000000e-02
  3. 1164471600: 1.9312781373e+01 3.5000000000e-02
  4. 1164472800: 1.7383358822e+01 3.5000000000e-02
  5. 1164474000: 1.4781054841e+01 3.3225406191e-01
  6. 。。。。。。(中间略很多)
  7. 1164555600: 8.5249300043e+01 7.0171152327e+01
  8. 1164556800: nan nan
  9. [root@dns1 bob]#

复制代码

今昔 resolution 已经变成 1200 的了。同理,如若想看 7200,86400
resolution的 RRA,只要把 end 部分的 (
)中的数字替换为对应的值就可了。

  1. [root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE -r 7200 –end
    $((($(date +%s)/7200)*7200))   
    1. [root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE -r 86400
      –end $((($(date +%s)/86400)*86400))

复制代码

实例八 :关于 fetch 提取数据准则1的测试

  1. [root@dns1 bob]# rrdtool fetch eth0.rrd –start now-3day AVERAGE
    |more
  2.                         eth0_in            eth0_out
    1. 1164298800: nan nan
  3. 1164300000: nan nan
  4. 。。。。。。(中间略很多)
  5. 1164556800: 6.4118014239e+01 1.8871145267e+01
  6. 1164558000: nan nan
  7. [root@dns1 bob]#

复制代码

以及第一只例不同,这一次的 resolution 是 1200
了?为何也?因为大家指定的时光限制是3上,而首先只
RRA只保留2天的数目多或多或少,所以 RRDtool 不会晤打

拖欠 RRA 取数据,那么会从大 RRA 取数据为?由于我们一贯不点名 –r 选项,所以
RRDtool 采用1200 的要命 RRA 

实例九 :关于 fetch 提取数据准则2的测试

  1. [root@dns1 bob]# rrdtool fetch eth0.rrd –start now-3day AVERAGE
    -r 7200 |more
  2.                         eth0_in            eth0_out
    1. 1164304800: nan nan
  3. 1164312000: nan nan
  4. 1164319200: nan nan
  5. 。。。。。。(中间略很多)
  6. 1164549600: 5.1899602485e+01 4.3073128067e-01
  7. 1164556800: 7.9766222122e+01 4.0644151093e+01
  8. 1164564000: nan nan
  9. [root@dns1 bob]#

复制代码

今 resolution 不再是 1200 ,而是指定的 7200 了。

因即使 resolution=1200 的 RRA 就足以满意 –start 和 –end 的要求,

但以 -r 指定 resolution=7200 ,所以于第3个 RRA 中取数据

五)总结

从今点我们得望,fetch
实际上是异常复杂的一个命令,即便想倘若出口你所假诺的多少,就必考虑好多只因素

A)第一是切实可行想出口的大运限制?

B)第二是计量好 –-start 和
–end。提出至少为有一个,最好2单都叫来

C)第三凡是如发差不六个RRA符合条件,则用 –r
指定具体的 resolution

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

利用RRDtool
举办绘图(一)

**********************************************************************************************************************
注 :该课程参考了如下内容 :
A)官方文档 :http://oss.oetiker.ch/rrdtool/doc/index.en.html
B)abel 兄的大作
http://bbs.chinaunix.net/viewthread.php?tid=552224&highlight=rrdtool
               
http://bbs.chinaunix.net/viewthread.php?tid=552220&highlight=rrdtool
作者 :ailms <ailms{@}263{dot}net>
版本 :v1
末尾修改 :2006/11/17 17:35
**********************************************************************************************************************

一)前言

动RRDtool
大家最好关怀什么?当然是何许将数据画下了。即便前说了众,但这个都是基础来的。了然好了,可以为您于绘图时更一箭穿心。

理所当然还有 RPN
(反向波兰表达式)一节约之,但考虑一下,觉得依然坐前边,先打着力的绘图讲起。

即时无异于节约的情即便多,但主题都是试错性的始末,只要多尝试几潮就是可以了。

其次、graph 操作的语法

  1. rrdtool graph filename [option …] 
  2.    [data definition …]
  3.    [data calculation …]        
  4.    [variable definition …]
  5.    [graph element …]
  6.    [print element …]

复制代码

个中的 data definiton、variable definition 、data
calculation、分别是下的格式

  1. DEF:<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>][:end=<time>][:reduce=<CF>]
  2. VDEF:vname=RPN expression
  3. CDEF:vname=RPN expression

复制代码

里面 filename 就是若想使转的图文件之名,默认是 png
。你可经过挑选修改图片的档次,能够生出 PNG、SVG、EPS、PDF四种。

A)DEF 是 Definition
(定义)的意。定义什么吧?你一旦绘制,总要来数据源吧?DEF 就是喻
RRDtool 从非凡 RRD 中取出指定

    DS(eth0_in、eth0_out)的某项目标统计值(还得指定
resolution、start、end),并拿当时通放入到一个变量 <vname>中 。
    
    你或相会感到意外,为啥还有一个 CF 字段?因为 RRA 有多种  CF
类型,有些 RRA 可能为此来保存平均值、有些 RRA 可能用来总计最老价值、
    
    最小值等等。所以您不可以不同时指定使用什么 CF 类型的 RRA的数。至于
:start 和 :end 、:reduce 则据此得相比少,最常用之即使是 :step 了,
    
    它可被你说了算 RRDtool 从杀 RRA 中取数据。

B)VDEF 是 Variable Definition (变量定义)的意思。定义什么呢?记得 MRTG
在图片的下面有一个叫 Legend 的有吗?

    这里显示了1单或2只 DS (MRTG 没有 DS 一说,那里是假 RRDtool
的)的 “最酷价值”、“平均值”、“当前价”。这几个价值是何等
    
    总计的吧?
    
    RRDtool 中之所以 VDEF 来定义。这个变量专门存放有 DS 某连串型的价,例如
eth0_in 的尽丰盛价值、eht0_out 的此时此刻价等。当你需要象
    
     MRTG  一样输出数字报表(Legend) 时,就好于 GPRINT 子句(sub
clause)中调用它。
   
   同它吧待由此一个变量来存放数值。要专注的是,旧版 的 RRDtool
中凡是由此其它一种植格式来达成同等之目的。新版的 RRDtool 则援引用
   
    VDEF   语句子。但于使过程被,却发现 VDEF 的采用反而造成了烦。
例如你发5单 DS 要打,每个 DS 你都想出口最要命价值、最小价、平均值
    
    、当前价值。  如若运用 VDEF ,则需 4 * 5 = 20 个 VDEF
语句,这会招致大的困扰。具体事例能够扣押第十一节约“数字报表”部分。
   
C)CDEF 是 Calculation Define 的意。使用了MRTG 的还汇合体会到一些,MRTG
的精打细算能力实际太差了。例如你来少单 Target ,

      一个是 eth0_in , 一个是
eth0_out,假诺要拿它们相加起来,再除以8,得出 bytes
为单位之值,如何算也?或者说你独自想看
      
      eth0_in 中跨 10Mb/s 的那么有, 此外的莫关注,又哪实现为?因为
MRTG 不能针对它从 log 取出来的多少开展改动,只可以原
      
      原本本的见,所以这么些为难满足我们的求。而动 CDEF ,
这总体仍是可以够生轻之落实。CDEF 协理广大数学运算,甚至还辅助简
      
      单的逻辑运算 if-then-else
,可以解决前提到的第2单问题:如何才绘制而所关
心的数。然而这一切还待熟练 RPN 的语法,
      
      所以大家放手下一致节介绍,这同节即介绍怎么样拿 RRDtool
中之数据以图的措施显示出。
      
      
老三)选项分类

服从有的大家以合法文档的方法,把采取分成几非凡接近,分为  :

A)提姆(Tim)e range
: 用于决定图的X轴显示的初步/结束时间,也包罗自RRA中领取指定时间之数码。

B)Labels :用于控制 X/Y 轴的辨证文字。

C)Size :用于控制图的大大小小。

D)Limits :用于控制 Y 轴的上下限。

E)Grid :用于控制 X/Y 轴的刻度咋样体现。

F)Miscellaneous :其他选拔。例如呈现中文、水冲效果等等。

G)Report :数字报表

内需表明的凡,本篇当中并无是排有了具备选项之用法,只是列出较为常用的选项,如果想查看所有选项之之用法,能够到官方站点下载文档,

这里就是不一一列有了,望各位见谅。

季)时间限制控制(提姆e Range)

  1. [-s|–start time] [-e|–end time] [-S|–step seconds]

复制代码

既然要绘制,就应当出一个胚胎/结束的命宫。Graph 操作中出 –s ,-e
选项。那点儿个选拔即能够用于控制图的 X 轴显示的日范围,也可以为此

给决定 RRDtool 从 RRA 中取对应时间的数目。固然没有点名 –-end ,默认为
now;假诺无点名 –-start,则默认为1龙前。倘若两岸都不曾

点名,则图表默认彰显从目前算打1天外的。数
回头看一下 DEF 中,也闹 :start ,:end , :step ,这个与
–-start、–end、–step 之间时有发生啊关系也?

吃咱先行押 :step 和 –step之间的关系是怎样的。

下边为 eth0.rrrd 为例,假而要绘制的时光限制 range 等于 end -start[

A)假设 0 <  ragne < 180000 (第一只 RRA 的岁月覆盖范围)
,则默认从第1个RRA中获数据 :

     假诺 DEF 中受起的 :step > 300 ,例如 1000 ,则由 resolution=
1000 的或者第一独高于 1000 的RRA 中甄选数据,由于 eth0.rrd 中没有
    
                                                     resolution = 1000
的 RRA,则 RRDtool 会从 resolution = 1200 的第2 RRA 中取数据。

     假如 DEF 中叫出之 :step <= 300 ,例如 200 ,则 RRDtool
会忽略该设定,依然由第一只 RRA 中取数据。

B)假若 180000 < range <
720000  ,由于第一个RRA只可以保留2天的数额,所以默认从第2只RRA中拿走数据

     即使 DEF 中让起的 :step > 1200 ,例如 1800,则 RRDtool 会从
resolution = 7200 的第3 RRA 中取数据

     假使 DEF 中叫出 :step<= 1200,例如 300 ,则 RRDtool
会忽略,仍然从第2单 RRA 中取数据

C)如果 720000 < range <  4320000 ,则默认从第三独 RRA 中取数据

     如若 DEF 中给闹底 :step > 7200 ,例如 10000 ,则从第4单
RRA中获取多少

     假诺 DEF 中于有底 :step <= 7200 , 例如 1200
,则忽略该值,并要从第3 单 RRA 中取数据

D)假若 4320000 < range < 63072000 ,则默认从第4只 RRA 中取数据

     如若 DEF 中被出底 :step > 86400 ,则作为未知

     假设 DEF 中于出之 :step <=86400 ,则于第4个 RRA 中取数据

E)-S 选项好从来控制 RRDtool 怎么样挑选 RRA 。

    例如 -S 1200 ,即便DEF 中不加 :setp ,则 RRDtool 会从第2只 RRA
中取数据,虽然 rang < 180000 

    倘使 -S 和 :step 同时现身,则 :step 优先。

F)DEF 中的 :start 和 :end 可以挂 –-start 和 –-end 的值。

     默认情状下,假使 DEF 中不加 :start 和 :end ,则当 –-start 和
–end

    如若 DEF 中定义了 :start 和 :end ,则因为 :start 和 :end 为依据。

实例1 :使用 –-start 指定 X 轴的序幕时间

  1. [root@dns1 bob]# rrdtool graph 1.png \        
  2. > –start now-120000 \        # 表示初阶时间是时光阴向前方
    120000 秒,也不怕是 33 只钟头左右
  3. > DEF:value1=eth0.rrd:eth0_in:AVERAGE \         # 从eth0.rrd
    中取出 eth0_in 的数据,CF 类型为 AVERAGE
  4. > AREA:value1#ff0000        # 用“方块”的格局来绘制 value1
    ,注意这里是为此 value1 ,不是为此 eth0_in
  5. 481×154                        # 假若 RRDtool
    有绘图方面的说话,则这里显得图片大小,否则也 0x0。
  6. [root@dns1 bob]#

复制代码

图片 3

可观望 X 轴的仿有些是乱码,可是没什么,你可临时已因而 env LANG=C
rrdtool xxxx 来化解拖欠问题,或者以前边用

–n 来设定 RRDtool 使用粤语字体,就无会合冒出这么的景了

实例2 :使用 :step 从第2个RRA中取得多少

  1. [root@dns1 bob]# rrdtool graph 2.png \
  2. > –start now-120000 \
  3. > DEF:value1=eth0.rrd:eth0_in:AVERAGE:step=1000 \        #
    :step 指定 resolution=1000 
  4. > AREA:value1#ff0000
  5. 481×154
  6. [root@dns1 bob]#

复制代码

此是 :step=1000,但 RRDtool 会取 :step=1200 的 第2单 RRA
的数量来绘图,可以与方的 1.png 相比较,发现于坦荡。

图片 4

实例3 :使用 –S 从第2单RRA中得多少

  1. [root@dns1 bob]# rrdtool graph 4.png 
  2. > -S 1200 \                # 使用 –S 控制 RRDtool 从
    resolution=1200 的 RRA 中取数据
  3. > –start now-120000 \
  4. > DEF:value1=eth0.rrd:eth0_in:AVERAGE \
  5. > AREA:value1#ff0000        
  6. 481×154
  7. [root@dns1 bob]# 

复制代码

图片 5 

可观察与点的图一律,表达 RRDtool 的确依据 -S 的安装由第2单RRA
中取数据了

运用 –S 可以针对 DEF 中负有的 DS 都下同样之 resolution,等于在每个
DEF后还丰裕 :step=<value> ,value 是 –S 的值

实例4 :同时使 –S 和 :step 

  1. [root@dns1 bob]# rrdtool graph 5.png 
  2. > -S 1200 \                                # -S 指定
    resolution=1200
  3. > –start now-120000 \
  4. > DEF:value1=eth0.rrd:eth0_in:AVERAGE:step=300 \        #
    :step 指定 resolution=300
  5. > AREA:value1#ff0000     
  6. 481×154
  7. [root@dns1 bob]#

复制代码

图片 6

可观望 5.png 和 1.png 是一样的,也就是说 –S 1200 并没有自功能,而是
:step=300 起功能了

实例5 :使用 :start 和 :end 只彰显指定时间外之数据

  1. [root@dns1 bob]# rrdtool graph 1.png \
  2. > –start now-1h \                        # X
    轴展现1只钟头的尺寸
  3. > DEF:value1=eth0.rrd:eth0_in:AVERAGE:start=now-600:end=now-300
    \        # 但只取10秒钟前至5分钟前之即时有的
  4. > AREA:value1#00ff00:in  
  5. 475×168
  6. [root@dns1 bob]#

复制代码

图片 7

苟大家无加 :start 和 :end ,则效果使下 :

图片 8 

我们甚至好被有限独对象出示不同之时空,例如 

实例6 :让简单独目的出示不同时间段的数额

  1. [root@dns1 bob]# rrdtool graph 1.png \
  2. > –start now-2h \                # 规定时间吗2刻钟外
  3. > DEF:value1=eth0.rrd:eth0_in:AVERAGE:end=now:start=end-1h \   
        # 规定时啊1刻钟外                
  4. > DEF:value2=eth0.rrd:eth0_out:AVERAGE \        # 没有点名
    :start 和 :end,默认和 –-start 一样吧是2时
  5. > AREA:value1#00ff00:in \
  6. > LINE2:value2#ff0000:out:STACK 
  7. 475×168
  8. [root@dns1 bob]#

复制代码

图片 9

实例7 :把一段时间分为几段落分别呈现 :

  1. [root@dns1 bob]# rrdtool graph 1.png \
  2. > DEF:value1=eth0.rrd:eth0_in:AVERAGE:end=now:start=end-1h \   
        # 当前1小时内
  3. > DEF:value2=eth0.rrd:eth0_in:AVERAGE:end=now-1h:start=now-2h
    \        # 2小时前
  4. > DEF:value3=eth0.rrd:eth0_in:AVERAGE:end=now-2h:start=now-3h
    \        # 3小时前
  5. > LINE1:value1#00ff00:”1 hours ago” \
  6. > LINE2:value2#ff0000:”2 hours ago” \
  7. > LINE3:value3#000000:”3 hours ago”  
  8. 475×168
  9. [root@dns1 bob]

复制代码

图片 10

俺们拿3个时辰内的数量用三种不同粗细、不同颜色的曲线画了下。

看来了为,out部分(肉色)显示了2单时辰外之流量,而in部分(绿色)则独自显示了1个钟头外的一些

在此处要提取一点,尽管咱指定了 –-start 或者 –-end ,或者 :start ,
:end,但并无意味曲线就肯定会打指定的时刻点起与得了。

诸如我们地点点名了 :start=now-600:end=now-300
,也便是只显示5分钟的多寡。但图出来的成效也是10(10:05-10:15)分钟

的多少,这是为大家采用的时日中“不慎”横垮了零星单周期(10:05-10:10,10:10-10:15),所以
RRDtool 会管其整个画出来,而

莫是只写中的5分钟。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

运用RRDtool
进行绘图_(二)

**********************************************************************************************************************
注 :该学科参考了之类内容 :
A)官方文档 :http://oss.oetiker.ch/rrdtool/doc/index.en.html
B)abel 兄的大作
http://bbs.chinaunix.net/viewthread.php?tid=552224&highlight=rrdtool
               
http://bbs.chinaunix.net/viewthread.php?tid=552220&highlight=rrdtool
作者 :ailms <ailms{@}263{dot}net>
版本 :v1
最终修改 :2006/11/17 17:35
**********************************************************************************************************************

五)表明文字(Label)

  1. [-t|–title string] [-v|–vertical-label string]

复制代码

-t 是用来图表上方的题目,-v 是用于 Y 轴的认证文字

实例1 :给图表扩展标题

  1. [root@dns1 bob]# rrdtool graph 1.png \
  2. > –start now-183600 \                # 从即起通往前方51个钟头
  3. > -t “51 hours ago” -v “Traffic” \        # 标题是 “51 hours
    ago”,Y 轴的讲明文字是 “Traffic”
  4. > DEF:value1=eth0.rrd:eth0_in:AVERAGE \
  5. > DEF:value2=eth0.rrd:eth0_out:AVERAGE \
  6. > LINE1:value1#0000ff:in \        # 注释
    :以1个像素宽的曲线画出 value1,颜色是青色,图例的辨证文字是“in”
  7. > LINE2:value2#ff0000:out        # 注释 :以2只像素宽的曲线画出
    value2,颜色是革命,图例的验证文字是 “out”
  8. 497×179
  9. [root@dns1 bob]#

复制代码

图片 11

前日我们为此之是 LINE 的计来绘图。LINE 可以有3栽,分别是
LINE1|2|3,也尽管是线条的粗细。还有一样种是 STACK 形式下还介绍。

得望流入的流量比流出的流量略大,这样看之讲话,out
流量相比较难看,是否可以有其它办法也?RRDtool 还提供了

除此以外一栽格式,就是 STACK
。意思就是是当后边一个目标的底蕴(把前边一个靶的值当成 X
轴)上制图,而无是自 X 轴开头。

实例2 :使用 STACK 形式绘图

  1. [root@dns1 bob]# rrdtool graph 3.png \
  2. > –start now-120000 \
  3. > -t “33 hours ago” \
  4. > -v “Traffic” \
  5. > DEF:value1=eth0.rrd:eth0_in:AVERAGE \
  6. > DEF:value2=eth0.rrd:eth0_out:AVERAGE \
  7. > AREA:value1#00ff00:in \
  8. > LINE:value2#ff0000:out:STACK                # 注意最终的
    “STACK” ,表示以 value1 的底蕴及制图
  9. 497×179
  10. [root@dns1 bob]#

复制代码

图片 12

霎时是没动 STACK 模式绘图的功用 :

图片 13

可看得出下边使用 STACK 形式的可比明晰,但若是留意,接纳 STACK
格局后,在读取 out 流量时,Y 轴的刻度不再是 out 的价,

应该为此刻度值减去 in 的价值,才是 out 真正的值。这点比较累。需要配合
GPRINT 语词才能够达标一定之职能。

六)图表大小(Size)

  1. [-w|–width pixels] [-h|–height pixels]

复制代码

这里说图表大小要不是图片大小,是为 –w ,-h 控制的凡 X/Y
轴共同环绕起来的那么有尺寸,而不是整套图片的分寸,这点在前面就可以看出了。

默认的图片大小是 400 (长)x 100 (高),但貌似会回来497×179
这么的数字,这些才是图的高低。

RRDtool 比 MRTG 好之一个地点便是 MRTG 一推广坏图片,就相会变换得模糊。RRDtool
则免会师。

于合法文档中,-w 似乎是一个相比较灵活的参数,大家看下的讲述 :

First it makes sure that the RRA covers as much of the graphing time
frame as possible. Second it looks at the resolution of the

RRA compared to the resolution of the graph. It tries to find one
which has the same or higher better resolution. With the “-r” 

option you can force RRDtool to assume a different resolution than the
one calculated from the pixel width of the graph.

By default, rrdtool graph calculates the width of one pixel in the
time domain and tries to get data from an RRA with that resolution. 

With the step option you can alter this behaviour. If you want rrdtool
graph to get data at a one-hour resolution from the RRD, set 

step to 3’600. Note: a step smaller than one pixel will silently be
ignored

旋即半截话分别是从rrd-beginners  和 rrd_graph 文档中摘出来的。似乎看起
–w 会影响到图片的 resolution ,进一步影响至 RRDtool 如何抉择 RRA ,

不过经实验却发现并非如此。

自身对峙刻半段落话中之图形的 resolution
一词不知如何知道以及测算,希望好心的对象可以指点一下 ^_^ .

实例1 :使用 –w 设定图表大小也 300 像素

  1. [root@dns1 bob]# rrdtool graph 3.png 
  2. > -w 300 \                                # 设定 size 为 300
    pixel
  3. > –start now-120000 \
  4. > DEF:value1=eth0.rrd:eth0_in:AVERAGE \
  5. > AREA:value1#ff0000           
  6. 381×154
  7. [root@dns1 bob]#

复制代码

图片 14

得视图片是免是换多少了吗?而且所有图片的大大小小也移多少了。

而就往日的说话来演绎,由于 120000/300(-w的价)= 400 > 300
(step),由于没有 resolution=400 的 RRA,

因此应当用 resolution=7200 的第2单 RRA 的多少来绘图,但骨子里不是。

图片 15

地点这才是 300 pixel 宽,resolution=7200 的功效

所以我看 –w 和 –h 并无可以影响 RRDtool 咋样抉择 RRA
,只好于及收缩放大的意图。

BTW:当您绘制的时刻限定比充裕时,可以行使 –w
增大图表大小,这样看起比“舒服“

图片 16

七) Y 轴上下限(Limits)

  1. [-u|–upper-limit value] [-l|–lower-limit value] [-r|–rigid]

复制代码

默认情况下,RRDtool 会和 MRTG 一样自动调整 Y
轴的数字,来配合时之数值大小。如若想禁止该特性,可以经 –upper-limit

-–lower-limit 来举行限定,表示Y轴展现的价由多少届小。即使无点名 –rigid
,则在图纸的光景边界处如故会生一部分延伸,但一旦指定了
  
-–rigid ,则严峻依据 –-upper-limit 和 –-lower-limit 绘制。

以行使 –lower-limit 时倘使留心,假设数量被发生负数,要是 -–lower-limit 为
0,则负数部分是显得不出来的。

实例1 :使用 –-upper-limit 和 –-lower-limit 限制 Y 轴的前后限

  1. [root@dns1 bob]# rrdtool graph 1.png \
  2. > –start now-120000 \
  3. > -v “Traffic” -t “33 Hours ago” \
  4. > –lower-limit -5000 \                # 限制Y轴下限为 -5000 
  5. > –upper-limit 10000 \                # 上限为 10000
  6. > –rigid \                                         #
    严酷以点的确定来作画
  7. > DEF:value1=eth0.rrd:eth0_in:AVERAGE \
  8. > DEF:value2=eth0.rrd:eth0_out:AVERAGE \
  9. > AREA:value1#00ff00:in \
  10. > LINE1:value2#ff0000:out:STACK
  11. 497×179
  12. [root@dns1 bob]#

复制代码

图片 17

八) X/Y 轴刻度(Grid)

  1. [-x|–x-grid GTM:GST:MTM:MST:LTM:LST:LPR:LFM] 
  2. [-x|–x-grid none]
  3. [-y|–y-grid grid step:label factor] 
  4. [-y|–y-grid none]
  5. [-Y|–alt-y-grid]
  6. [-X|–units-exponent value]

复制代码

RRDtool 中安 X 轴的刻度相比复杂,假若没必要,能够交给 RRDtool
自动去处理。

譬如说位置的觊觎,33 刻钟的情下,X
轴只生2只价,显得甚欠缺。这时候来三三两二种艺术 :

A)一凡是应用 –w 增大图表的小幅,这样 RRDtool 会自动加多一些刻度上去。

图片 18

然则要追加多分外才会生出面的这种效能不得而知,所以这种办法不是怪有益。

B)二凡通过地方的挑三拣四项团结设置 X/Y
轴的刻度咋样显示。首先看上图,在直的丝碰到,青色的线称为 Major
Grid(首要网格线),

    黑色的线称为 Base Grid (次要网格线)(这里是假 EXCEL 中之概念
^_^ )。 X 轴下边的日子文字成为 Label 。了然这
    
    三样东西后,就得出手调整刻度了。
    
C)有少种办法好长足去掉 X/Y 轴的刻度,就是 –-x-grid none 和 –-y-grid
none

D)GTM:GST :控制下格网线的职务。GTM 是一个时光单位,可以是
SECOND、MINUTE、HOUR、DAY 、WEEK、MONTH、YEAR 。

     GST
则是一个数字,控制每隔多久放置一彻底下格线。例如大家要打一个1上之图纸,决定各15分钟一清下网格线,则格式为
MINUTE:15
     
E)MTM:MST :控制重大网格线的职务。MTM 同是岁月单位,MST
是一个数字。接上头的例证,决定一个时辰1根紧要网格线。则格式为 HOUR:1 

     LTM:LST :控制每隔多短期输出一个label 。决定吗1钟头1只 label
。则格式为 HOUR:1

G)LPR:LFM :LTM:LST 只是决定了 label
的呈现地方了,没有点名要显得什么内容。LPR 指的凡哪放 label 。要是LPR
为0,则数字对齐格线

   
(适用于显示时间)。假如无也0,则会做有偏移(适用于展现星期几、月份等)。至于LFM
则需熟稔一下 date 命令的参数,常用的发生 %a(星期几)、
    
   
%b(月份)、%d(天)、%H(时辰)、%M(分)、%Y(年)。我们决定展现时辰和撤并,所以用
%H%M

H)综合起来,X 轴的刻度定义就是是 –-x-grid
MINUTE:15:HOUR:1:HOUR:1:0:’%H:%M’。最好管 %H:%M 括起来

     指出 MST是 GST 的2-6倍增,MST 以及 LST
相同。这样写出来的图于赏心悦目一些

图片 19    

当即肯定就是是图片太小了,不够彰显。把点的 :%M
去丢就可以了,只显示刻钟,不亮分钟

图片 20    

万一拿图片放大一点即再也好了 (-w 800)

图片 21    

故而当设置 X
轴的刻度时,要记得不要显示最多东西,否则要增大图片的深浅

图片 22    

I)Y 轴刻度的设置以无同等了

   grid step :用于控制Y轴每隔多少显得平绝望水平线

   label factor :默认为1,也固然是当各国根水平线的万丈这里展现一个价值。

   例如下面就是是一个例子 (每隔800映现平绝望水平线)

图片 23    

J)Y 轴还有一个分外有利的抉择项就是 –Y ,它好极其要命限度的优化 Y
轴的刻度,指出每便绘图都加上去。

K)Y 轴此外一个实用的选项项就是 –X (即便摘取名是 -X ,但确实是用来安 Y
轴刻度值的)。在方的希冀大家看出 RRDtool 自动对 Y 轴的值举行调整,

     以 k 为单位出示。但要您无思以 k
呈现,而是想稳定为有单位来体现(M,b)该怎么惩罚呢?这即将用到 –X
选项了。-X 前边与一个参数,参数值
     
     范围是 -18、-15、-12、-9、-6 、-3、0、3、6、9、12、15、18 。0
代表因原值显示,3 表示数值除以1000,也便是坐 k 为单位出示,6 就是盖
     
     M 显示,9 就是以 G 展现。即使你让来1要2,则 RRDtool
也得承受,但会吃“静悄悄”的改为0。下边就是一个因原值(-X
0)呈现的事例

图片 24

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

运用RRDtool 举办绘图_(三)

**********************************************************************************************************************
注 :该科目参考了如下内容 :
A)官方文档 :http://oss.oetiker.ch/rrdtool/doc/index.en.html
B)abel 兄的大作
http://bbs.chinaunix.net/viewthread.php?tid=552224&highlight=rrdtool
               
http://bbs.chinaunix.net/viewthread.php?tid=552220&highlight=rrdtool
作者 :ailms <ailms{@}263{dot}net>
版本 :v1
说到底修改 :2006/11/17 17:35
**********************************************************************************************************************

九、 其他(Miscellaneous)

  1. [-n|–font FONTTAG:size:[font]]
  2. [-g|–no-legend]
  3. [-b|–base value]

复制代码

A)-n | –font 是一个妙不可言的精选项。CU 的 abel 兄曾提供了一个中文 patch
可以兑现亮粤语的职能。但对此自即刻相当于对 C
一窍不通的兵器,就非精晓怎么用了。

    然而幸而 –n
选项可以实现之目的,只需要粤语字体的文本就可以为定了。

     首先你要摸索来一个华语的书文件。例如/usr/share/fonts/zh_CN/TrueType/gkai00mp.ttf
。你呢足以管 Windows 上的 C:\Windows\Fonts 上面的丁
     
     文字体拷贝到 Linux 上,例如home/bob/Fonts/simhei.ttf
(大篆)效果不错,其他的即便无太行,会现出模糊或者重叠的意况。指出就下草书算了。

     其次是确定字体大小。闽南语字体不宜小于 7
,否则看不清楚

     确定你假如改的凡图片的卓殊有。有
DEFAULT(全部),TITLE
(标题)、AXIS(坐标轴字体)、UNIT(Y轴单位字体)、LEGEND(图例字体)二种植。

上面就为实际的例证来阐明什么呈现中文 :

实例1 :使用 –n 让 RRDtool 显示粤语

  1. [root@dns1 bob]# rrdtool graph 4.png \
  2. > -n TITLE:10:’/home/bob/Fonts/simhei.ttf’ \                #
    修改标题的书体为仿宋
  3. > -n AXIS:10:’/home/bob/Fonts/simhei.ttf’ \                #
    修改 X 轴的字体为大篆
  4. > –start now-240000 \                # 大于3龙之数据
  5. > DEF:value1=eth0.rrd:eth0_in:AVERAGE \
  6. > AREA:value1#00ff00:in -t “33刻钟前之 eth0 接口流量” -v
    “traffic”
  7. > -Y –w 600        # 图表宽度为 600 pixel
  8. 503×190
  9. [root@dns1 bob]#

复制代码

就即是终极之意义了,可以观察题目和 X 轴都是华语的,但 Y
轴的字体依然默认的字体。

图片 25

B)-g |–no-legend 用于废除图表下方的图例,不过不指出如此做。

C)-b|–base value 在 MRTG 和 RRDtool 中,默认 1k=1000 ,使用 –b
可以开展调整,例如 –b 1024

十)数字报表

看看上边的图片,是不是看还掉了数什么呢?对了,就是只是暴发图,没有文字表达。咋样象
MRTG 这样会显得“最老价值”、“平均值”、“当前价”呢?

即时即使需要用到 GRPINT 和 COMMENT 语句子了。
GPRINT
就是在图纸的江湖(依旧属于图片的内)输出最深价值、最小值、平均值这个东东;COMMENT
就是之所以来输出一些字符串,例如报表的表头。

A)GPRINT的格式是GPRINT:vname:CF:format 。由于 format
部分极端多参数了,我这边就用最好常用的不可开交 : %x.ylf 。

B)COMMENT 的格式是COMMENT:text 。要顾 COMMENT
默认是未出口换行的,尽管假定出口换行,必须用 “\n” 。

下就因为一个实例来验证什么打印表格 :
绘制1时前之流量图,并打印数字报表(参照 abel 兄给来的事例)

  1. [root@dns1 bob]# rrdtool graph 1.png \
  2. > –start now-1h -w 600 -n DEFAULT:8 \
  3. > DEF:value1=eth0.rrd:eth0_in:AVERAGE \
  4. > DEF:value2=eth0.rrd:eth0_out:AVERAGE \
  5. > COMMENT:” \n” \
  6. > COMMENT:”       
     当前值————–平均值————–最大值————–最小值————–\n”
                               > COMMENT:” \n” 
  7. > AREA:value1#00FF00:”流入” \
  8. > GPRINT:value1:LAST:’%13.2lf’  \
  9. > GPRINT:value1:AVERAGE:%13.2lf  \
  10. > GPRINT:value1:MAX:%13.2lf  \
  11. > GPRINT:value1:MIN:%13.2lf  \
  12. > COMMENT:” \n” \
  13. > LINE2:value2#ff0000:”流出”:STACK \        # 注意这里是 STACK
    形式
  14. > GPRINT:value2:LAST:%13.2lf  \
  15. > GPRINT:value2:AVERAGE:%13.2lf  \
  16. > GPRINT:value2:MAX:%13.2lf  \
  17. > GPRINT:value2:MIN:%13.2lf  \
  18. > COMMENT:” \n” \
  19. > COMMENT:” \n” \
  20. > COMMENT:”LAST UPDATED \:$(date ‘+%Y-%m-%d %H\:%M’)\n” -Y
  21. 687×270
  22. [root@dns1 bob]#

复制代码

图片 26

只顾相比 Y 轴刻度值和“流出”部分的价值的涉及, Y
轴刻度值 —“流入” =“流出”

出于时日精力有限,关于对齐方面的劳作便我们温馨试吧.如果绘制的对象数量不是多,可以据此横向报表,不要用这种垂直的格式,

这种格式的利益是福利相比各种对象的价值。但是自己得以毫无疑问,怎么样为那多少个数字与方的表头对合是一个会合让而无限抓狂的办事的!!!

方的  COMMENT 一凡出口表头,二凡出口空行。注意,要为此 COMMENT
输出空行,必须用 COMMENT:’ \n’ 。

注意到 ‘\’ 前边的空格吗?那几个是勿可以渗透的,否则就未会见发空行的效率了。

十一)特殊功效

  1. VRULE:time#color[:legend]
  2. HRULE:value#color[:legend]
  3. SHIFT:vname:offset

复制代码

A)VRULE/HRULE
可以用于在图片上边绘制垂直线/水平线。例如咱们怀想使当图纸下面标最酷价值,可以就此
HRULE 在 Y 轴的指定刻度值

    这里绘制一完完全全水平线,例如 HRUE:100000#ff0000:”最深价值” 在 100k
处画一干净水平线,并提议这是极其特别价值。

图片 27

SHIFT 可以据此来运动数据,例如 abel 兄曾经于 “[教學]面临之教學(二) RRDTOOL
1.2 更新項目”中涉及过一个问题,

即便是“xx同期相比较”怎么着画?下边就盖怎么样相比3天的数额。

实例1 :绘制连续3龙的数据

  1. [root@dns1 bob]# rrdtool graph 1.png \
  2. > DEF:value1=eth0.rrd:eth0_in:AVERAGE:end=now:start=now-1d \   
                # 1天前
  3. > DEF:value2=eth0.rrd:eth0_in:AVERAGE:end=now-1d:start=now-2d
    \                # 2天前
  4. > DEF:value3=eth0.rrd:eth0_in:AVERAGE:end=now-2d:start=now-3d
    \                # 3天前
  5. > LINE1:value1#00ff00:”1 day ago” \
  6. > LINE1:value2#ff0000:”2 days ago” \
  7. > LINE1:value3#000000:”3 days aog” \
  8. > -Y
  9. 475×168
  10. You have new mail in /var/spool/mail/root
  11. [root@dns1 bob]#

复制代码

图片 28

为啥只暴发1天前的数码吧?因为我们从不点名 –-start ,RRDtool
默认只绘制1龙前之多少。由于此地挂了3上,

从而大家得以把 –-start 定义为 –-start now-3d 就得了。

图片 29

今日是勿是3上的数额还写出来了为?不过鉴于其是横向排的,所以要于和个时间段的连无便于,能否将她

遵照“垂直”的方排列呢?那就要用到 SHIFT 了!

  1. [root@dns1 bob]# rrdtool graph 3.png \
  2. > DEF:value1=eth0.rrd:eth0_in:AVERAGE:end=now:start=now-1d \   
                # 1天前
  3. > DEF:value2=eth0.rrd:eth0_in:AVERAGE:end=now-1d:start=now-2d
    \                # 2天前
  4. > DEF:value3=eth0.rrd:eth0_in:AVERAGE:end=now-2d:start=now-3d
    \                # 3天前
  5. > LINE1:value1#00ff00:”1 day ago”  \                           
                                        
  6. > SHIFT:value2:86400 LINE1:value2#ff0000:”2 days ago” \       
                    # 把曲线向左侧走1天
  7. > SHIFT:value3:172800 LINE1:value3#000000:”3 days ago” \       
                    # 把曲线向右侧走2上
  8. > -Y –w 600
  9. 475×168

复制代码

[root@dns1 bob]#

图片 30

及方面的图形相比,是否可以发现 X
轴不同了,不再是3天,而是1上多1接触了。而且3绝望曲线重叠在一齐了,可以看在及时三天遭遇,

优秀1天前之23接触左右来几许流量之外,其它绝大部分还没有流量。

当即便是 SHIFT 的功用了,可以将曲线/方块沿着 X
轴移动(左右且可以),我们达成相比较同期数据的目标。是不是老好用吧?

十二)总结

本次的始末而真的够多的,足足写了19页。可是工具性的物就是这么 :别看内容
N多,你若入手画出1个图后,就会合认为一

切都卓殊简短了。以后只要套用就可了。关键是安更好之将您想使的数目为适量的关你是表现出来。

上边这么些内容仍然自己通过实验得出的,由于具体的环境不同,可能相会以及我们之两样,或者现身错误。我梦想我们不要客气,有错

的地点就指正,有啊好之意识也领到出来,一起到 RRDtool
的文档。这样即便足以让更多之人头询问、领会 RRDtool 了 。   

(^_^)!

 

 

 

 

 

 

 

 

 

 

 

 

 

RRDtool简体粤语课_9:如何以RPN
何以使RPN

**********************************************************************************************************************
注 :该课程参考了之类内容 :
A)官方文档 :http://oss.oetiker.ch/rrdtool/doc/index.en.html
B)abel 兄的大作
http://bbs.chinaunix.net/viewthread.php?tid=552224&highlight=rrdtool
               
http://bbs.chinaunix.net/viewthread.php?tid=552220&highlight=rrdtool
作者 :ailms <ailms{@}263{dot}net>
版本 :v1
末段修改 :2006/11/17 17:35
**********************************************************************************************************************

一)前言

RPN 代表逆波兰式(Reverse Polish Notation)。逆波兰式最早让1920年由Jan
Lukasiewicz 发明,最神奇之地点是由此它来表示数学表明式,

统统不需要括号。而且 RPN
不像一般的数学表明式这样,操作符在操作数的高中级,而是以操作数的右手。例如
3+2 用 RPN 表示虽是 3,2,+ ;

3+(2X5) 用 RPN 表示虽是 3,2,5,x,+
最后运算的部分(加法部分)的操作符放在最终,乘号在眼前,表示先实施 2 x
5 ,在拿结果与3相加。

每当 RRDtool 中,RPN 还是可以够用来表示 if-then-else
关系。那点当绘图中分外有由此。例如你若扣 eth0 接口在同一龙当中流量 ≥ 10Mb/s
的部分,“隐藏”

此外低于 10Mb/s 的有的,则可就此到者意义。

二)操作符

什么是 RPN

A)RPN 是 Reverse Polish Notation
的缩写,是用以表示算术运算和逻辑运算的同一种植语法格式。

B)RRDtool 的 CDEF 语句子被便平时采纳 RPN 来针对 DEF
取出来的数据开展演算。

C)RPN
的特色是操作数和操作符出现的相继及运算的逐一一致,这样尽管不需要用括号了

D)RPN 的格式是 <value1>,<value2>,<operator>
,[<value1>,<value2>,<operator>]…
可以看到是操作数在前面,操作符在后底格式

E)RPN 需要提到堆栈的定义(stack)。堆栈是用来存储操作数和操作符的。

F)当仓库中压入(push)一个操作符时,就从仓库中取出(pop)所用的操作数举行总括(依照操作的两样pop出不同数额之操作数)。
  
     结果更回去(push)堆栈,最后整 RPN
应该就回一个价值,或者说堆栈中特来一个元素

G)在 CDEF 中书写 RPN 操作符,要一律为大写的格式出现

H) RPN 中,要是某部分的演算结果非 0,则叫当是 true ,唯有 0
才让认为是 false 

老三)RPN 操作符的分类

A)布尔操作符 :GT、GE、LT、LE、EQ、NE、

B)特殊值相比较符 :UN、ISINF、

C)条件操作符 :IF

D)相比操作符 :MIN、MAX、LIMIT

E)算术操作符 :+ 、-、*、/、%、SIN, COS, LOG, EXP, SQRT、FLOOR,
CEIL、ATAN、ATAN2、DEG2RAD, RAD2DEG

F)数据集操作符
:所谓数据集(sets),就是依靠多单数据。SORT、REV、AVG、TREND

G)特殊值 :UNKN、INF、NEINF、PREV、COUNT

H)时间操作符 :NOW、TIME、LTIME

I)堆栈操作符 :POP、DUP、EXC

季)RPN 操作的结果

A)布尔操作符 :从仓库中 pop 出些许独因素,并冲相比较结实回到 0 (false)
或者 1 。任何和 UNKNOWN 或者 INF 、NEINF 相比的还也 0

B)特殊值相比较符 :从仓库中 pop 出1只要素,并同 UNKNOWN 或者 INF、NEINF
相比。结果为 0 或者 1

C)条件操作符
:从仓库中pop出3独因素,假若最后pop出之深元素不也0(条件有也
true),则第2差 pop 出的大元素让重复入栈(then部分);

     否则第一破pop出之要素还入栈(else部分)。结果为 then 部分要
else 部分归的价值,不自然为0或者1

D)相比较操作符 :

     对于 MIN/MAX 操作符来说,从仓库中 pop
出片只操作符,并把于大/小的那么些重入栈。固然内部起一个 unknown
,则结果也 unknonw

     对于 LIMIT 操作符来说,先从仓库中 pop
出2个操作数,作为边界的定义;再 pop
出1只操作数,相比较该操作数是否拿走于眼前定义的限外。
     
     假使是则把最后 pop 出之挺元素还入栈;否则将 UNKN
值入栈;注意,是 UNKN ,不是 0

E)算术操作符 :遵照操作符 pop
出所欲数之操作数,并把算术运算的结果再次入栈

F)数据集操作符 :

    对于 SORT、REV 来说,先从仓库中 POP 出一个要素,该因素的价就是是下面要
pop 出底素的数量。然后针对仓从上到下的若干只要素
    
   由第一破 pop
的爆发之特别元素的值决定)举行排序/反朝排序。结果再又入栈。

   注意
:由于堆栈的特色是后进先出,所以一旦操作的素是于SORT操作符往左方向计数。例如v1,v2,v3,v4,3,SORT是对准
v2~v4 排序,
   
            不是对 v1~v3 排序。  这一点在书 RPN 时若特别注意。

   注意 :SORT 操作是卓殊小值当库房的尽顶部;REV
则相反,最小值是在仓库的太顶部。

   对于 AVG 操作来说,同样是预先 pop
出1只要素,并遵照指定的数目对延续的好四个操作数举办操作,但结果唯有生一个数值,并入栈。

G)特殊值 :

    UNKN 表示压入一个 UNKN 值;INF、NEINF 分别代表管 INF、NEINF
值压入堆栈

H)时间操作符 :

   TIME 再次回到时所取的记录的 timestamp ,注意 TIME 直接归时记下之
timestamp ,不用别样参数

   NOW 再次来到时日,同样 NOW 不用外参数

I)堆栈操作符 :

   POP :弹出堆栈的无比顶部的不行元素

  EXC :交换堆栈顶部的率先独及次独要素的值

五)怎么样阅读 RPN

A)首先以从左到右的相继,找来第一个 RPN
操作符,并依据达一致节省的情节,对相应的操作数实行操作

B)操作结果分成两栽 :

        倘使是一个价,间接互换掉该有 RPN 

        假如是多独价值(数据集操作,但 AVG
操作才回一个价值),则结果或者啊多单数值。则拿当时四只数值用 ‘,’
隔开,替换原来那么有 RPN 

C)如此循环往复,一贯顶周 RPN 只回一个值停止

六、RPN 实例

A)布尔型操作符 :2,1,GE 表示 2>=1 ;

B)特殊值相比较符 :mydata,UN 代表 mydata == UNKNOWN 

C)条件操作符 :mydata,UN,0,mydata,IF 表示要是 mydata 等于 UNKNOWN
,则回 0;否则要回到 mydata 本身

D)相比操作符 :mydata,20,MAX 表示回去 mydata,20
这有限单数值中比生之一个;alpha,0,100,LIMIT 代表测试 alpha
的值是否低于等于0,大于等于100;

E)算术操作符 :1,2,- 代表 1-2=-1

F)数据集操作符 :

    v1,v2,v3,v4,v5,4,SORT 表示对 v1~v4
进行正向排序,结果堆栈中尚是发生5只因素;

    v1,v2,v3,v4,3,AVG,+,2,/ 表示对 v4,v3,v2
进展呼吁平均值,并拿结果入栈。假使v2~v4的结果吧 k ,则为 v1,k,+,2,/
也便是回到 (v1+k)/2

G)特殊值 :mydata,0,GT,UNKN,mydata,IF 代表只要 mydata 大于 0则归
UNKNOWN ,否则如故 mydata 

H)时间操作符 : TIME,`date –d “2006-10-01 10:00” +%s`,GT,0,1,IF
代表只要手上记录的搜集时间是以 2006-10-01 10:00 之后就是赶回1,否则回
0

I)堆栈操作符 :POP 就立即弹来第一个因素

七)怎样表示 AND、OR 关系

A)我们理解 RPN 表达式的值除非0,否则都当是 true

B)我们可以用 加法操作以及乘法操作来兑现 OR 和 AND 的逻辑关系;假诺少只
RPN 表明式的价值相加不等于0,就决然为 true ;

     假设少单 RPN 表明式的值相乘不等于0,就必将也 true

C)AND 关系之例子 :例如要比某个只价(15,9)是否以一定范围外得以用 :

    15,10,GT,15,20,LT,* ,结果虽是(15>10)*(15 < 20)= 1 * 1
=1 ,所以为 true

     9,10,GT,9,20,LT,* ,结果就是是 (9 >10)* ( 9 < 20)= 0 * 1
=0 ,所以为 false

D)OR 关系的例子:同齐像要相比较某个只价值(7,15)小于10,或者高于20:

     7,10,LT,7,20,GT,+ ,结果为 (7 < 10)+ (7 > 20) = 1+0 =
1,所以为 true

     15,10,LT,15,20,GT,+ ,结果为 ( 15 < 10) + ( 15 > 20) = 0 + 0
=0 ,所以为 false

E)不过使用 + 需要小心一个地方:相加的两端都须是正数,否则可能出现问题,例如一个正数(-5,true)和另外一个正数(5,true)相加为
0(false)

        假如是随 OR 的关系,应该是 true
的,但结果变成0(false),所以在用 + 来表示 OR
的干时,要顾该问题

F)使用 * 则没有拖欠问题了,正数 * 负数 = 负数 (true)。所以一旦遇上 OR
关系的当儿,可以变换为 AND 关系来测算。

     例如要发挥 (x < a) OR ( x > b) 的干,可以转吗 (x >a) AND
( x < b ) ,诀窍就是管比较操作符调反方向,把 + 改也 *

八)实例

实例1:例如要扣押 eth0的总流量,可以为此如下的定义
                        

  1. DEF:value1=eth0.rrd:eth0_in:AVERAGE \
  2. DEF:value2=eth0.rrd:eth0_out:AVERAGE \
  3. CDEF:value3=value1,value2,+ \
  4. AREA:value3#ff0000:”total”

复制代码

实例2 :假如我们若将 eth0 和 lo 的注入流量相加,得出总的流入流量

  1. DEF:value1=eth0.rrd:eth0_in:AVERAGE \
  2. DEF:value2=lo.rrd:lo_out:AVERAGE \
  3. CDEF:value3=value2,UN,0,value2,IF \
  4. CDEF:value4=value1,value3,+ \
  5. AREA:value4#00ff00:”total in”

复制代码

是因为 lo.rrd 一向没数据插入,所以平素都是 NaN ,假如直白拿 value1 和
value2 相加,由于 value2 是 UNKNOWN,

因此相加的结果吧是 UNKNOWN 。图表上拿什么还无出示,所以待对 value2
举办判定,假如 value2 的值 UNKNOWN        (value2,UN),

虽说回回0,否则回 value2 本身。然后拿此价值与变量 value3 ,最终将
value1 和 value3 相加,才得有真正入流量

实例3 :只看 eth0 中流量大于 10Mb/s 的部分,另外不看
                        

  1. DEF:value1=eth0.rrd:eth0_in:AVERAGE \
  2. DEF:value2=eth0.rrd:eth0-_out:AVERAGE \
  3. CDEF:value3=value1,1000000,GT,value1,UNKN,IF \
  4. CDEF:value4=value2,1000000,GT,value2,UNKN,IF \
  5. AREA:value3#00ff00:”traffic_in \> 10M\/s” \
  6. AREA:value4#ff0000:”traffic_out \> 10Mb\/s”:STACK

复制代码

实例4 :只绘制特定时间段(在 2006/11/29 10:30 ~ 2006/11/29
12:30)的数据

  1. DEF:value1=eth0.rrd:eth0_in:AVERAGE \
  2. DEF:value2=eth0.rrd:eth0_out:AVERAGE \
  3. CDEF:value3=TIME,$(date –d ‘2006-11-29 10:30’ +%s),GT,TIME,$(date –d
    ‘2006-11-29 12:30’ +%s),LT,*,value1,UNKN,IF \
  4. CDEF:value4=TIME,$(date –d ‘2006-11-29 12:30’ +%s),GT,TIME,$(date –d
    ‘2006-11-29 13:30’ +%s),LT,*,value2,UNKN,IF \
  5. AREA:value3#00ff00:”traffic_in” \
  6. AREA:value4#ff0000:”traffic_out”:STACK

复制代码

九、完结

深信不疑到近期截止,我们对 RRDtool
的认该再特别了咔嚓。一定要多开实验,这样才可以成就熟能生巧,灵活利用。

骨子里剩下的还有 xport、dump、restore、resize、tune、rrdcgi
几个操作没有言语,而且发生局部采纳经验者的事物啊无涉嫌,

只是想要全体写出来,可能太耗时间以及生机了,这么些东西足足写了自身2单周五才写了。中间还要持续的开试验以验证正确性,怕误导了豪门。

假定需要的话,可以友善下充斥官方文档学习,或者会暴发热心的心上人补充就更好了,^_^

十、 本人的一些就学体会

  本人于起头看 RRDtool 官方文档到起写就首教程,差不多用了2个月。
RRDtool 比上学 MRTG 难多矣,资料少,RRDtool 的华语资料时虽然只有 abel 

兄写的这无异首教程,假诺无实际的上机操作,是勿可能看懂的,所以 abel
兄也专程交代这点。倘使单单一心想速成,到头来反而吃亏的凡祥和。

   象sendmail、bind 这多少个服务器的配备,随便在 google
上且可搜到均等相当把所谓的“急速入门”,很两个人口吗都遵守在开了。但眼看人家可以的,为啥轮至祥和
   
也难倒为?相信就是多多益善人内心已经有的郁闷经历。其实到头来就是基础的题目,再深切部分便是读心态之问题。“不积跬步,无以至千里;不积小流,无以成江海”。

布置一个服务器并无是抄配置就可以的。环境的不等,需求的异这个要素都如考虑在内。怎么可能得完全一致啊?同一个谈换个环境或就是好了。所以我分外

不见看这一个所谓的高效入门,要么看 manual ,要么看开(说及这里,感觉
O’Reilly 的开真是对!^_^),假使是象
RRDtool这种的,就不得不看官方文档了。
   
  学习之又为使注意接纳好之讲义。有时候一随好题可以带来吃无穷的裨益。这一点在自我首先次看
O’Reilly 的 《dns & bind 4th》就起发,老外的开非凡珍贵循序渐进,
  
便他们仍旧打某实际工作条件之一个有些例子说从,逐渐引入各类命令、配置语句。然后就需求的恢宏,不断引入新的情,最后形成一个完好无缺。这样看了后会师内心会

发出一个完整的框架和概念。不象国内有书写,毫不顾及条理,一达成来虽然开口语法、命令,搞得读者很快都无兴趣。这样的写可谓害人不浅。

 
 同时也提出我们诵读英文原版的书写。为啥吧?即便闽南语的羁押起快一些,但上学不是竞走比赛。不是相比较什么人看之抢,而是相比较何人模仿的耐用。英文书的歌词汇其实都是正规词汇,

倘使看多了,自然记住了。实在记不住,可以据此金山词霸等工具帮忙。俺的英文水准才生二级,但并无伤我看开。况且看英文书,有一个“英文→闽南语”的换的历程。就

是研讨作者就词话的意思,或者说就句话应该怎样翻译好。有些人看这没有啊,但我道是历程是您弄清作者想的首要性步骤。在你连的啄磨中,可能会师来例外

的通晓,直到你当当下是太科学的那么同样种说了。假如是圈粤语书,可能会晤出于惰性,比较易于就承受笔者的想法,而去这主动自己考虑的历程。

  一时有谢而发,胡乱写了平连着,请各位朋友见谅了。

  书山有路勤为径,学海无涯苦做舟!

   愿以该座右铭和各位有志于Linux的情侣一起共勉!

  2006/12/2 22:23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

末端是次各项老兄的实例:http://freeloda.blog.51cto.com/2033581/1307492/

 

 

 

大纲

一样、MRTG的不足及RRDTool相比

二、RRDTool概述

三、安装RRDTool

季、RRDTool绘图步骤

五、rrdtool命令详解

六、RRDTool绘图案例

横流,实验环境 CentOS 6.4 x86_64,软件版本
rrdtool-1.3.8(最新版本的是1.4.8)。(表达:本博文的片段图和内容从为开源社区与官方网站并无是兼具内容都是原创)

 

一致、MRTG的阙如和RRDTool相比

1.MRTG软件之贫

MRTG监测网络流量很方便,然而假若欲监测其他的系统特性,比如CPU负载、系统负荷、网络连接数等,就无是那么简单了。即使实现了这一个效应,但管制起很费劲。比如集团发一两千单被监测点,分布于不同之机房,为了管住好用拿这几个服务器和网络设施分类,这样的话就需以这一个让监测点放在不同的MRTG配置文件中,运行三只crontab,甚至还要自己写HTML页面对那展开田间管理。

 

MRTG毕竟是同一仿照好老的软件,而且在很多欠缺之地方,其作者Tobias(Tobias)Oetiker在1999年即令都最先开发另一样套开源软件RRDTool来代替MRTG。现在RRDTool已经提高得可怜熟,在职能MRTG难以与该相提并论。

 

2.RRDTool与MRTG对比

以及MRTG一样,RRDTool也是由于TobiasOetiker撰写之开源软件,但RRDTool并非MRTG的提升版本,两者发生特别深的分,也得说RRDTool是用为此来取代MRTG的制品。上边是简单个软件之片优缺点的相持统一。

 

(1).MRTG

优点

  • 简单易行、易达亲手,基本安装完毕了以后假诺修改一下配备文件即可使用。

缺点

  • 下文本式的数据库,数据未克重复使用。

  • 不得不按日、周、月、年来查阅数据。

  • 鉴于MRTG本来只是用来监测网络的流量,所以只可以存储三只DS(Data
    Source),即存储流量的输入和输出。

  • 每取一糟糕数据就用绘图一蹩脚,浪费系统资源。

  • 图像于模糊。

  • 无论用户、图像管理职能。

  • 不曾详尽日志系统。

  • 没辙详细精晓每流量之三结合。

  • 只得用来TCP/IP网络,对于SAN网络流量无能为力。

  • 莫可以以指令行下工作。

     

 

(2).RRDTool

优点:

  • 用RRD(Round Robin
    Database)存储格式,数据等在数据库中,可以一本万利地调用。比如,将一个RRD文件被的数与外一个RRD文件中之数目相加。

  • 得定义任意时间段写图,可以据此半年数画一张图,也得就此半小时内的数量画一布置图。

  • 会画任意个DS,多种图纸显示模式。

  • 数据存储和绘图分开,减轻系统负荷。

  • 会轻易处理RRD文件被的数量,比如,在浏览监测着我们要用数据由Bytes转化为bits,可以拿原有数据乘8。

缺点:

  • RRDTool的用意只是存储数据与画,它从未MRTG中并的多寡搜集效用。

  • 于命令行下的运非凡复杂,参数极多。

  • 不论用户、图像管理效果。

RRDTool官方网站:

http://oss.oetiker.ch/rrdtool/

 

二、RRDTool概述

1.概述

RRDtool 代表 “Round Robin Database tool” ,作者又为是 MRTG
软件之发明人。官方站点位于http://oss.oetiker.ch/rrdtool/ 。 所谓的“Round
罗布(Rob)in”
其实是平等种植存储数据的不二法门,使用一定大小的半空中来囤积数据,并生一个指南针指向最新的数码的地点。我们得以把用于存储数据的数据库的上空作为一个两全,下面有多刻度。那多少个刻度所当的职务就意味着用于存储数据的地方。所谓指针,能够认为是打圆心指向这么些刻度的一样长长的直线。指针会趁机数据的读写自动移动。要顾的凡,那个到没有起源和极端,所以指针可以平素倒,而非用担心达终点后便无法前行的题材。在一段时间后,当所有的长空还怀着满了数据,就同时从头最先存放。那样一切存储空间的轻重就是一个恒定的数值。所以RRDtool
就是以类之点子来存放数据的家伙, RRDtool
所利用的数据库文件的晚缀名是’.rrd。如下图,

图片 31

2.特点

  • 先是 RRDtool 存储数据,扮演了一个后台工具的角色。但又 RRDtool
    又同意创设图表,这令RRDtool看起而如是前者工具。其他的数据库只可以存储数据,不可知成立图表。

  • RRDtool 的每个 rrd
    文件之高低是原则性的,而普通的数据库文件之大小是乘年华而扩大的。

  • 其它数据库只是被动之纳多少, RRDtool
    可以针对收取的数目开展测算,例如前后五个数据的更动程度(rate of
    change),并储存该结果。

  • RRDtool
    要求定时获取数据,其他数据库则没拖欠要求。倘诺当一个时刻间隔内(heartbeat)没有收取值,则会就此
    UNKN (unknow)代替,其他数据库则免碰面这么。

 

三、安装RRDTool

1.安装yum源

1
2
[root@node1 ~]# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@node1 ~]# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

2.合办时间

1
[root@node1 ~]# ntpdate 202.120.2.101

3.下载rrdtool的RPM包

1
[root@node1 ~]# wget ftp://195.220.108.108/linux/centos/6.4/os/x86_64/Packages/rrdtool-1.3.8-6.el6.x86_64.rpm

4.yum安装rrdtool

1
[root@node1 ~]# yum -y localinstall --nogpgcheck rrdtool-1.3.8-6.el6.x86_64.rpm

5.翻转安装文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@node1 ~]# rpm -qa | grep rrdtool
rrdtool-1.3.8-6.el6.x86_64
[root@node1 ~]# rpm -ql rrdtool
/usr/bin/rrdcgi
/usr/bin/rrdtool #命令行工具
/usr/bin/rrdupdate
/usr/lib64/librrd.so.4 #下面是库文件
/usr/lib64/librrd.so.4.0.7
/usr/lib64/librrd_th.so.4
/usr/lib64/librrd_th.so.4.0.7
/usr/share/man/man1/bin_dec_hex.1.gz #下面是帮助文档
/usr/share/man/man1/cdeftutorial.1.gz
/usr/share/man/man1/rpntutorial.1.gz
/usr/share/man/man1/rrd-beginners.1.gz
/usr/share/man/man1/rrdbuild.1.gz
/usr/share/man/man1/rrdcgi.1.gz
/usr/share/man/man1/rrdcreate.1.gz
/usr/share/man/man1/rrddump.1.gz
/usr/share/man/man1/rrdfetch.1.gz
/usr/share/man/man1/rrdfirst.1.gz
/usr/share/man/man1/rrdgraph.1.gz
/usr/share/man/man1/rrdgraph_data.1.gz
/usr/share/man/man1/rrdgraph_examples.1.gz
/usr/share/man/man1/rrdgraph_graph.1.gz
/usr/share/man/man1/rrdgraph_rpn.1.gz
/usr/share/man/man1/rrdinfo.1.gz
/usr/share/man/man1/rrdlast.1.gz
/usr/share/man/man1/rrdlastupdate.1.gz
/usr/share/man/man1/rrdresize.1.gz
/usr/share/man/man1/rrdrestore.1.gz
/usr/share/man/man1/rrdthreads.1.gz
/usr/share/man/man1/rrdtool.1.gz
/usr/share/man/man1/rrdtune.1.gz
/usr/share/man/man1/rrdtutorial.1.gz
/usr/share/man/man1/rrdupdate.1.gz
/usr/share/man/man1/rrdxport.1.gz
/usr/share/rrdtool

6.查看转命令行工具

1
2
3
4
5
6
7
8
9
10
[root@node1 ~]# rrdtool -h
RRDtool 1.3.8 Copyright 1997-2009 by Tobias Oetiker <tobi@oetiker.ch>
        Compiled Aug 21 2010 10:57:18
Usage: rrdtool [options] command command_options
Valid commands: create, update, updatev, graph, graphv, dump, restore,
    last, lastupdate, first, info, fetch, tune,
    resize, xport
RRDtool is distributed under the Terms of the GNU General
Public License Version 2. (www.gnu.org/copyleft/gpl.html)
For more information read the RRD manpages

注,使用 man rrdtool
可以翻详细的下方法。好了,到此地我们就设置好了,上边我们来说一下RRDTool的绘图步骤。

 

季、RRDTool绘图步骤

图片 32

步骤同︰建立RRD文件,这多少个文件说来就是RRDtool的隶属数据库。RRDtool以从有的格式存放数据。下边会教!

手续二︰抓到手几个人认为是一切RRDtool最辛劳的均等有,因为RRDtool的数额是假诺拄自己于开立RRD数据库时定义出来,不像MRTG内修筑抓数据成效,不过却因这么,可以为RRDtool画图的数据弹性也较十分,例如︰snmp查询结果、系统状态、网页遭到一定数据总计等等。

手续三︰将捉拿下去的多寡就是就此rrdtool
update的吩咐展开更新至之RRD数据库中,让图表能写生时的流量。

步骤四︰这即是根本啦!通过rrdtool
graph的命来冲RRD数据库的多寡举行绘图,这为是使用者唯一看之交之事物,若设计的不佳会影响使用者阅读上之辛苦!

循环︰由于要水到渠成动态绘图的图片,第二手续及第四手续必须不断的还执行因保持资料之换代,近年来清楚要达循环的措施来些许栽︰

  • 以Script中使循环

  • 接纳crontab任务计划

 

五、rrdtool命令详解

1.创建RRD数据库

create 语法

1
2
3
4
5
rrdtool create filename
[--start|-b start time]
[--step|-s step]
DS:ds-name:DST:dst arguments #最后获取的数据是PDP,更新数据时要考滤DS顺序(*把所有要更新的数据,按照DS定义的顺序用冒号格开*)
RRA:CF:cf arguments #最后获取的数据是CDP,绘图时使用的是这些数据

参数详解:

  • DS:DS 用于定义 Data Soure
    。也就是用于存放结果的变量名。DS是用来表明数据源的,也得以领略啊表数据变量,也就是你而检测的端口对应之变量名,这么些参数在图的时候还要采用的。

  • DST:DST 就是DS的门类。有 COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE
    5种植。由于网卡流量属于计数器型,所以这里应该为 COUNTER 。

  • RRA:RRA 用于指定数量怎么样存放。大家得拿一个RRA
    看成一个表,各保存不同 interval
    的总结结果。RRA的意向就是概念更新的多寡是如何记录之。比如我们各级5分钟暴发相同长长的刷新的数,那么一个时即是12长。每一天就是是288漫长。这么高大之数据量,一定不容许还怀着下来。肯定有一个集合(consolidate)数据的点子,那么这就是是RRA的意向了。

  • PDP:Primary Data Point 。正常意况下每个 interval RRDtool
    都汇合接收一个值;RRDtool
    在收取脚本给来的值后会算起其它一个值(例如平均值),这多少个 值就是
    PDP ;那些价代表的貌似是“xxx/秒”的意思。注意,该值不肯定当RRDtool
    收到的充裕值。除非是GAUGE ,能够扣押下边的例证就是领悟了

  • CF:CF 就是 Consolidation Function
    的缩写。也即是统一(统计)效率。有 AVERAGE、MAX、MIN、LAST
    四种植分别表示针对多独PDP
    举办得平均、取最好特别价值、取最好小价、取时价四种档次。具体意向相当于及
    update 操作时再说。

  • CDP:Consolidation Data Point 。RRDtool 使用六个 PDP
    合并为(总括出)一个 CDP。也固然是履行方 的CF
    操作后底结果。这多少个价值就是是存入 RRA的数码,绘图时以的也罢是那么些数量

 

脚是RRA以及PDP、CDP之间的涉图,

图片 33

(0).filename

默认是以 .rrd 结尾,但也盖本你设定。

 

(1).–start|-b start time

设定RRD数据库插手的第一单数据值的年月,从1970-01-01 00:00:00
UTC时间吧的岁月(秒)。RRDtool不汇合经受早于或当指定时刻上之另数值。默认值是now-10s;倘使update 操作中吃出底时空以 –-start 在此之前,则 RRDtool拒绝接受。–satrt
选项也是可选的。 假如您想指定–start 为1龙前,能够用CODE:–start $(date
-d ‘1 days ago’ +%s)。注意,–start 选项之值必是 timestamp 的格式。

 

(2).–step|-s step

点名数量将被填入RRD数据库的中坚的流年距离。默认值是300秒;

 

(3).DS:ds-name:DST:dst arguments DS(Data Source)

DS:DS 用于定义 Data Soure 。也就是用于存放结果的变量名。
DS是故来表达数据源的,也堪领悟啊表数据变量,也便是你假如检测的端口对应之变量名,这多少个参数在美术的时候还要使的。这里开定义RRD数据的中央性;单个RRD数据库可承受来自几单数据源的输入。在DS选项中若吗每个需要在RRD中存储的数据源指定一些中坚的习性;ds-name数据域命名;DST定义数据源的色,dst
arguments参数依赖让数据源的种。

 

案例:DS:mysql:COUNTER:600:0:100000000

DS(Data Source,数据源)表明式总共暴发六单栏位:

  • DS 表示此啊DS表明式

  • ds-name 数据域命名

  • DST 定义数据源之类型

  • heartbeat
    有效期(heartbeat),案例里之价值吗’600’,假而要获取12:00之多寡,而左右300秒里之值(11:55-12:05)经过平分或取最好可怜仍然太小且算12:00底有效值;

  • min 允许存放的无限小价,此例允许最小为0。

  • max 允许存放的最老价值,最老吗100000000。

横流,假如未思只要限制好重新第五单栏位和第七只栏位以
“U:U”表示(U即Unknown)。

 

DST定义数据源之系列。数据源项的延续参数倚重让数据源的类型。对于GAUGE、COUNTER、DERIVE、以及ABSOLUTE,其数据源的格式为:
DS:ds-name:GAUGE | COUNTER | DERIVE | ABSOLUTE:heartbeat:min:max。DST
的精选是殊首要之,假使选错了 DST ,固然你的下边本取的数目是本着之,放入
RRDtool 后为是大错特错的,更不要提画出来的图是否暴发意义了。

  • GAUGE :GAGUE 和下边二种不同,它并未“平均”的概念,RRDtool
    收到值之后字节存入 RRA 中。

  • COUNTER :必须是与日俱增的,除非是计数器溢起。在这种情状下,RRDtool
    会自动修改收到的价值。例如网络接口流量、收到的packets
    数量还属于即同一路。

  • DERIVE:和 COUNTER
    类似。但可以是与日俱增,也可以递减,或者一会充实一会儿减去。

  • ABSOLUTE :ABSOLUTE
    相比奇特,它每便都如前一个interval的值是0,再计平均值。

  • COMPUTE :COMPUTE
    相比较特殊,它并无接受输入,它的概念是一个表明式,可以引用其他DS并自行测算出有值。例如CODE:DS:eth0_bytes:COUNTER:600:0:U
    DS:eth0_bits:COMPUTE:eth0_bytes,8,* 则 eth0_bytes
    每拿到一个值,eth0_bits 会自动统计起它的价:将 eth0_bytes 的值乘以
    8 。但是 COMPUTE 型的 DS 有个限,只好使它所于的 RRD 的 DS
    ,无法引用其他 RRD 的 DS。 COMPUTE 型 DS 是新本子的 RRDtool
    才有,你呢得以据此 CDEF
    来实现该功效。如:CDEF:eth0_bits=eth0_bytes,8,*

 

DST 实例证实,

Values = 300, 600, 900, 1200

#假设 RRDtool 收到4个值,分别是300,600,900,1200。 
Step = 300 seconds

#step 为 300 
COUNTER = 1,1,1,1

#(300-0)/300,(600-300)/300,(900-600)/300,(1200-900)/300
,所以结果吧 1,1,1,1 
DERIVE = 1,1,1,1 # 同上 
ABSOLUTE = 1,2,3,4

#(300-0)/300,(600-0)/300,(900-0)/300,(1200-0)/300,所以结果为
1,2,3,4 
GAUGE = 300,600,900,1200 # 300 , 600 ,900 ,1200
不举办运算,直接存入数据库。所以率先执行之 values 并无是
PDP,后边4行才是PDP。

 

下面我们来起一个RRD库文件,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@node1 ~]# rrdtool create eth0.rrd \
> --step 300 \
> DS:eth0_in:COUNTER:600:0:12500000 \
 # 600 是 heartbeat;0 是最小值;12500000 表示最大值;
> DS:eth0_out:COUNER:600:0:12500000 \
# 如果没有最小值/最大值,可以用 U 代替,例如 U:U
> RRA:AVERAGE:0.5:1:600 \
# 1 表示对1个 PDP 取平均。实际上就等于 PDP 的值
> RRA:AVERAGE:0.5:4:600 \
# 4 表示每4个 PDP 合成为一个 CDP,也就是20分钟。方法是对4个PDP取平均,
> RRA:AVERAGE:0.5:24:600 \ # 同上,但改为24个,也就是24*5=120分钟=2小时。
> RRA:AVERAGE:0.5:288:730
 # 同上,但改为288个,也就是 288*5=1440分钟=1天
[root@node1 ~]# ll -h eth0.rrd
-rw-r--r--  1 root   root     41K 10月 11 10:16 eth0.rrd

有的人或会晤咨询,上边来少单 DS,这 RRA 中究竟存的是深 DS
的多少也?实际上,那个 RRA 是国有的,你仅仅待建一个
RRA,它就足以用于所有底 DS 。所以在概念 RRA 时无需指定是叫老 DS
用的。

 

(4).RRA:CF:cf arguments

RRA的功效就是概念更新的数量是何等记录的。比如我们各5分钟有同样长条刷新的数目,那么一个时辰便是12漫长。每日就是288漫漫。这么大的数据量,一定非可能都满怀下来。肯定起一个集合(consolidate)数据的计,那么是就是RRA的用意了。如下图,

图片 34

RRD的一个目的是在一个环型数据归档中储存数据。一个归档有大气的数据值或者每个曾定义的数据源的总计,而且其是以一个RRA行中为定义的。当一个数目上RRD数据库时,首先填入到用
-s
选项所定义的宽窄的时隙中之数据,就改成一个pdp值,称为重要数据点(Primary
Data
Point)。该数额也会叫用该归档的CF归并函数进行处理。可以拿各类PDPs通过有聚合函数举办合并的联合函数有诸如此类三种植:AVERAGE、MIN、MAX、LAST等。这一个由并函数的RRA命令行格式为:RRA:AVERAGE
| MIN | MAX | LAST:xff:steps:rows。

 

什么是 CF?

以点的案例被第2单RRA 和 4,2,1,3 这4只 PDP 为例

  • AVERAGE :则结果也 (4+2+1+3)/4=2.5

  • MAX :结果吧4只数着的极可怜值 4

  • MIN :结果也4单数吃的绝小值1

  • LAST :结果为4独数惨遭之末段一个 3

同理,第三个RRA和第4个RRA则是每24个 PDP、每288个 PDP 合成为1个 CDP。

 

解释度(Resolution)

此地要提到一个 Resolution 的概念,在法定文档中多处涉嫌 resolution
一词。Resolution 究竟是呀?Resolutino
有啊用?举个例,假设我们若绘制1钟头之数,也就是60分钟,那么大家好打首个RRA
中取出12单 CDP 来绘图;也可于第2只 RRA中获有3独 CDP 来绘图。到底
RRDtool 会动十分也?让我们看一下 RRA 的定义 :RRA:AVERAGE:0.5:4:600 。

Resolution 就等于 4 * step = 4 * 300 = 1200 ,也就是说 ,resolution
是每个CDP 所表示的时空范围,或者说 RRA 中每个
CDP(记录)之间的时刻距离。所以首先单 RRA 的 resolution 是 1*
step=300,第2凡是 1200,第两个是 24*300=7200,第4个 RRA 是 86400 。

默认情形下,RRDtool 会自动采纳当的 resolution 的相当 RRA
的数量来绘图。大家大可不必关心她。但假如自己想得到特定 RRA
的数目,就需拔取它了。关于 Resolution 大家尚汇合以 fetch 和 graph
中涉嫌她。

 

xff 字段

有心人之情侣或会合发现,在 RRA 的定义着起一个数值,固定是 0.5
,这么些到底是什么东东为? 
本条名为 xff 字段,是 xfile factor 的缩写。让我们来拘禁她的定义 :

QUOTE:

The xfiles factor defines what part of a consolidation interval may be
made up from *UNKNOWN* data while 
the consolidated value is still regarded as known. It is given as the
ratio of allowed *UNKNOWN* PDPs to 
the number of PDPs in the interval. Thus, it ranges from 0 to 1
(exclusive)

此看起有些昏,大家举个简单的例子 :例如

CODE:RRA:AVERAGE:0.5:24:600

以此 RRA 中,每24单 PDP (共少刻钟)就合成为一个 CDP,假如就 24 独 PDP
中发生一些值是 UNKNOWN (原因可以多),例如1单,那么那CDP合成的结果是否就为 UNKNOWN 呢?

非是的,这如看 xff 字段而定。Xff 字段实际就是是一个比例值。0.5 表示一个
CDP 中的装有 PDP 即使跨越一半之值也 UNKNOWN ,则该 CDP
的价值就是给标为UNKNOWN。也就是说,假使24单 PDP中来12只或超越12独 PDP
的值是 UNKNOWN ,则该 CPD 就不可能合成,或者合成的结果吗
UNKNOWN;尽管是11只 PDP 的值也 UNKNOWN ,则该 CDP 的值等于剩下 13 独 PDP
的平均值。

若果一个 CDP 是发2个 PDP 组成,xff 为 0.5 ,那么要发生一个 PDP 为
UNKNOWN ,则该 PDP 所对应之 CDP 的值就是是 UNKNOWN 了。

 

2.办案到手多少

概括说,就是之所以shell写单脚论去不断的收集数据。对于非懂shell编辑的博友可以去网上找点资料学习一下,很粗略的。上面是接纳snmp来获取进入网卡的流量。

1
2
[root@node1 ~]# snmpget -v 2c -c public 192.168.18.201 ifInOctets.2
IF-MIB::ifInOctets.2 = Counter32: 57266195

点的例证是运用snmpget来逮捕到手192.168.18.201的网卡输入流量,-v
2c代表snmp版本号,-c public
snmp共同体名称,192.168.18.201凡及时尊主机的IP地址,ifInOctets.2是恃eth0网卡的输入流量,ifInOctets.1是指lo0网卡的输入流量。从者大家可以看出,eth0输入的流量为57266195。下面大家来截取一下输入流量,

1
2
[root@node1 ~]# snmpget -v 2c -c public 192.168.18.201 ifInOctets.2 | sed -e 's/.*ter32: \(.*\)/\1/'
57463513

咱收获的值吗57463513,这固然是我们假使之结果。我们若用shell脚本写单循环就可收集网卡的输入流量了,再就此rrdtool
update命令将采访至的数目更新到RRD数据库中即可。

自然,您不肯定要运用snmpget,也得采取snmpwalk、tcpdump等等抓取数据回来分析,说夸张点,凡是有浮动之数都可因此处理成大家假若之材料,然后画成图表。

 

3.更新RRD数据库数据

update 语法

1
2
3
4
rrdtool update filename [--template|-t ds-name[:dsname]...] N|timestamp:value[:value...]
filename RRD数据库文件名称
--template|-t ds-name[:ds-name] 要更新RRD数据库中数据源的名称,其中-t指定数据源的顺序
N|timestamp:value[:value...] 时间:要更新的值

案例:

1
2
[root@node1 ~]#rrdtool update eth0.rrd 1381467942:60723022 或
[root@node1 ~]# rrdtool update eth0.rrd N:60723022

其中,1381467942凡是近来的时刻穿,可以据此date
+%s命令拿到,或者直接用N代替。60723022是眼下若更新的流量数据,可以用shell脚本拿到。下面我们来查转,更新的多寡。

1
[root@node1 ~]# rrdtool fetch eth0.rrd AVERAGE

 

4.绘制图表

使用RRDtool
我们最关切什么?当然是拿数据画出了。尽管眼前说了众多,但那些仍然基础来的。明白好了,可以于您在绘图时越得心应手。

graph 语法

1
2
3
4
5
6
7
8
9
10
rrdtool graph filename [option ...]
[data definition ...]
[data calculation ...]
[variable definition ...]
[graph element ...]
[print element ...]
其中的 data definiton、variable definition 、data calculation、分别是下面的格式,
DEF:<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>][:end=<time>][:reduce=<CF>]
VDEF:vname=RPN expression
CDEF:vname=RPN expression

个中 filename 就是公想假诺变的图文件之称,默认是 png
。你得经接纳修改图片的型,可以发 PNG、SVG、EPS、PDF四种植。

(1).DEF 是 Definition
(定义)的意。定义什么为?你要绘制,总要有数据源吧?DEF 就是报
RRDtool 从大 RRD 中取出指定。

干什么还有一个 CF 字段?因为 RRA 有强CF 类型,有些 RRA
可能就此来保存平均值、有些 RRA
可能用于统计最深价值、最小值等等。所以您必同时指定使用什么 CF 类型的
RRA的数据。

关于 :start 和 :end 、:reduce 则因而得较少,最常用之饶是 :step
了,它好叫你说了算 RRDtool 从杀 RRA 中取数据。

 

(2).VDEF 是 Variable Definition (变量定义)的意思。定义什么也?记得
MRTG 在图纸的下有一个名叫 Legend 的有些为?那里呈现了1单或2单 DS
(MRTG 没有 DS 一说,这里是借 RRDtool 的)的
“最酷价值”、“平均值”、“当前值”。 

 

RRDtool 中之所以 VDEF 来定义。这一个变量专门存放有 DS 某类别型的价,例如
eth0_in 的不过特别价值、eht0_out 的脚下价当。当你待象MRTG
一样输出数字报表(Legend) 时,就能够以 GPRINT 子句(sub
clause)中调用它。同样它吧急需为此一个变量来存放数值。要留意的是,旧版 的
RRDtool 中是由此其余一种植格式来上平等的目的。新版的 RRDtool
则援引下VDEF语句。但每当利用过程中,却发现 VDEF 的行使反而导致了困扰。
例如您暴发5个 DS 要写,每个 DS 你还牵挂出口最要命价值、最小值、平均值 、当前价值。
假诺采取 VDEF ,则用 4 * 5 = 20 个 VDEF
语句,这会招致大的麻烦。具体事例可以扣押第十一节约“数字报表”部分。

 

(3).CDEF 是 Calculation Define 的意。使用过MRTG 的还会见体会到一些,MRTG
的测算能力实际太差了。例如你发三三两八只 Target ,一个凡是 eth0_in , 一个是
eth0_out,假若假定把它相加起来,再除以8,得出 bytes
为单位的值,如何统计也?或者说您才想看 eth0_in 中逾 10Mb/s 的这片,
另外的莫关心,又怎么实现呢?因为 MRTG 不克对她打 log
取出来的数码开展改动,只可以原原本本的见,所以万分为难满足我们的要求。而以
CDEF , 前一周都得以好容易的实现。CDEF
辅助广大数学运算,甚至还帮助简的逻辑运算 if-then-else
,可以化解前提到的第2个问题:怎么样就绘制而所关
心的数额。不过就通都要熟知 RPN
的语法.所以大家放下同样节省介绍,这无异节约便介绍将 RRDtool
中的数码为图表的法门显示出。

 

(4).其余选项分类

以有我们按法定文档的不二法门,把采纳分成几雅类,分为 :

  • 提姆e range :
    用于决定图的X轴展现的初叶/结束时间,也包括自RRA中提取指定时间的多寡。

  • Labels :用于控制 X/Y 轴的验证文字。

  • Size :用于控制图的高低。

  • Limits :用于控制 Y 轴的上下限。

  • Grid :用于控制 X/Y 轴的刻度咋样显示。

  • Miscellaneous :其他选拔。例如显示粤语、水冲效果等等。

  • Report :数字报表

流淌,需要表明的凡,本博文中并无是排有了颇具选项之用法,只是列出较为常用的取舍项,虽然想查所有选项之底用法,可以到官方站点下载文档。其实大部分抉择大家还得采纳默认值不需要修改的。上边是常用选项,

1
rrdtool graph filename [option ...] [data definition ...] [data calculation ...] [variable definition ...] [graph element ...] [print element ...]
  • filename 要绘制的图样名称

  • 提姆e range时间限制

  • [-s|–start time] 启始时间[-e|–end time]终结时 [-S|–step
    seconds]步长

  • Labels

  • [-t|–title string]图表的标题 [-v|–vertical-label string]
    Y轴说明

  • Size

  • [-w|–width pixels] 显示区的涨幅[-h|–height pixels]显示区的惊人
    [-j|–only-graph]

  • Limits

  • [-u|–upper-limit value] Y轴正值低度[-l|–lower-limit
    value]Y轴负值低度 [-r|–rigid]

  • Data and variables

  • DEF:vname=rrdfile:ds-name:CF[:step=step][:start=time][:end=time]

  • CDEF:vname=RPN expression

  • VDEF:vname=RPN expression

哼了,到此大家RRDTool命令工具的骨干使用,就讲解到这里了还多详细的情节要参见官方网站。好了,下边我们来演示一个整的案例。

 

六、RRDTool绘图案例

案例:利用RRDTool来绘制mysql服务器查询次数的曲线图。

1.安装mysql服务器

1
[root@node1 ~]# yum install -y mysql-server

2.启动并测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[root@node1 ~]# chkconfig mysqld on
[root@node1 ~]# service mysqld start
初始化 MySQL 数据库: Installing MySQL system tables...
OK
Filling help tables...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h node1.test.com password 'new-password'
Alternatively you can run:
/usr/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr /usr/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl
Please report any problems with the /usr/bin/mysqlbug script!
                              [确定]
正在启动 mysqld:                     [确定]
[root@node1 ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.69 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database      |
+--------------------+
| information_schema |
| mysql       |
test        |
+--------------------+
3 rows in set (0.00 sec)
mysql>

3.创立RRD数据库文件

1
2
3
4
5
6
7
8
[root@node1 ~]# rrdtool create mysql.rrd --step 3 DS:mysqlselect:COUNTER:5:0:U RRA:AVERAGE:0.5:1:28800 RRA:AVERAGE:0.5:10:2880 RRA:MAX:0.5:10:2880 RRA:LAST:0.5:10:2880
[root@node1 ~]# ll -h
总用量 620K
-rw-------. 1 root root 970 8月 17 18:50 anaconda-ks.cfg
-rw-r--r--. 1 root root 16K 8月 17 18:50 install.log
-rw-r--r--. 1 root root 4.1K 8月 17 18:48 install.log.syslog
-rw-r--r-- 1 root root 294K 10月 11 15:57 mysql.rrd
-rw-r--r-- 1 root root 294K 10月 10 21:53 rrdtool-1.3.8-6.el6.x86_64.rpm

4.追捕到手多少

1
2
[root@node1 ~]# mysql --batch -e "show global status like 'com_select'" | awk '/Com_select/{print $2}'
5

5.更新RRD数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@node1 ~]# vim getselect.sh
#!/bin/bash
#
while truedo
    SELECT=`mysql --batch -e "show global status like 'com_select'" awk '/Com_select/{print $2}'`
    rrdtool update mysql.rrd N:$SELECT
    sleep 3
done
[root@node1 ~]# bash -n getselect.sh
[root@node1 ~]# bash -x getselect.sh
true
++ mysql --batch -e 'show global status like '\''com_select'\'''
++ awk '/Com_select/{print $2}'
+ SELECT=10
+ rrdtool update mysql.rrd N:10
sleep 3
true
++ awk '/Com_select/{print $2}'
++ mysql --batch -e 'show global status like '\''com_select'\'''
+ SELECT=11
+ rrdtool update mysql.rrd N:11
sleep 3
true
++ mysql --batch -e 'show global status like '\''com_select'\'''
++ awk '/Com_select/{print $2}'
+ SELECT=12
+ rrdtool update mysql.rrd N:12

流淌,让那多少个剧本一贯执行方。

6.创造一个测试数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@node1 ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 55
Server version: 5.1.69 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database testdb;
Query OK, 1 row affected (0.01 sec)
mysql> use testdb;
Database changed
mysql> create table tb1 (id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name char(50) NOT NULL);
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| tb1       |
+------------------+
1 row in set (0.00 sec)
mysql>

7.创立一个剧本不断的插数据并询问

1
2
3
4
5
6
7
8
9
10
[root@node1 ~]# vim insert.sh
#!/bin/bash
#
for in {1..200000}; do
    mysql -e "INSERT INTO testdb.tb1(name) VALUES ('stu$I')"
    mysql -e "SELECT * FROM testdb.tb1" &> /dev/null
done
~
[root@node1 ~]# bash -n insert.sh
[root@node1 ~]# bash -x insert.sh

8.查看转RRD数据库更新的多少

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
[root@node1 ~]# rrdtool fetch -r 3 mysql.rrd AVERAGE
1381478757: -nan
1381478760: -nan
1381478763: -nan
1381478766: -nan
1381478769: -nan
1381478772: -nan
1381478775: 2.7153386392e-01
1381478778: 3.2831536999e-01
1381478781: 3.2891623754e-01
1381478784: 3.2705226490e-01
1381478787: 3.2799497906e-01
1381478790: 3.2750147283e-01
1381478793: 3.2962107218e-01
1381478796: 3.3022497969e-01
1381478799: 3.3027211905e-01
1381478802: 3.3020369194e-01
1381478805: 3.2946024073e-01
1381478808: 3.2988230260e-01
1381478811: 3.2969005472e-01
1381478814: 3.2974230463e-01
1381478817: 3.3001057711e-01
1381478820: 3.3019278582e-01
1381478823: 3.3083777490e-01
1381478826: 3.3015850009e-01
1381478829: 3.2968813815e-01
1381478832: 3.3021007195e-01
1381478835: 3.2890877932e-01
1381478838: 3.2919982365e-01
1381478841: 3.2820752812e-01
1381478844: 3.2498916047e-01
1381478847: 3.2435105446e-01
1381478850: 3.2631508451e-01
1381478853: 3.2927988387e-01
1381478856: 3.3061808059e-01
1381478859: 3.3065099981e-01
1381478862: 3.3079060547e-01
1381478865: 3.2993297013e-01
1381478868: 3.2998088978e-01
1381478871: 3.3045720109e-01
1381478874: 3.3052361682e-01
1381478877: 3.3021445518e-01
1381478880: 3.3033678729e-01
1381478883: 3.3017146110e-01
1381478886: 3.2932443118e-01
1381478889: 3.2872916025e-01
1381478892: 3.2942230122e-01
1381478895: 3.3004157568e-01
1381478898: 3.3035752652e-01
1381478901: 3.3026495130e-01
1381478904: 4.2927608935e-01
1381478907: 5.6199888336e-01
1381478910: 3.2960053815e-01
1381478913: 3.3019513627e-01
1381478916: 3.3008973582e-01
1381478919: 3.3023471404e-01
1381478922: 3.3044897038e-01
1381478925: 3.3025127245e-01
1381478928: 3.2999671137e-01
1381478931: 3.2995130475e-01
1381478934: 3.3001845566e-01
1381478937: 3.3004261932e-01
1381478940: 3.2985954162e-01
1381478943: 3.2962262303e-01
1381478946: 3.3033462847e-01
1381478949: 3.3000997317e-01
1381478952: 3.3023836505e-01
1381478955: 3.2987551061e-01
1381478958: 3.3038940726e-01
1381478961: 3.3047901095e-01
1381478964: 3.2999606597e-01
1381478967: 3.3021352982e-01
1381478970: 3.2998445954e-01
1381478973: 3.3029458891e-01
1381478976: 3.3009257605e-01
1381478979: 3.3008453893e-01
1381478982: 3.2998650516e-01
1381478985: 3.3014434356e-01
1381478988: 3.2950044395e-01

注,我们好观望本早就生无数底数量了,上边我们来简单的打造一查询曲线图。

9.制作查询曲线图

1
2
[root@node1 ~]# rrdtool graph mysql.png -s 1381478754 -t "mysql select" -v "selects/3" DEF:select3=mysql.rrd:mysqlselect:AVERAGE:step=3 LINE1:select3#FF0000:"select"
497x174

10.取出mysql.png图片并查看

图片 35

图片 36

哼了,到此地我们RRDTool的讲授就合了结了,想了然再多的RRDTool相关的文化一方面大家好参照官方文档,另一方面大家可参考一下随即首博客http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=864861&page=1,我看要写的可比详细的,好了立时同首博客就顶登时边了,希望大家所有获吧^_^……

 

正文出自 “Share your knowledge …
博客,请务必保留这个出处http://freeloda.blog.51cto.com/2033581/1307492

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图