我的脑内恋碍选项2结局:RRDtool 系列连载 -3 :前期规划 - RRDtool - 阿勃的 blog

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 16:30:40
RRDtool 系列连载 -3 :前期规划
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 中,但目前这两个脚本只是负责取数据并输出而已,

               到最后我们再把这些功能合并到一起。


四)下面是脚本的内容

[Copy to clipboard] [ - ]CODE:[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]#


[Copy to clipboard] [ - ]CODE:[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分钟执行一次

[Copy to clipboard] [ - ]CODE:*/5 * * * * /home/bob/get_eth0_traffic.sh
*/5 * * * * /home/bob/get_lo_traffic.sh
不过这样会有讨厌的邮件产生,也可以在脚本中用 while true 循环,配合 sleep 300 让脚本一直运行,而不是重复启动脚本。具体选择那样你自己决定。

当所有的准备工作都完成后,就可以开始考虑建库了。