MRTG 配置完整手册.

发表于:2007-07-04来源:作者:点击数: 标签:
MRTG配置完整全功略. 最近有不少朋友在问MRTG的问题,我前一段时间也搞了一些,今天花了一天的时间一边重新做一遍,一边写文档.现在文档写完了,把它拿出来共享给大家.由于水平有限,里面如果有什么错误的话,就帮忙指出. 请相信如果照着这个来做,你的MRTG很快就会

MRTG 配置完整全功略.
最近有不少朋友在问MRTG的问题,我前一段时间也搞了一些,今天花了一天的时间一边重新做一遍,一边写文档.现在文档写完了,把它拿出来共享给大家. 由于水平有限,里面如果有什么错误的话,就帮忙指出. 
请相信如果照着这个来做,你的MRTG很快就会搞定.^_^.

主要功能:
用一个网页来监视系统的CPU,NIC,MEM,SWAP,DISK usage, DISK I/O.情况.
里面的script有部分是自已写的,也有部分是下载的.像磁盘空间那个script是下载的,但是觉得功能不是很好用,由于有现成的也就没有再写,如果哪位有更好的script望请共享.

 nonameboy 回复于:2005-08-04 17:25:09
1.安装.
(1)需要的RPM
RHEL 3.0/4.0的安装CD带有MRTG的RPM安装包. 为了使用MRTG的一些脚本,需要安装其他的一些安装包.
Sysstat.rpm 系统状况监视安装包.(cpu.sh)
Procps.rpm 内存,Swap 使用情况工具等(cpu.sh,mem.sh,swap.sh)
Coreutils.rpm (df.pl,disk.sh)
gd-1.8.4-4
gd-devel-1.8.4-4
perl-5.6.0-17
perl-CGI
mod_perl-1.24_01-3
libpng-1.0.12-2
libpng-devel-1.0.12-2
gcc-2.96-98
gcc-g77-2.96-98
gcc-c++-2.96-98
zlib-1.1.3-24
zlib-devel-1.1.3-24
httpd(apache)
net-snmp
mrtg
检查装有没有上面rpm包.
(2)安装MRTG
  Rpm –ivh mrtg -2.9.29-4.ent.i386.rpm

 nonameboy 回复于:2005-08-04 17:26:55
2.配置SNMP 让他可以配合MRTG工作
编辑/etc/snmp/snmpd.conf
把下面的#号去掉 
#view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc #在89行 
把下面的语句#在62行 
access notConfigGroup "" any noauth exact systemview none none  
改为: 
access notConfigGroup "" any noauth exact mib2 none none
改完重启一下snmp
Service snmpd restat

 nonameboy 回复于:2005-08-04 17:30:59
