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 中,但目前这两个脚本只是负责取数据并输出而已,
到最后我们再把这些功能合并到一起。
四)下面是脚本的内容[root@dns1 bob]# cat get_eth0_traffic.sh
#!/bin/bash
# 首先取得 eth0 接口的 ifIndex
index=$(snmpwalk -IR localhost RFC1213-MIB::ifDescr |grep eth0|cut -d '=' -f 1|cut -d '.' -f 2)
# 再通过 snmp 协议取得 ififInOctets 和 ifOutOctets 的值
# 由于在 /etc/snmp.conf 中配置了 defVersion 和 defCommunity ,所以 snmpget 命令不用指定这两个参数
eth0_in=$(snmpget -IR -Os localhost ifInOctets.${index}|cut -d ':' -f 2|tr -d '[:blank:]')
eth0_out=$(snmpget -IR -Os localhost ifOutOctets.${index}|cut -d ':' -f 2 |tr -d '[:blank:]')
echo $eth0_in
echo $eth0_out
[root@dns1 bob]#
[root@dns1 bob]# cat get_lo_traffic.sh
#!/bin/bash
# 首先取得 eth0 接口的 ifIndex
index=$(snmpwalk -IR localhost RFC1213-MIB::ifDescr |grep lo|cut -d '=' -f 1|cut -d '.' -f 2)
lo_in=$(snmpget -IR -Os localhost ifInOctets.${index}|cut -d ':' -f 2|tr -d '[:blank:]')
lo_out=$(snmpget -IR -Os localhost ifOutOctets.${index}|cut -d ':' -f 2 |tr -d '[:blank:]')
echo $lo_in
echo $lo_out
[root@dns1 bob]#
再把这2个脚本放入 crontab 中,每5分钟执行一次
*/5 * * * * /home/bob/get_eth0_traffic.sh
*/5 * * * * /home/bob/get_lo_traffic.sh
不过这样会有讨厌的邮件产生,也可以在脚本中用 while true 循环,配合 sleep 300 让脚本一直运行,而不是重复启动脚本。具体选择那样你自己决定。
当所有的准备工作都完成后,就可以开始考虑建库了。
阅读(1570) | 评论(0) | 转发(0) |