FreeBSD下用mrtg监控本机流量、内存、cpu使用率、整网流量:)

发表于:2007-05-26来源:作者:点击数: 标签:
经常看到说mrtg的,说论坛里面的资料不对,其实不是不对,是有些说的不详细而已,我刚开始作的时候也是费了不少时间的,整理一下,发到这里吧,希望能为后来的兄弟们省下时间 前言:我实验的机器是FreeBSD4.10,其他版本的应该也一样,其他 unix like系统估

经常看到说mrtg的,说论坛里面的资料不对,其实不是不对,是有些说的不详细而已,我刚开始作的时候也是费了不少时间的,整理一下,发到这里吧,希望能为后来的兄弟们省下时间 
前言:我实验的机器是FreeBSD4.10,其他版本的应该也一样,其他unix like系统估计也是可以的,因为我只用过FreeBSD,不敢肯定。另外我这篇文章的前提是你的机器上已经安装了apache,并能正常使用,如果没有请参考网上其他文章安装,本文就不再赘述。

一:先介绍如何用mrtg来监控本机的流量
1:安装 snmp

cd /usr/ports/net-mgmt/p5-SNMP
make install clean
当中会叫你填写你的email、操作系统等等,直接回车即可。

可以用以下命令启动snmp,/usr/local/etc/rc.d/snmpd.sh start

2:安装 mrtg

cd /usr/ports/net-mgmt/mrtg
make install clean

3:配置 index.cfg文件监控服务器流量

/usr/local/bin/cfgmaker --output=/usr/www/mrtg/index.cfg public@192.168.0.1
然后修改index.cfg文件,主要修改以下内容,以符合你的实际情况,此处的192.168.0.1是你要监控的网卡的ip地址。

WorkDir: /usr/www/mrtg

Options[_]: growright, bits

Language:GB2312
########################让他5分钟执行一次##############
RunAsDaemon: Yes
Refresh:300
######或者可以这样:#################################
crontab -e
*/5 * * * * /usr/local/bin/mrtg /usr/www/mrtg/index.cfg
建议使用后面的方法,因为前者用RunAsDaemon的方式并不能使MRTG开机自动运行
#########################################


下面接着:
/usr/local/bin/mrtg /usr/www/mrtg/index.cfg

这个需要运行3次,前两次都会报错,不用去理会他,第3次就应该没有错误了,不过,
若是有问题的话,就需要改index.cfg,再执行直到没有错误发生为止。

制作首页index.html:

/usr/local/bin/indexmaker --output=/usr/www/mrtg/index.html /usr/www/mrtg/index.cfg


这样以后就可以通过:http://******/mrtg/index.html看你的代理的流量了,注意此处是以你的apache主目录设置为/usr/www来说的,你可以根据实际情况修改。

二、监控RAM-SWAP使用情况
在/usr/www/traffic/ram下建立ram.cfg,内容为:

LoadMIBs: /usr/local/share/snmp/mibs/UCD-SNMP-MIB.txt  
Target[ramswap]: memAvailReal.0&memAvailSwap.0:public@192.168.0.1
##192.168.0.1是本机的ip地址
Options[ramswap]: nopercent,growright,gauge,noinfo
Title[ramswap]: RAM & SWAP 使用状况
PageTop[ramswap]: RAM & SWAP 使用状况
MaxBytes[ramswap]: 1000000000
kMG[ramswap]: k,M,G,T,P,X
Ylegend[ramswap]: Octets
ShortLegend[ramswap]: octets
LegendI[ramswap]: RAM 可使用
LegendO[ramswap]: Swap 可使用
Legend1[ramswap]: RAM 可使用单位
Legend2[ramswap]: Swap 可使用单位
Language:Chinese
WorkDir:/usr/www/traffic/ram

说明:与一般MRTG流量设定档大同小异,唯一的差別是来源数值。
    memTotalSwap 全部的swap空间        
    memAvailSwap 剩余(可使用)的swap
    memTotalReal 全部的内存空间
    memAvailReal 剩余(可使用)的内存

然后执行:
/usr/local/bin/mrtg /usr/www/traffic/ram/ram.cfg
将会在/usr/www/traffic/ram下生成ramswap.html等文件。