3.配置MRTG
(1)mkdir /var/www/html/mrtg
(2)mkdir /opt/mrtg
(3)从下面的贴子复制以下几个script 到/opt/mrtg
Cpu.sh , mem.sh , swap.sh, diskperf.sh, disk.pl
    (4) cp /var/www/mrtg/* /var/www/html/mrtg
(5) /usr/bin/cfgmaker –output=/var/www/html/mrtg/mrtg.cfg public@10.102.17.100 用来配置一个mrtg配置文件.
(6) 编辑MRTG的配置文件 vi /var/www/html/mrtg/mrtg.cfg
   (1)把WorkDir: /var/www/html/mrtg 加入到配置文件的前面.
(2)把Options[_]: growright, bits 前面的#删掉.
(3)把要监测的几个ITEM加入到配置文件里面去.
  1) CPU 
   ################CPU######################
Target[cpu]: `/opt/mrtg/cpu.sh`
MaxBytes[cpu]: 12500000
Title[cpu]: CPU -- XMNLINUXTEST02
Options[cpu]: gauge,nopercent,growright
YLegend[cpu]: CPU loading (%)
ShortLegend[cpu]:%
LegendO[cpu]: & CPU USER;
LegendI[cpu]: & CPU SYSTEM;
PageTop[cpu]: <H1>CPU  -- XMNLINUXTEST02</H1>
2)NIC 用配置文件自动配好的.
3)MEM  这个图最大设为2G,如果服务器有更大的内存,可以修改Maxbytes.
###############    MEM  2G  #################
Target[managemem]:`/opt/mrtg/mem.sh`
Unscaled[managemem]: dwym
MaxBytes[managemem]: 2048000
Title[managemem]:Memory
ShortLegend[managemem]: &
kmg[managemem]:kB,MB
kilo[managemem]:1024
YLegend[managemem]: Memory Usage
Legend1[managemem]: Total Memory
Legend2[managemem]: Used Memory
LegendI[managemem]: Total Memory
LegendO[managemem]: Used Memory
Options[managemem]: growright,gauge,nopercent
PageTop[managemem]:<H1>Memory -------XMNLINUXTEST2</H1>
4)Swap   也是设为2G,根据实际情况改MaxBytes.
################### Swap  2G#######################
Target[swap]:`/opt/mrtg/swap.sh`
Unscaled[swap]: dwym
MaxBytes[swap]: 2048000
Title[swap]:Memory State of Server
ShortLegend[swap]: &
kmg[swap]:kB,MB
kilo[swap]:1024
YLegend[swap]: Swap Usage
Legend1[swap]: Total Swap
Legend2[swap]: Used Swap
LegendI[swap]: Total Swap
LegendO[swap]: Used Swap
Options[swap]: growright,gauge,nopercent
PageTop[swap]:<H1>Swap-------XMNLINUXTEST02</H1>

5)设置磁盘使用量  最大为480G,可以根据实际情况修改MaxBytes
################## Disk Space  480G  #########################
Target[disk]: `/opt/mrtg/df.pl`
Title[disk]: Disk Space ----XMNLINUXTEST02
Unscaled[disk]: dwym
MaxBytes[disk]: 465247550
kmg[disk]: KB,MB,GB
LegendI[disk]: Total Disk Space
LegendO[disk]: Used Disk Space
Legend1[disk]: Total Disk Space
Legend2[disk]: Used Disk Space
YLegend[disk]:  Megabytes
ShortLegend[disk]: &
Options[disk]: growright,gauge,nopercent
PageTop[disk]: <H1>Disk Space --------XMNLINUXTEST02</H1>

 nonameboy 回复于:2005-08-04 17:31:43
6)磁盘I/O的检测,如果需要的检,更多的分区,修改并复制这个部分,并修改diskperf.sh
################## Disk I/O 100K/sec  /DEV/SDA  ##########
# If you want monitor more disk, please copy below create
# now monitor job, and copy & modify the diskperf.sh to setting disk.
Target[diskIO]: `/opt/mrtg/diskperf.sh`
Title[diskIO]: Disk HDA I/O Utilization Report
Unscaled[diskIO]: dwym
MaxBytes[diskIO]: 100
PageTop[diskIO]: <H1>Disk I/O Utilization Report</H1>
kmg[diskIO]: KB,MB,GB
LegendI[diskIO]: Disk I/O KBread/sec
LegendO[diskIO]: Disk I/O KBwrite/sec
Legend1[diskIO]: Disk I/O KBread/sec
Legend2[diskIO]: Disk I/O KBwrite/sec
YLegend[diskIO]:  Megabytes
ShortLegend[diskIO]: &
Options[diskIO]: growright,gauge,nopercent

 nonameboy 回复于:2005-08-04 17:33:05
4.编译配置文件
先在/etc/profile 加入两个参数
LC_ALL=C
LANGUAGE=on

# env LANG=C /usr/bin/mrtg /var/www/html/mrtg/mrtg.cfg  
前面两次会出错,多运行几次就没有问题.
5.生成html文件.
/usr/bin/indexmaker –output=/var/www/html/mrtg/index.html –title=主机名 /var/www/html/mrtg/mrtg.cfg
6.配置apache 的设置. 
#vi /etc/httpd/conf.d/mrtg.cfg
 把Alias /mrtg /var/www/mrtg 改为Alias /mrtg /var/www/html/mrtg
 把Allow from localhost  改为Allow from all
#service httpd restart ,重启apache.
7.配置,自运行脚本,每五分钟自动运行一次.
在root 下启动 crontab –e 添加计划
     */5 * * * *  env LANG=C /usr/bin/mrtg /var/www/html/mrtg/mrtg.cfg
8.  确认service http&crontab的运进级别.
可以用下面两个命令查看这个服务的进行状况, 
#chkconfig –list |grep httpd
#chkconfig –list |grep crontab
    或用设定运行级别
chkconfig --level 35 httpd on
chkconfig --level 35 crontab on

 nonameboy 回复于:2005-08-04 17:33:49
5.常见问题
(1)问:实际内存或硬盘跟的图里面的值相差太多,要吗线超出图表,要吗,在图表的下面. 如何更改图表的比例? 如内存实际上只有512M,但表里面内存显示最大为2G.
答:修改/var/www/html/mrtg/mrtg.cfg 找到相关的部分, 修改MaxBytes[managemem]: 2048000 中的2048000为512000
(2)问:我有几个硬盘,如果要监测其他的硬盘IO?
  答:首先复制一份diskperf.sh 成diskperf2.sh ,再修改diskperf2.sh里面把hd=xxx改为你要监测的硬盘,再修改/var/www/html/mrtg/mrtg.cfg 复制sda的那一部门,并修改相关的部分.
如Target[diskIO]:`/opt/mrtg/diskperf.sh` 改成Target[diskIO]: `/opt/mrtg/diskperf2.sh`
   这一部份的[diskIO]改为disk2IO
(3)问:修改了配置文件/var/www/html/mrtg/mrtg.cfg 后,网页没有生效
  答:修改完配置文件应该要重新用下面命令生成新的网页.
/usr/bin/indexmaker –output=/var/www/html/mrtg/index.html –title=主机名 /var/www/html/mrtg/mrtg.cfg
        (4)问:如何看我的MRTG图.
          答:用http://你的IP/mrtg/ 就可以看到了.
     
