rrdtool usage details.docx
- 文档编号:11029707
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:20
- 大小:29.48KB
rrdtool usage details.docx
《rrdtool usage details.docx》由会员分享,可在线阅读,更多相关《rrdtool usage details.docx(20页珍藏版)》请在冰豆网上搜索。
rrdtoolusagedetails
使用RRDTool创建基于WEB的图形报表
2006-9-29
修订日期
修订人
修订内容
注释
2006-09-29
Watson
整体
前言
从各种事物中收集状态信息非常容易,范围可以从办公室的温度计到通过你的路由器的FDDI接口传输的字节数。
但是要保存这些数据就缺少一种高效、统一的方法。
这就是RRDtool创建的目的。
它能够让你记录并分析那些你从各种数据源收集到的数据。
RRDtool中的数据分析工具是基于:
它能够快速用图示的方式生成在指定时间区间内所收集数据。
第一章RRDTool简介,介绍RRDTool项目情况。
第二章体验RRDTool,。
第三章建立RRD数据库。
.
第四章更新RRD数据库。
第五章画图.
第六章SLIM相关代码段.
第一章RRDTool简介
什麼是RRDtool?
相信大部份的人都沒有聽過這個東東....不過,如果問起知不知道有MRTG這套程式,相信就有許多人聽過了。
打個比方來說明︰如果MRTG是一輛車子,那麼RRDtool就是製造車子的工廠了!
簡單講,RRDtool是一套可以把數據畫成圖表的程式,以時間為x軸、流量為y軸,而且可以動態更新圖表的程式,聽起來似乎非常的強大?
沒錯,正是因為RRDtool的功能強大以致於它有不太容易學習的缺點,況且坊間有提到RRDtool的書籍可以說是少之又少(目前還沒看過);網路上找?
總共的中文教學文章只有酷學園Abelyang的那一篇。
反觀MRTG簡單又功能強大,學習文件頗多,能滿足大部份人的需求,但是如果您對於MRTG的統計方式不能認同,亦或是您有強烈customize統計圖表的需求,RRDtool將會是您最好的選擇!
第二章体验RRDTool
2.1环境
下载及详细教程请参考:
http:
//oss.oetiker.ch/rrdtool/download.en.html
如果机器没有rrdtool环境,则需要先行安装它。
2.2运行及开发流程
了解RRD的工作原理很有帮助。
我们以监控网络流量为例:
① 通过Shell脚本,配置我们监控的端口变量,并生成.rrd的数据文档。
(具体操作和含义后面具体讲)(也有人称之为log文档)
② 由数据更新脚本(NIC_7609.sh),通过调用snmpwalk更新.rrd数据文档。
③ 数据更新脚本(NIC_7609.sh)调用绘图脚本(NIC_7609_Graph.sh)根据.rrd数据文档,重新绘图。
④ 休息300S,继续 ②
这样,整个流程就说清楚了,下面就根据流程逐步展开。
第三章建立RRD数据库(.rrd文件)
[root@d-1701 bin]# ./rrdtool
RRDtool 1.2.12 Copyright 1997-2005 by Tobias Oetiker
Compiled Feb 6 2006 10:
33:
43
Usage:
rrdtool [options] command command_options
Valid commands:
create, update, updatev, graph, dump, restore,last, first, info, fetch, tune, resize, xport
RRDtool is distributed under the Terms of the GNU General
Public License Version 2. (
For more information read the RRD manpages
从以上可以看出,使用方法就是:
rrdtool [options] command command_options
而commands包括:
create, update, updatev, graph, dump, restore,last, first, info, fetch, tune, resize, xport
这一讲我们将着重介绍一下creat命令的使用
rrdtool create filename
[--start|-b start time]
[--step|-s step]
[DS:
ds-name:
DST:
heartbeat:
min:
max]
// DS:
ds-name:
GAUGE | COUNTER | DERIVE | ABSOLUTE:
heartbeat:
min:
max
[RRA:
CF:
xff:
steps:
rows]
我们用一个官方例子对整个语法进行解释(以下都用这个例子说明参数的使用):
rrdtool create target.rrd
--start 1023654125
--step 300
DS:
mem:
GAUGE:
600:
0:
671744
RRA:
AVERAGE:
0.5:
12:
24
RRA:
AVERAGE:
0.5:
288:
31
简单的先说吧:
create 很容易理解,就是创建一个新的Round Robin Database (RRD) 数据库文件以存储信息。
filename习惯上会以 .rrd 结尾,请记住这个数据库文件的名字。
--start 这个参数可以指定 filename 的数据记录起始日期,你可以指定为 1970 年至今的秒数(参数为-b `date -d "1970/01/01" +%s`),如果你不指定,那么起始时间默认就是现在。
--step 采集数据的间隔时间,习惯上我们会设 300 (秒),当然你可以自行调整,这也是RRD的优势所在。
但是采集周期不应该过短也不应小于你的update rrd文件周期,否则可能会造成服务器负载过重。
原文相关对照:
This example creates a database named target.rrd. Start time (1023654125) is specified in total number of seconds since epoch (time in seconds since 01-01-1970). While updating the database, update time is also specified. This update time MUST occur after start time and MUST be in seconds since epoch.
The step of 300 seconds indicates that database expects new values every 300 seconds. The wrapper script should be scheduled to run every step seconds so that it updates the database every step seconds.
后面两个参数需要慢慢理解,我把语法和例子拿下来对比一下,大家就可能明白了。
[DS:
ds-name:
DST:
heartbeat:
min:
max]
// DS:
ds-name:
GAUGE | COUNTER | DERIVE | ABSOLUTE:
heartbeat:
min:
max
对比例子
DS:
mem:
GAUGE:
600:
0:
671744
下面以例子来说明:
DS:
用来声明数据源的,也可以理解为声明数据变量的关键字。
这个是必须写的,不能按照你的意愿修改成其他表述方式。
官方英文解释是这样的:
DS (Data Source) is the actual variable which relates to the parameter on the device that has to be monitored.
DS-NAME:
变量名,可以理解为你给这个数据源起的助记符(简称DSN)。
当每一个刷新周期到来的时候,数据文档中各变量对应的值就会被更新。
这个变量对应的值在官方文档中也叫做主要数据点――PDP(Primary Data Point)。
DST:
DS的类型,通常有:
GAUGE, COUNTER, DERIVE, 和ABSOLUTE 四种,下面依次介绍:
GAUGE:
我们用的最多的就是GAUGE了,它的中文解释是:
测量。
在这里它表示实际的值。
比如说输入次序为98 100 98,那么输出顺序也是98 100 98。
COUNTER:
累计值,自己进行计算,比如说输入次序为98 100 98,那么输出顺序也是2 -2,怎么出来的这两个数值呢?
100-98 98-100,其实就是两个差值,它表示的是经过一个刷新周期的变化率。
DERIVE:
也是累计值,和COUNTER一样的,唯一不同的是它不存在负值,最小的是0,不如-2那么它就只划0,结果为 2 0
ABSOLUTE:
如同COUNTER,但COUNTER可能overflow(数值过大),所以会取绝对值
补充:
COUNTER/DERIVE/AVSOLVTE 虽然都是取差值,但会再除以两次间隔间的秒数。
例,两次间隔间为300秒,那画出来的就是 2/300,-2/300 的值
下面给出官方英文解释:
COUNTER will save the rate of change of the value over a step period. This assumes that the value is always increasing (difference between last two values is more than 0). Traffic counters on a router is an ideal candidate for using COUNTER as DST.
DERIVE is same as COUNTER but it allows negative values as well. If you want to see the rate of change in free diskspace on your server, then you might want to use the DERIVE data type.
ABSOLUTE also saves the rate of change but it assumes that previous value is set to 0. The difference between current and previous value is always equal to the current value. So, it stores the current value divided by step interval (300 seconds in our example).
GAUGE does not save the rate of change. It saves the actual value itself. There are no divisions/calculations. Memory consumption in a server is an ideal example of gauge.
再给出一个例子帮助大家理解:
Values = 300, 600, 900, 1200 实际值输入值(每隔300S输入一个)
Step = 300 seconds 刷新周期
COUNTER DS = 1, 1, 1, 1 COUNTER定义的DS的值
DERIVE DS = 1, 1, 1, 1 DERIVE定义的DS的值
ABSOLUTE DS = 1, 2, 3, 4 ABSOLUTE定义的DS的值
GAUGE DS = 300, 600, 900, 1200 GAUGE定义的DS的值
heartbeat 心跳有效期
比如在例子中,我们定义了心跳有效时间是600秒,也就是两个刷新周期。
举个例子,在12点的时候没有产生数据,那么前后300S(共600S)的平均值就会绘成12点的值,但如果在两个刷新周期内,都没有接收到数据更新,那么这个时候,必须往数据文档中写入一个(UN)UNKNOWN值。
这是 RRDTool的一个特别的地方。
要知道MRTG在处理网络中断的时候,记录的是0值。
这个0和UN还是有一定区别的。
官方原文如下:
In our example, heartbeat is 600 seconds. If database does not get a new PDP within 300 seconds, it will wait for another 300 seconds (total 600 seconds). If it doesnt receive any PDP with in 600 seconds, it will save an UNKNOWN value into database. This UNKNOWN value is a special feature of RRDTool - it is much better than to assume a missing value was 0 (zero). For example, the traffic flow counter on a router keeps on increasing. Lets say, a value is missed for an interval and 0 is stored instead of UNKNOWN. Now when next value becomes available, it will calculate difference between current value and previous value (0) which is not correct. So, inserting value UNKNOWN makes much more sense here.
min:
max 记录数据的最小值和最大值
DS数值的有效范围,超出就是UN喽。
也可以写成 U:
U 代表不限范围。
小技巧:
将数据源建立方式记为 "三文字,三数字"
DS讲完了就该讲RRA了,那么什么是RRA呢?
RRA:
更简单,它的作用就是定义更新的数据是如何记录的,RRA 即 Round Robin Archive,Archive是什么,存档。
比如我们每5分钟产生一条刷新的数据,那么一个小时就是12条。
每天就是288条。
这么庞大的数据量,一定不可能都存下来。
肯定有一个合并(consolidate)数据的方式,那么这个就是RRA的作用了。
下面具体介绍怎么应用RRA:
使用方法:
RRA:
AVERAGE | MIN | MAX | LAST:
xff:
steps:
rows
RRA:
用以声明RRAs的关键字
CF:
consolidation function 合并方式,包含四类:
AVERAGE, MIN,MAX, LAST //平均值,最大值,最小值,最后一笔
上面说过了,经过一个刷新周期,会获得一个主数据点(PDP),将若干个PDPs使用合并方式(CF)合并后会产生一个合并数据点CDP(consolidated data point)。
xff:
xfiles factor 和unkown数据有关,很多资料都取0.5
step:
有step条PDP合并形成一条CDP
row:
记录的合并数据点CDP条数
对应官方的描述为:
RRA is the keyword to declare RRAs. The consolidation function (CF) can be AVERAGE, MINIMUM, MAXIMUM, and LAST. The concept of the consolidated data point (CDP) comes into the picture here. A CDP is CFed (averaged, maximum/minimum value or last value) from step number of PDPs. This RRA will hold rows CDPs.
我们在例子中对RRA是这样定义的:
RRA:
AVERAGE:
0.5:
12:
24 //1天
RRA:
AVERAGE:
0.5:
288:
31 //1月
对于第一个RRA,12条的PDP(每经过一个刷新周期产生一个PDP)经过CFed(AVERAGE),也就是取平均值,产生一个CDP,24个 CDPs存档。
我们一起来计算一下时间,如果一个周期是300秒,那么12个PDP的产生时间就是一个小时,也就是一个小时产生一个CDP。
24个 CDPs时间就是一天。
说明这条通过这条RRA,我们可以取得一天的数据值。
一天后,又经过一个小时。
就会产生第25条,那么如何记录这个第25条数据呢?
根据我们这个RRA的定义,它将会替代第一条CDP的位置。
我们通过下面这个图来说明:
实例(检测某核心交换的端口)(create_nic_7609.sh)
/usr/local/rrd/bin/rrdtool create /www/rrd/NIC_7609.rrd -s 300 \
DS:
ifInOctets1:
COUNTER:
600:
U:
U \
DS:
ifInOctets2:
COUNTER:
600:
U:
U \
DS:
ifInOctets9:
COUNTER:
600:
U:
U \
DS:
ifInOctets11:
COUNTER:
600:
U:
U \
DS:
ifInOctets14:
COUNTER:
600:
U:
U \
DS:
ifInOctets53:
COUNTER:
600:
U:
U \
DS:
ifOutOctets1:
COUNTER:
600:
U:
U \
DS:
ifOutOctets2:
COUNTER:
600:
U:
U \
DS:
ifOutOctets9:
COUNTER:
600:
U:
U \
DS:
ifOutOctets11:
COUNTER:
600:
U:
U \
DS:
ifOutOctets14:
COUNTER:
600:
U:
U \
DS:
ifOutOctets53:
COUNTER:
600:
U:
U \
RRA:
AVERAGE:
0.5:
1:
4800 \
RRA:
AVERAGE:
0.5:
6:
2400 \
RRA:
AVERAGE:
0.5:
24:
1200 \
RRA:
AVERAGE:
0.5:
288:
600 \
RRA:
MAX:
0.5:
1:
4800 \
RRA:
MAX:
0.5:
6:
2400 \
RRA:
MAX:
0.5:
24:
1200 \
RRA:
MAX:
0.5:
288:
600
我们举例来看
RRA:
AVERAGE:
0.5:
1:
603 \
RRA:
AVERAGE:
0.5:
6:
603 \
RRA:
AVERAGE:
0.5:
24:
603 \
RRA:
AVERAGE:
0.5:
288:
800 \
RRA:
MAX:
0.5:
1:
603 \
RRA:
MAX:
0.5:
6:
603 \
RRA:
MAX:
0.5:
24:
603 \
RRA:
MAX:
0.5:
288:
800
解释一下,首先你要记得step我们设置为300秒,那么
0.5:
1:
603
因为我们将step设置为300秒,若原计算时间点为12:
00,记录时11:
57:
30~12:
02:
30的平均值为主,这个值若在此时间点內只有一笔资料的话,其意即是平均值,所以此一值即表共要记录几笔,603是指要存603笔,超過603筆,則最早一笔將被移出。
0.5:
6:
603 仅就6解释,取6笔资料(每笔为step值,在此意即5分钟)为平均值( 30 分钟), 存 603 笔
0.5:
24:
603 24 即2小時
0.5:
288:
800 288 即1天
请注意,不是0.5:
1:
603中的1 就是五分钟,这个是依据你的--step值而定,如果--step 3600,那0.5:
6:
603这一行就是六小时合起來的平均值了。
若将 AVERAGE 换成MIN/MAX 的意义则是取该时间点中 (如上例之5min/30min/2hr..)之最大值或最小值,而通常在监测系统时最大值与平均值是比较有实际意义的。
下面这个图来帮助你记忆。
RRA:
MIN:
0.5:
1:
600 \
RRA:
MIN:
0.5:
6:
700 \
RRA:
MIN:
0.5:
24:
775 \
RRA:
MIN:
0.5:
288:
797 //一般可按cacti标准取值
第四章RRD数据的更新
原档:
在创建好文档后,我们要用程序定时更新数据文档(.rrd)然后才能根据数据文档画图。
以采集核心交换流量为例,首先我们要抓到各端口的流量,可以通过 snmp协议来取得数据。
如果你机器上没有snmp,那么安装最新的net-snmp包,安装完成后测试snmp,在提示符下键入:
$ snmpwalk
No hostname specified.
Usage:
snmpwalk [options...]
UCD-snmp version:
5.1.2
-h this help message.
-H Display configuration file directives understood.
-V display version number.
-v 1|2c|3 specifies snmp version to use.
SNMP Version 1 or 2c specific
……
出现以上信息表示net-snmp安装成功。
snmp的使用:
# snmpwalk -v 2c 核心交换IP地址 设备的community_string OID
具体的snmp用法及系统默认的OID还有Shell文件的执行方法可参考 cacti 中文论坛 的相关文档,这里我就不废话了。
我们这一讲将主要说说如何更新rrd文件信息。
语法:
rrdtool{update|updatev} filename [--template|-t ds-name[:
ds-name]...] N|timestamp:
value[:
value...] at-timestamp@value[:
value...] [timestamp:
value[:
value...] ...]
例如:
$ rrdtool update tcpdump.rrd 1061811856:
114:
0:
50:
1199:
0:
821073
上面的 1061811856 即时间值,如果就是要现在的时间值,可以 N 代表,但要转换成秒值,通常我們都会用
$ timestamp=`date +%s `
来转现在秒数,如果是某些特定时间,则可以
$ timestamp=`date -d "2003/08/15 12:
00" +%s`
后面跟着所有的更新的数据,按照DS定义的顺序用冒号格开。
关于更新的数据需要你写个小程式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- rrdtool usage details