这样以后就可以通过:http://******/traffic/ram/ramswap.html看你的机器的内存使用情况了。

下面再让它5分钟执行一次:
crontab -e
*/5 * * * * /usr/local/bin/mrtg /usr/www/traffic/ram/ram.cfg

三、再来监控cpu使用率
安装bsdsar这个程序来显示cpu的使用状态
cd /usr/ports/sysutils/bsdsar/
make install
注意存档(/var/log/bsdsar.dat)会一直的变大,所以采用这个bsdsar必须要适时的将档案移往他处。并更名以作为日后的查询之用,我是把它删除的,看看当前的就好了J
crontab -e
0 0 * * * /bin/rm /var/log/bsdsar.dat

在/usr/www/traffice/cpu下建立cpu.cfg,内容为:

Target[CPU]: `/usr/www/traffic/cpu/mrtg-cpu`
MaxBytes[CPU]: 100
Title[CPU]: CPU-Loading MRTG 
PageTop[CPU]: CPU-Loading MRTG 
Options[CPU]: gauge,growright
YLegend[CPU]: CPU Loading (%)
ShortLegend[CPU]: %
WorkDir:/usr/plog/traffic/cpu
LegendO[CPU]: CPU系统负载
LegendI[CPU]: CPU使用者负载
Language:Chinese

说明:Target 乃是资料的取得方式 如同MRTG测流量时的public@community.
        MaxBytes:限制绘图的最大 Loading 值,CPU Loading 的最高值就是 100% .
        Title: HTML 网页的title .
PageTop: 网页页面的*标题*.
        Options: 采用标准格式,并且让MRTG由右往左绘图.
        YLegend: 图表的Y轴名称.
        ShotLegend: 定义最小的单位(%).
        WorkDir: 工作区域 也就是显示图表的位置.
        Language: 用简体中文
        LegendO[CPU] &  LegendI[CPU]: 下方的说明

设定MRTG-CPU Loading 的数据取得档案执行档: 
/usr/local/www/data/mrtg/cpu/mrtg-cpu
此档权限需为可执行若用root执行则为700,内容:
#!/usr/bin/perl
        $cpu_orig=`/usr/local/bin/bsdsar -u > /usr/www/traffic/cpu/bsdsar.tmp`;
        $cpu_str=`/usr/bin/tail -1 /usr/www/traffic/cpu/bsdsar.tmp`;
        $val=(split('     ',$cpu_str))[1];
        $val2=(split('     ',$cpu_str))[2];
        $val=int($val);
        $val2=int($val2);
        
        print "$val\n";
        print "$val2\n";
        print "0\n";
        print "0\n";

修改权限:chmod 700 mrtg-cpu

/usr/local/bin/mrtg /usr/www/traffic/cpu/cpu.cfg就会生成cpu.html等文件了。

可以通过http://******/traffice/cpu/cpu.html看到cpu的使用情况了。

我设定每10分钟run一次.
*/10 * * * * /usr/local/bin/mrtg /usr/www/traffic/cpu/cpu.cfg

由于我是每隔10分钟run一次,所以原先装上bsdsar以后系统预设每隔20分钟执行一次的bsdsar_gather也要修正.
     修改 /etc/crontab
#20,40   8-18    *       *       *       root    /usr/local/bin/bsdsar_gather
#0       *       *       *       *       root    /usr/local/bin/bsdsar_gather
*/10 * * * * /usr/local/bin/bsdsar_gather

四、下面来介绍一下如何监控整网的流量
我们的核心交换是cisco6509,下面的交换机是cisco3524,我们没有其他交换机,所以下面我说的命令是针对cisco的,其他的可参考手册自己作相应的修改。
在6509的二层上设置:
set snmp rmon enable
set snmp community read-only mrtg
在FreeBSD机器上:

/usr/local/bin/cfgmaker --output=/usr/www/mrtg/6509.cfg mrtg@10.0.0.1
然后修改6509.cfg文件,主要修改以下内容,以符合你的实际情况,此处的10.0.0.1是6509的ip地址。
ee /usr/www/mrtg/6509.cfg
WorkDir: /usr/www/mrtg
Options[_]: growright, bits
Language:Chinese