附:1: mrtg.cfg 里面几个参数的意思.
Target:是要执行的脚本 
Xsize:生成图表的横向宽度(最大600) 
Ysize:生成图表的纵向高度(最大200) 
Title:标题 
kMG: Change the default multiplier prefixes
Ytics:纵向划分为几个块(格子) 
MaxBytes:图表纵向数值的最大上限 
PageTop:页面上面的提示 
kilo:一般是写1024,如果需要的话,是1000在计算机里的单位 
LegendI:从SHELL返回的数据中的第一个 
LegendO:从SHELL返回的数据中的第二个 
Options: growright,表示图表向右延展
附2:各个script
(1)
cat /opt/mrtg/cpu.sh
#!/bin/bash
cpuusr=`/usr/bin/sar -u 1 3 |grep Average |awk '{print $3}'`
cpusys=`/usr/bin/sar -u 1 3 |grep Average |awk '{print $5}'`
UPtime=`/usr/bin/uptime |awk '{print $3""$4""$5}'`
echo $cpuusr
echo $cpusys
echo $UPtime
hostname
(2)
Disk usage
cat /opt/mrtg/df.pl
#!/usr/bin/perl
# output(df -kl) looks like this:
# Filesystem           1k-blocks      Used Available Use% Mounted on
# /dev/md0              95645100  30401312  64272080  33% /
# /dev/hde1                14119      1159     12231   9% /boot
#
# In which case, this script returns :
# 95659219
# 30402503
# when run.
foreach $filesystem (`df -kl | grep -v "Filesystem"`)
{
  @df = split(/\s+/,$filesystem);
  $total += $df[1];
  $usage += $df[2];
}
print "$total\n";
print "$usage\n";
hostname
(3) DISK IO   # cat /opt/mrtg/diskperf.sh

#!/bin/bash
# This script will monitor the KBread/sec &KBwriten/sec of Disk.
# Creater: CCC IT loren  ext:2288   2005/8/3
# As sda ,sdb,sdc,sdd,hda.


# disk=sda
hd=sda
disk=/dev/$hd
KBread_sec=`iostat -x $disk|grep $hd |awk '{print $8}'`
KBwrite_sec=`iostat -x $disk|grep $hd |awk '{print $9}'`
echo "$KBread_sec"
echo "$KBwrite_sec"
hostname
(4)MEMORY
cat /opt/mrtg/mem.sh
#!/bin/bash
# This script to monitor the mem usage.
totalmem=`/usr/bin/free |grep Mem |awk '{print $2}'`
usedmem=`/usr/bin/free |grep Mem |awk '{print $3}'`
echo "$totalmem"
echo "$usedmem"
(5)SWAP
cat /opt/mrtg/swap.sh
#!/bin/bash
# This script to monitor the swap usage.
totalswap=`/usr/bin/free |grep Swap |awk '{print $2}'`
usedswap=`/usr/bin/free |grep Swap |awk '{print $3}'`
echo "$totalswap"
echo "$usedswap"

 abel 回复于:2005-08-04 17:46:35
其他看起來還不錯,不過二點意見
1. snmp.conf 那段寫的不好,沒有任何 access control ,及自知的 Comunity String
2. 若針對 mrtg.cfg 中的 Options 用法有更多描述就更好了,這是一般人常忽略的

 nonameboy 回复于:2005-08-04 20:43:29
snmp的,还要研究一下。  
Options还有一些资料,今天快下班没有放上来。明天再放上来,有很多内容。

 nonameboy 回复于:2005-08-05 12:59:18
浪费我的心血,没想到没有人顶.

 wind521 回复于:2005-08-05 13:44:54


 haoyufu 回复于:2005-08-05 20:09:38
呵呵支持下兄弟

 davighost 回复于:2005-08-06 16:42:00
有空好好研究一下~`望继续发好贴~``

 slid_wind 回复于:2005-08-06 16:55:13
:D 我来顶呀!好帖必顶!

 senmao 回复于:2005-08-06 22:11:39
我以安装MRTG时出错!我的是rhl9.0
这些包我都有安装。
不知道是什么原因。

 Konqueror 回复于:2005-08-06 22:21:15
顶一个,不错的文章!

 nonameboy 回复于:2005-08-06 23:11:57
[quote:d73471c004="senmao"]我以安装MRTG时出错!我的是rhl9.0
这些包我都有安装。
不知道是什么原因。[/quote:d73471c004]

出错有什么提示? 最好把出错信息贴上来看看,是不是用RPM安装吗?

 redaug1984 回复于:2005-08-07 01:09:47
好东西,我收了。谢谢。

 senmao 回复于:2005-08-07 02:05:19
是tar包安装。
rpm -qa | grep perl   
rpm -qa | grep zlib   
rpm -qa | grep gd 
rpm -qa | grep libpng 
 这些我都有安装。
./configure --prefix=/usr/local/mrtg-2[/img]

javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">

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




 nonameboy 回复于:2005-08-07 09:28:05
你找一下gd.h 在哪里,然后用--with-gd=/usr/local/src/gd  把指定gd的路径看看.
rpm -ql gd.h
我第一次装的MRTG也是这个版本,中间也有出现这个问题,忘了怎么解决了,
不过,好像是用上面那个方法.  后面我是用RPM,因为rhel3.0/4.0都有带这个东西.

 bollwarm 回复于:2005-08-07 20:15:38
好贴i子,支持精华

 nonameboy 回复于:2005-08-07 23:58:57
[quote:9db94f8a39="bollwarm"]好贴i子,支持精华[/quote:9db94f8a39]
多谢,花了一天的时间,真希望得个精。不过用MRTG的人好像不是很多。呵呵。。。

 tmcco 回复于:2005-08-08 19:02:37
[quote:7229659568="abel"]其他看起來還不錯,不過二點意見
1. snmp.conf 那段寫的不好,沒有任何 access control ,及自知的 Comunity String
2. 若針對 mrtg.cfg 中的 Options 用法有更多描述就更好了,這是一般人常忽略的[/quote:7229659568]

如果只是在本机监控的话snmpd可以让iptables过滤外来访问吧?
这样外部就不能通过snmp获得本机的敏感信息了.

 platinum 回复于:2005-08-09 07:41:24
Disk I/O Utilization Report 那段写的不好
磁盘 I/O 的变化很频繁,若使用 Unscaled 参数的话,会产生大量紫色冲击图形
另外不知你这里 MaxBytes[diskIO]: 100 是何用意?我想 100kB/s 对于硬盘来说很轻易就能达到
针对 diskperf.sh 还有一处小 bug,即获得 uptime 之后并没有打印输出给 MRTG,这样 MRTG 标注会乱的

MRTG 其实用的人很多,MRTG 的资料也很多,不过还是鼓励一下

 惠繪洋 回复于:2005-08-09 11:28:47
我之前弄了很久都不能, 現在可以了... 
幫忙頂... :D

 nonameboy 回复于:2005-08-09 11:47:46
[quote:793f673cd7="platinum"] 100 是何用意?我想 100kB/s 对于硬盘来说很轻易就能达到
针对 diskperf.sh 还有一处小 bug,即获得 uptime 之后并没有打印输出给 MRTG,这样 MRTG 标注会乱的

MRTG 其实用的人很多,MRTG 的资料也很多,不过还..........[/quote:793f673cd7]
多谢,我前几天已经把磁盘性能这一个改了一下.

################## Disk I/O 800K/sec  /DEV/SDA  ##########
# If you want monitor more disk, please copy below create
# now monitor job, and copy & modify the diskperf.sh to setting #disk.
Target[diskIO]: `/opt/mrtg/diskperf.sh`
Title[diskIO]: Disk HDA I/O Utilization Report
#Unscaled[diskIO]: dwym
MaxBytes[diskIO]: 800
PageTop[diskIO]: <H1>Disk I/O Utilization Report</H1>
kmg[diskIO]: KB,MB,GB
LegendI[diskIO]: Disk I/O KBread/sec
LegendO[diskIO]: Disk I/O KBwrite/sec
Legend1[diskIO]: Disk I/O KBread/sec
Legend2[diskIO]: Disk I/O KBwrite/sec
YLegend[diskIO]:  Megabytes
ShortLegend[diskIO]: &
Options[diskIO]: growright,gauge,nopercent

 platinum 回复于:2005-08-09 11:58:35
Unscaled 已经去掉了,很好
不过 800 的峰值还是太低了,一个普通的文件 I/O 操作很可能会上 M,一般 IDE 硬盘的瓶颈是 10MB/s ,你的 800KB 还是太低

 abel 回复于:2005-08-09 12:11:53
提供一個 sendmail 做法
http://bbs.chinaunix.net/forum/viewtopic.php?t=590332

個人感覺,樓主若要精最好有獨到之處(例如怎看 MS 的 CPU Loading ? 遠端機器的連線數)
提供一個 mrtg 作者公司的一個網頁,裏面包含了 MIB file 及各種設備 OS 的 mrtg
設定方法 (SNMP 解法)
http://www.somix.com/support/index.php

 platinum 回复于:2005-08-09 12:21:35
abel 兄的 rrdtool 玩的好熟练。。。。

 abel 回复于:2005-08-09 12:27:56
[quote:b68fe5c488="platinum"]abel 兄的 rrdtool 玩的好熟练。。。。[/quote:b68fe5c488]
這是看家本領之一 :D

 wind521 回复于:2005-08-09 12:38:45
哈哈,难得的看家本领
什么时候也这成为大家的看家本领呢?

 abel 回复于:2005-08-09 12:44:03
[quote:7db6c9dd59="wind521"]哈哈,难得的看家本领
什么时候也这成为大家的看家本领呢?[/quote:7db6c9dd59]
哈~
http://bbs.chinaunix.net/forum/viewtopic.php?t=552218&highlight=RRDTOOL
http://bbs.chinaunix.net/forum/viewtopic.php?t=552224&highlight=RRDTOOL

只要肯學,肯實驗,一定可以學會的,不然學會裏面的 my14all + mrtg 的做法也
不錯

 platinum 回复于:2005-08-09 13:39:55
我有看过 abel 兄的 rrdtool 教程,不过我比较愚钝,没能领悟,说来真是惭愧。。。。

 ccn 回复于:2005-08-09 13:45:37
[quote:5db68366ab="abel"]提供一個 sendmail 做法
http://bbs.chinaunix.net/forum/viewtopic.php?t=590332

個人感覺,樓主若要精最好有獨到之處(例如怎看 MS 的 CPU Loading ? 遠端機器的連線數)
提供一個 mrtg 作者公司的一個網頁,裏面..........[/quote:5db68366ab]

这个网站不错,从abel前辈的贴子中总能得到收获,谢谢:)

之前为MS的MIB搜到手软,找了个2K的SNMP补丁也才多那么几个MIB值

 ccn 回复于:2005-08-09 13:53:19
Good,还有Domino的MIB

 abel 回复于:2005-08-09 13:56:30
MS 要查 Disk , CPU ,Process 相關的 MIB 要裝這個 perfmib
http://www.google.com.tw/url?sa=U&start=1&q=http://www.wtcs.org/snmp4tpc/snmp4nt.htm&e=747

不然原來的 windows snmp mib 簡直是跛腳

 ccn 回复于:2005-08-09 14:00:01
对,我上面说的那个补丁就是从这里Download

 nonameboy 回复于:2005-08-09 14:52:06
[quote:e40ce2c7ca="abel"]提供一個 sendmail 做法
http://bbs.chinaunix.net/forum/viewtopic.php?t=590332

個人感覺,樓主若要精最好有獨到之處(例如怎看 MS 的 CPU Loading ? 遠端機器的連線數)
提供一個 mrtg 作者公司的一個網頁,裏面..........[/quote:e40ce2c7ca]

正在做一个用MRTG集中显示网页的脚本,可以通过脚本配置需要MRTG monitor的服务器,大约在主节点做好后,加一个服务器只要run这个脚本就好了.

 nonameboy 回复于:2005-08-09 15:01:55
有有MIB for linux?

 abel 回复于:2005-08-09 15:11:39
for linux 就用 net-snmp 就可以了

另外,你要做的事, monitor center run mrtg 你得注意 access control (web, snmp)
以及你的機器是否跑得動的問題,一般來說, mrtg 的 target 若超過 1000 個,
就得注意這個問題了

 nonameboy 回复于:2005-08-09 16:24:38
[quote:cd1609eb53="abel"]for linux 就用 net-snmp 就可以了

另外,你要做的事, monitor center run mrtg 你得注意 access control (web, snmp)
以及你的機器是否跑得動的問題,一般來說, mrtg 的 target 若超過 1000 個,
就得注意這個問?.........[/quote:cd1609eb53]
mrtg center应该是没有问题. access control,因为我不懂得用net-snmp
来得到信息,我准备做ssh信任.
在mrtg center,连到每个终端去抓数据.再做出图来.
现在在苦恼怎样做好硬盘的monitor.  由于是第一次写比较大的script.

 jiarong.lu 回复于:2005-08-09 16:51:14
好东西,收下了,谢谢

 abel 回复于:2005-08-09 18:34:53
[quote:a0fd9b84b9="nonameboy"]
mrtg center应该是没有问题. access control,因为我不懂得用net-snmp
来得到信息,我准备做ssh信任.
在mrtg center,连到每个终端去抓数据.再做出图来.
现在在苦恼怎样做好硬盘的monitor.  由于是第一次写比较大的..........[/quote:a0fd9b84b9]
明天再寫出來給你參考好了,先下班了

 nonameboy 回复于:2005-08-09 21:10:48
[quote:b0d55cc018="abel"]
明天再寫出來給你參考好了,先下班了[/quote:b0d55cc018]
好的,多谢。

 abel 回复于:2005-08-10 18:54:13
[quote:a1c5c2b0c7="nonameboy"]
mrtg center可该死是没有问题. access control,因为我不懂得用net-snmp
来得到信息,我准备做ssh信任,在mrtg center,连到每个终端去抓数据.再做出图来.
现在在苦恼怎样好硬盘的monitor.  由于是每一次写比较大的sc..........[/quote:a1c5c2b0c7]

一種是你用的 ssh 或 expect 等等... , 去 run 遠端 的程式來取得 disk io, 不過
個人認為,這不是好方法,因為如此會有許多 Connection 產生,且增加遠端主機負載.
另外一種是較常見的, 在 snmpd.conf 中自訂 oid 做法,以 exec 參數來設定 oid, 遠
端機器再取得這個 oid 的值,詳情你可以參考
http://fanqiang.chinaunix.net/adm/net/2005-04-13/3147.shtml

此外,您可以直接看看您的 snmpd 是否支援 diskIO , 去抓最新版的 net-snmp
http://switch.dl.sourceforge.net/sourceforge/net-snmp/net-snmp-5.2.1.2.tar.gz

抓下來後,我個人是以下述方式來安裝
[code:1:a1c5c2b0c7]
$>./configure --prefix=/usr/local       \
--with-sys-contact="abel@localhost"       \
--with-sys-location="Taiwan,Tel:123456767"   \
--with-mib-modules="misc/ipfwacc mibII host disman/event-mib ucd_snmp agent_mibs agentx notification target utilities host disman/event-mib ucd-snmp/diskio tunnel mibII/mta_sendmail "   \
--with-sysconfdir="/usr/local/etc/snmp ucd_snmp" --enable-shared  --with-default-snmp-version=2 
$>make;make install
[/code:1:a1c5c2b0c7]
註: 有關 --with-mib-modules 是說我這個 snmpd 支援那些 mib modules , 預設有些是不支援的,可以
[code:1:a1c5c2b0c7]$>./configure --help
[/code:1:a1c5c2b0c7]
詳查相關資訊,看不懂的 mib modules 功能就到官方網站去查查

裝好後,再編輯 /usr/local/etc/snmp/snmpd.conf, 內容如下(只要四行,幾乎面面俱到)
[code:1:a1c5c2b0c7]
#定義一像ACL (SECURITY) 的東西,名為 lan, IP 段為 192.168.0.0/1616, Community_string 為 Taiwan
com2sec lan 192.168.0.0/16 Taiwan

#語法為 group NAME MODEL SECURITY,MODEL 為採用什麼 SNMP 協定版本,ROGroup 意指 Read Only
group ROGroup v2c lan

#語法為 view NAME TYPE SUBTREE [MASK], 這個東西你自己查查,主要通常用 com2sec 等合用
#達到不同的來源,可以存取不同的 OID (MIB) 值,尤其像 ISP ,若客戶租戶線路,他可以單獨提
#供某個 Interface 給他來做 snmp 查詢,本主?#125;無意離?#125;;,請自休為重
#此功能在許多 Device Vendor  的 SNMP 功能皆相同
view all included .1

#語法為 access NAME CONTEXT MODEL LEVEL PREFX READ WRITE NOTIFY
#NAME 要對應,因為本例使用 v2c (或 v1) ,CONTEXT 為空 (""),LEVEL 必為 noauth (無認證要求,
#只要 Community_String 對,來源 IP 符合即可),MODEL 在本例需為 v1 或 any(都可以之意,也就是
#snmp version), R/W/N 字意很明顯,我們只要讀而以,不要求寫及 Trap
access ROGroup "" any noauth prefix all none none 
[/code:1:a1c5c2b0c7]

修改完成後,以下列方式來啟動 snmpd 服務
[code:1:a1c5c2b0c7]
$> /usr/local/sbin/snmpd -c /usr/local/etc/snmp/snmpd.conf
[/code:1:a1c5c2b0c7]
所以,以上每台機器你只要這麼做,就可以有一樣的 snmp 功能,在單一化的特性下,你的 mrtg 的設定也就會變
得簡單許多.啟動以後,可以執行一下 snmpwalk 測試一下
[code:1:a1c5c2b0c7]
$>snmpwalk -v 2c SNMP_IP_ADDRESS -c Community_String .1
[/code:1:a1c5c2b0c7]
如果有看到內容,大概就沒有什麼問題了,若出現 timeout 之類的訊息,則要檢查 com2sec 的設或 iptables
等可能的 access control 限制的地方,我個人則會建議您將內容存下來,可以研究許多系統的資訊

以上,您要注意, net-snmp 的 complier 最好包多一點 mib module , 如此您的 snmpd 才可以支援
各種您所有的資訊,例如 Device List, Hard Disk LIST/USAGE , Process 所佔用 CPU/MEM,流量..
等等

至於硬盤的 monitor , 你要做的不外乎兩種,一種是使用率,一種是 I/O 值,我舉例子給你看看...

待續,明天再來

 ammy 回复于:2005-08-10 20:54:01
嗯  讨论不错  支持 :em03:

 guliny 回复于:2005-08-11 09:23:02
哈哈,深!

 Linuxcn.com 回复于:2005-08-11 10:15:21
顶你一下~~~

 Boson 回复于:2005-08-11 11:16:02
不错,正是我想要的东西

 abel 回复于:2005-08-11 11:31:43
接上文....
如果您的 snmp 裝的都沒有錯,那基本上用 mrtg 來做 monitor 就沒有太大問題了
唯一的問題是 如何知道 OID 這項而以,而建議您用 snmpwalk 跑一次,如此
就會有所有的 OID 了

另外,假設你 monitor 100 台機器 , 其中 Sun 的 30 台, AIX 30 台 Linux 40 台
你若用 ssh 或 snmpd.conf 中的 exec  , 都會出現不同的 OS 你要實作不同的
command/script ,所以會顯得有點不經濟

以下是我的 sample , 可自己看看就好(應該是 net-snmp 有支援的 OS 都適用,
但我只試過 Sun 和 Linux)

[code:1:639a73bbc3]
# Created by 
WorkDir: /www/htdocs/211.72.210.251/images/mrtg
Language: Big5
Options[_]: growright, bits
# 去掉以下三行,讓 mrtg 支援 rrdtool , 可以有效降低系統負載
# 因為此時, mrtg 將只收集資料,而不畫圖, 安裝 rrdtool 可見
#http://bbs.chinaunix.net/forum/viewtopic.php?t=552218&highlight=RRDTOOL
#http://bbs.chinaunix.net/forum/viewtopic.php?t=552224&highlight=RRDTOOL
 
#LogFormat: rrdtool
#PathAdd: /usr/bin/
#LibAdd: /usr/lib/perl/
# 為要載入什麼 MIB file , 以名稱會比用 OID 那段數字好理解許多
LoadMIBs: /usr/local/share/snmp/mibs/UCD-SNMP-MIB.txt,/usr/local/share/snmp/mibs/HOST-RESOURCES-MIB.my

XSize[_]: 400
YSize[_]: 100
Interval: 5
EnableIPv6: no

# CPU 負載,若有多個 CPU 要分別畫,或使用 RRDTOOL 來綜合畫
Target[proxy_cpu_lv]: ssCpuRawIdle.0&ssCpuRawSystem.0:TwNic@211.72.210.251:::::2
Options[proxy_cpu_lv]: growright,noinfo
MaxBytes1[proxy_cpu_lv]: 100
MaxBytes2[proxy_cpu_lv]: 100
Title[proxy_cpu_lv]: CPU Loading 
Legend1[proxy_cpu_lv]: IDLE
Legend2[proxy_cpu_lv]: USED
LegendI[proxy_cpu_lv]: IDLE (centi-second)
LegendO[proxy_cpu_lv]: SYSTEM (centi-second)
YLegend[proxy_cpu_lv]: minor-second
PageTop[proxy_cpu_lv]: <h1>CPU Loading</h1>
此 OID 共有五個值,分別為 user/nice/system/idle/kernel 但 mrtg 我們僅取代表性的畫上,而此值為 Counter 屬性,單位為 百分之一秒,所以, MaxBytes 為 100,一秒內 CPU 的 idle 時間反過來看就是 CPU 的 Loading, 此一計算,跟據 NET-SNMP mail-list 上?論所得,建議不要使用 , 其建議不要使用如下 OID, 因為某些 CPU 或多&nnbsp;CPU 或 OS 的關係,此值是不夠正確的<BR>
enterprises.ucdavis.systemStats.ssCpuUser.0 <BR>
enterprises.ucdavis.systemStats.ssCpuSystem.0 <BR>
enterprises.ucdavis.systemStats.ssCpuIdle.0 <BR>

     
# 網卡流量
Target[proxy_eth0]: ifInOctets.1&ifOutOctets.1:TwNic@211.72.210.251:::::2
Options[proxy_eth0]: growright, bits
MaxBytes[proxy_eth0]: 12500000
Title[proxy_eth0]: eth0
PageTop[proxy_eth0]: <H1>211.72.210.251</H1>
 <TABLE>
   <TR><TD>System:</TD>     <TD>RH 7.3 </TD></TR>
   <TR><TD>Maintainer:</TD> <TD>abel</TD></TR>
   <TR><TD>Description:</TD><TD>Proxy</TD></TR>
   <TR><TD>Max Speed:</TD>  <TD>12.5 MBytes/s</TD></TR>
 </TABLE>

Target[proxy_eth1]: ifInOctets.2&ifOutOctets.2:TwNic@211.72.210.251:::::2
Options[proxy_eth1]: growright, bits
MaxBytes[proxy_eth1]: 12500000
Title[proxy_eth1]: eth0
PageTop[proxy_eth1]: <H1>211.72.210.251</H1>
 <TABLE>
   <TR><TD>System:</TD>     <TD>RH 7.3 </TD></TR>
   <TR><TD>Maintainer:</TD> <TD>abel</TD></TR>
   <TR><TD>Description:</TD><TD>Proxy</TD></TR>
   <TR><TD>Max Speed:</TD>&nbs; <TD>12.5 MBytes/s</TD></TR>
 </TABLE>


# memory/swap 使用狀況
Target[proxy_mem]: hrStorageUsed.2&hrStorageUsed.3:TwNic@211.72.210.251:::::2
Options[proxy_mem]: growright, noinfo,gauge
MaxBytes1[proxy_mem]: 514152
MaxBytes2[proxy_mem]: 1048536
Title[proxy_mem]: Memory/Swap Usage
#kilo[proxy_mem]: 1024
kMG[proxy_mem]: K
Legend1[proxy_mem]: Memory
Legend2[proxy_mem]: Swap
LegendI[proxy_mem]: Memory Usage (MB)
LegendO[proxy_mem]: Swap Usage (MB)
YLegend[proxy_mem]: MB
PageTop[proxy_mem]: <h1>Memory/Swap</h1>
此為 host module 所提供,從 OID/MIB tree 中可得知分別為 hrStorageUsed.2 及 hrStorageUsed.3


# partition 使用狀況
Target[proxy_disk_sample]: hrStorageUsed.4&hrStorageUsed.10:TwNic@211.72.210.251:::::2
Options[proxy_disk_sample]: growright, noinfo,gauge
MaxBytes1[proxy_disk_sample]: 258014
MaxBytes2[proxy_disk_sample]: 2064202
Title[proxy_disk_sample]: Hard Disk Sample for / and /var
kilo[proxy_disk_sample]: 1024
kMG[proxy_disk_sample]: M
Legend1[proxy_disk_sample]: /
Legend2[proxy_disk_sample]: /var
LegendI[proxy_disk_sample]: / (block)
LegendO[proxy_disk_sample]: /var (block)
YLegend[proxy_disk_sample]: block(=4K)
PageTop[proxy_disk_sample]: <h1>/ & /var disk usage</h1>
本例僅畫兩個 partition, 其餘自己發?#93;,而平常當屬 / ,/var 最重要





Target[proxy_swap]: ssSwapIn.0&ssSwapOut.0:TwNic@211.72.210.251:::::2
Options[proxy_swap]: growright, noinfo,gauge
MaxBytes1[proxy_swap]: 100
MaxBytes2[proxy_swap]: 100
Title[proxy_swap]: Memory/Disk Swap In/Out
kilo[proxy_swap]: 1024
kMG[proxy_swap]: K
Legend1[proxy_swap]: Swap In
Legend2[proxy_swap]: Swap Out
LegendI[proxy_swap]: In (K)
LegendO[proxy_swap]: Out (K)
YLegend[proxy_swap]: KB
PageTop[proxy_swap]: <h1>MEMORY/DISK SWAP STAT</h1>
UCD-SNMP module 所提供的 OID, Swap In 表示從 Disk 到 Memory, Swap Out 則反之



Target[proxy_disk_io]: ssIOSent.0&ssIOReceive.0:TwNic@211.72.210.251:::::2
Options[proxy_disk_io]: growright, noinfo,gauge
MaxBytes1[proxy_disk_io]: 1000
MaxBytes2[proxy_disk_io]: 1000
Title[proxy_disk_io]: Hard Disk I/O
kilo[proxy_disk_io]: 1024
kMG[proxy_disk_io]: K
Legend1[proxy_disk_io]: Disk In
Legend2[proxy_disk_io]: Disk Out
LegendI[proxy_disk_io]: In (blocks/s)
LegendO[proxy_disk_io]: Out (blocks/s)
YLegend[proxy_disk_io]: block/s (4KB/s)
PageTop[proxy_disk_io]: <h1>Hard Disk I/O</h1>
Hard Disk 的 I/O 狀況









#--------------------------Threhold Check --------------------
# 當 CPU 的 IDLE 小於 5 時  (意即 Loading >95), 呼叫 mail.sh 來做通知
# 其 call mail.sh 時所帶共三個參數, 分為 target_name, alert_val,current_val
ThreshDir: /www/htdocs/211.72.210.251/images/mrtg/alert/
ThreshMinI[proxy_cpu_lv]: 5
ThreshProgI[proxy_cpu_lv]:/www/htdocs/211.72.210.251/images/mrtg/alert/mail.sh
[/code:1:639a73bbc3]

 Richard1981 回复于:2005-08-11 11:33:07
好贴~~!

 abel 回复于:2005-08-11 11:40:24
結果晝面:
http://211.72.210.251/images/mrtg/log_server.html
這是 log 格式為標準的顯示,其時間間隔最小為 5 分鐘


http://211.72.210.251/images/mrtg/LOG-SERVER.cgi
這個是 logfrom 為 rrd, 再加上 14all.cgi 顯示的結果
其與上述標準做法的差別在於
1. 偵測時間不能小於5分鐘 ... 
2. 偵測 Target 過多,機器會跑不動,主因在 
2.1 mrtg 每次都會畫圖(最多一個target 會更動到4個圖),不實際, Broswer 時才畫才可能偵測上千上萬個 Target 
2.2 要更新 log file(絕不是什麼插入一行數據,而是N筆資料的修改) 
2.3 要更新每個 target 的 html page 
3. 不能表現三種以上資料 
如果 Scope 小, mrtg 再上述幾點狀況不會構成問題,若 Scpoe 大,例如,有 1000+ Target 要做,大概 100% 的機器都跑 
不動(可以把 mrtg.cfg 複製個 1000 份,每份改一個 filename & target name 即可測試).

 johny_unix 回复于:2005-08-12 10:29:39
ding

 nonameboy 回复于:2005-08-12 13:42:16
多谢,abel.el. 感受很深... 确实,如果用ssh来做资料收集的话比snmp差很多.

 我菜我怕谁 回复于:2005-08-12 15:56:24
还是abel兄的功力深厚,pf~pf~ :)

 zydudu 回复于:2005-08-12 17:47:57
我已经加到我的收藏夹了

 ibmsoft 回复于:2005-08-12 18:19:45

顶起来

 osday-1 回复于:2005-08-13 16:40:51
(3) 复制mrtg的script 从xmnitplatform01 到/opt/mrtg 
Cpu.sh , mem.sh , swap.sh, diskperf.sh, disk.pl 

这些 文件  在那 放着呢!  有你这么 写文章的吗??
写的 人家 都 不知道 在那里!

 knirvana 回复于:2005-08-13 18:38:07
支持,尽管不太明白,但我会回去研究一下。

 daaxiang 回复于:2005-08-13 18:44:46
我顶,mrtg我正好不大懂,可以研究下,谢谢楼主分享。

 nonameboy 回复于:2005-08-14 18:46:01
[quote:d322780fb9="osday-1"](3) 复制mrtg的script 从xmnitplatform01 到/opt/mrtg 
Cpu.sh , mem.sh , swap.sh, diskperf.sh, disk.pl 

这些 文件  在那 放着呢!  有你这么 写文章的吗??
写的 人家 都 不知道 在那里![/quote:d322780fb9]

哈哈,你看完就知道,不好意思这个贴子是针对我现在的环境.
那些script 在后面都有.

 FrogT 回复于:2005-08-15 16:34:42
UP.

 afone 回复于:2005-08-15 23:06:47
好,顶一个!

 huanghaojie 回复于:2005-08-16 21:13:50
我顶
这几天再做透明代理,正好也装了mrtg,没搞定,看到楼主的这么详解,明天再搞一下,应该可以搞定 的,谢谢楼主,别灰心,好人有好报的。

 lsq726 回复于:2005-08-21 04:48:58
定狂顶 不顶对不器楼住