/usr/local/bin/mrtg /usr/www/mrtg/6509.cfg
这个需要运行3次,前两次都会报错,不用去理会他,第3次就应该没有错误了,不过,
若是有问题的话,就需要改6509.cfg,再执行直到没有错误发生为止。

制作首页index.html:
/usr/local/bin/indexmaker --output=/usr/www/mrtg/6509.html /usr/www/mrtg/6509.cfg

让它每隔5分钟运行一下:
crontab -e
*/5 * * * * /usr/local/bin/mrtg /usr/www/mrtg/6509.cfg

五、监控下面交换机的流量
方法类似6509,只是命令有点不同:
snmp-server community mrtg ro,其他的照抄改一下文件的名字就行了。

六、后记:
这几个可能是大家比较关心的使用了,其他的我也没试过,大家如果有其他的利用请后续上,或者通知我wuming122@eyou.com,多谢!

七、FAQ:

################Q1############################
Q1:我在英文下
Max In: 935.6 kb/s (0.9%)
Max Out: 5306.4 kb/s (5.3%)
可是在中文下只显示
最大 流入: 935.6 $1$2/秒 (0.9%)
最大 流出: 5306.4 $1$2/秒 (5.3%)
这是怎么回事?
A1:编辑/usr/local/lib/perl5/site_perl/5.8.5/locales_mrtg.pm

查找到sub gb2312的下面
原来是这样的:
代码:

'([kMG]?)([bB])/s' => '$1$2/秒',
'([kMG]?)([bB])/min' => '$1$2/分',
'([kMG]?)([bB])/h' => '$1$2/时',

改成这样:
代码:

'([kMG]?)([bB])/s' => '$1$2/秒',
'([kMG]?)([bB])/min' => '$1$2/分',
'([kMG]?)([bB])/h' => '$1$2/时',
A2:修改你的mrtg.cfg文件。把语言一项改成:Chinese
也就是:
Language:Chinese
##########################################

#######################Q2##################
Q2:我运行了/usr/local/bin/cfgmaker --output=/usr/mrtg/6509.cfg mrtg@10.0.0.1
以后生成了四十多个Traffic Analysis for 1 -- 6509等等,我们的6509上是加了个48口的板子,
总共应该有五十多个,现在只有四十多个是不是因为我在执行这个命令的时候只有这四十多个机
器是开着的?以后他们再开的时候会不会被监控到?会自动给我生成Traffic Analysis for 1 -- 6509
这样的表吗?
A:没有处于connected的端口是不能被cfgmaker抓取的。要想实现不开机流量为0,开机以后就开始监控流量,
需要自己手动更改cfg文件,把所有未使用端口的注释去掉,注意空格和空行,一定要和cfgmaker生成的一致,
否则是抓不到的,然后再执行/usr/local/bin/mrtg /usr/www/mrtg/6509.cfg即可。#######################################################

####################Q3################################
Q3:在这个机器上我只监控全部交换机上的流量,并不监控本身的流量,因为它也在6509上接着,
是不是就不需要运行snmpd了?
A:是交换机上的SNMP模组在做服务,与你的主机没关系,你的主机自然也就不用运行SNMPD了,
但在交换机中抓到的你的这台主机的流量是反的,(即流入和流出是相反的,这个是显然的了)
#####################################################

####################Q4################################
Q4:我make install的时候提示有错误Couldn't fetch it - please try to retrieve this ,装不上怎么办?
A:那是ports安装的时候需要的文件未能下载到,请确定你的机器已经连到网上并能访问国际互联网,我知道很多学校都限制了访问国际网络,可以通过代理下载到那些文件放到/usr/ports/distfiles/下面,然后重新执行make install即可
######################################################

 Ecore 回复于:2005-01-27 02:29:45
加精!!

 剑心通明 回复于:2005-01-27 08:23:37
版主说这写资料太多了,不给偶加 :em16: 偶怎么没在CU找到像偶这么齐的东西,害得俺作的时候难受了半天 :em06:

 zhubaotao 回复于:2005-01-27 11:22:24
大家用没用过Hostsanic软件来实现Freebsd,CPU,MEM,HD等信息的监视呢? 我试用了一段时间很好的,有需要的我整理后发表.

 FunBSD 回复于:2005-01-27 13:19:05
发,多多益善

 Linux@初学者 回复于:2005-06-03 22:59:10
不行呀,怎么老出错啊
FreeBSD# /usr/local/bin/mrtg /usr/local/httpd/htdocs/mrtg/index.cfg
ERROR: Line 8 ( WorkDir: /usr/local/httpd/htdocs/mrtg) in CFG file (/usr/local/httpd/htdocs/mrtg/index.cfg)  does not make sense
我可是按楼主的顺序做的啊

 gvim 回复于:2005-06-03 23:23:07
[quote:93ed5e7335="剑心通明"]版主说这写资料太多了,不给偶加 :em16: 偶怎么没在CU找到像偶这么齐的东西,害得俺作的时候难受了半天 :em06:[/quote:93ed5e7335]

最终的解决办法是-------->自己当版主。呵呵呵呵。 :mrgreen:  :mrgreen:  :mrgreen:  :mrgreen:

 剑心通明 回复于:2005-06-04 09:38:42
[quote:02f5d040fa="gvim"]

最终的解决办法是-------->自己当版主。呵呵呵呵。 :mrgreen:  :mrgreen:  :mrgreen:  :mrgreen:[/quote:02f5d040fa]
哈哈,这个办法不错,可以考虑,不过目的有点不怎么高尚哦 :em02:

 Eg_zm 回复于:2005-06-04 10:32:43
支持小心。。。
呵呵………………剑心通明

 Linux@初学者 回复于:2005-06-05 09:22:12
别闲聊呀,帮帮忙

 Linux@初学者 回复于:2005-06-05 09:41:28
唉呀,好郁闷啊,这问题搞定了,可新问题又来了
FreeBSD# /usr/local/bin/indexmaker --output=/usr/local/httpd/htdocs/mrtg/index.html /usr/local/httpd/htdocs/mrtg/index.cfg
Use of uninitialized value in hash element at /usr/local/bin/indexmaker line 340.

 剑心通明 回复于:2005-06-05 10:19:07
cfg文件有了吗?里面的设置是否正确?

 Linux@初学者 回复于:2005-06-05 12:26:42
正确啊,奇怪了我在LINUX下做就很顺利

 Linux@初学者 回复于:2005-06-05 12:43:22
奇怪了,我做完了后输入http://10.0.3.33/mrtg/index.html
图片不显示呀,显示的是红X






 gaussong 回复于:2005-06-05 17:48:35
这些图片需要你自己在MRTG的IMAGE目录下面拷贝到你的WWW目录下面的拉!!
主要是PNG格式的文件的拉!;)

 剑心通明 回复于:2005-06-05 17:49:40
还要注意权限的问题

 Linux@初学者 回复于:2005-06-05 18:56:44
晕,我做了RAM和CPU的,RAM的报错
[root@rhel3 root]# /usr/local/mrtg/bin/mrtg /usr/local/httpd/htdocs/mrtg/ram/ram.cfg 
SNMP Error:
Received SNMP response with error code
  error status: noSuchName
  index 2 (OID: 1.3.6.1.4.1.2021.4.4.0)
SNMPv1_Session (remote host: "10.0.3.33" [10.0.3.33].161)
                  community: "public"
                 request ID: 524237385
                PDU bufsize: 8000 bytes
                    timeout: 2s
                    retries: 5
                    backoff: 1)
 at /usr/local/mrtg/bin/../lib/mrtg2/SNMP_util.pm line 490
SNMPGET Problem for memAvailReal.0 memAvailSwap.0 sysUptime sysName on public@10.0.3.33::::::v4only
 at /usr/local/mrtg/bin/mrtg line 1920
ERROR: Target[ramswap][_IN_] ' $target->[0]{$mode} ' did not eval into defined data
ERROR: Target[ramswap][_OUT_] ' $target->[0]{$mode} ' did not eval into defined data


CPU的没错,可是没有流量 呀

原文转自:http://www.ltesting.net