您的位置:首页 > 其它

MRTG+SNMP构建服务器流量统计系统

2010-01-27 16:33 501 查看
当服务器达到30台的的情况下必须要进行统一管理,例如统计服务器群的网络流量, 内存状态, CPU状态, 磁盘存储状态,经过无数小时的努力,终于把它应用在IDC的30多台服务器群,大大方便每天检查服务器运行状态、负载等情况。
  硬件:
  其中1台服务器安装mrtg, apache,net-snmp 其他服务器只需安装net-snmp
  系统环境:
  redhat5.0 
 必备软件
  系统必须已经安装以下软件:
  mrtg-2.9.28.tar.gz
  gd-1.8.4.tar.gz
  libpng-1.0.15.tar.gz
  perl-5.8.0-88
  zlib-1.1.4-8
  apache
  gcc-3.2.2-5
  net-snmp-5.0.6-17
  net-snmp-devel-5.0.6-17
  net-snmp-utils-5.0.6-17
  1、首先来安装配置net-snmp
  光盘里有net-snmp的安装rpm包,或者在添加/删除程序里选择安装ethereal-网络交通分析器,也会自动安装net-snmp软件包。
  安装完以后,需要配置/etc/snmp/snmpd.conf文件,使其能配合mrtg工作.
  把下面的#号去掉
  #view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
  把下面的语句
  access notConfigGroup "" any noauth exact systemview none none
  改成:
  access notConfigGroup "" any noauth exact mib2 none none
  由于需要对CPU,Mem,IO状态进行监控,所以本人在/etc/snmp/目录下分别创建cpustat.sh 、 iostat.sh 、mfree.sh 三个文件,通过snmp取得本机系统相关数据。
  vim /etc/snmp/cpustat.sh
  #!/bin/sh
  idle=`sar -u 1 3 | grep Average | awk '{print $6}'`
  used=`echo "101 - $idle" | bc -l -s`
  echo $used
  echo $idle
  vim /etc/snmp/iostat.sh
   #!/bin/sh
  used1=`sar -d 1 3 | tail -1 | awk '{print $4}'`
  used2=`echo "$used1 / 2" | bc -l`
  echo $used2
  echo $used2
  vim /etc/snmp/mfree.sh
  #!/bin/sh
  /usr/bin/free -m | grep Mem |awk '{print $4}'
  /usr/bin/free -m | grep Mem |awk '{print $2}
  然后,在/etc/snmp/snmp.conf加入如下内容:
  exec .1.3.6.1.4.1.2021.53 mfree /bin/sh /etc/snmp/mfree.sh
  exec .1.3.6.1.4.1.2021.54 cpustat /bin/sh /etc/snmp/cpustat.sh
  exec .1.3.6.1.4.1.2021.55 iostat /bin/sh /etc/snmp/iostat.sh
  exec .1.3.6.1.4.1.2021.56 load /bin/sh /etc/snmp/load.sh
  ok,改完以后,就可以启动snmpd服务
  以下是本人的/etc/snmp/snmp.conf的配置文档,可作参考:
  #### /etc/snmp/snmp.conf start##########
  # First, map the community name "public" into a "security name"
  # sec.name source community
  com2sec notConfigUser default public #定义community名称为 public,映射到安全名 notConfigUser。
  ####
  # Second, map the security name into a group name:
  # groupName securityModel securityName
  group notConfigGroup v1 notConfigUser #定义安全用户名notConfigUser映射到notConfigGroup组。
  group notConfigGroup v2c notConfigUser
  ####
  # Third, create a view for us to let the group have rights to: #定义一个view,来决定notConfigUser可以操作的范围。
  # Make at least snmpwalk -v 1 localhost -c public system fast again. #定义可查看的snmp的范围。
  # name incl/excl subtree mask(optional)
  view systemview included .1.3.6.1.2.1.1
  view systemview included .1.3.6.1.2.1.25.1.1
  view all included .1
  ##add by yzjboy
  exec .1.3.6.1.4.1.2021.53 mfree /bin/sh /etc/snmp/mfree.sh
  exec .1.3.6.1.4.1.2021.54 cpustat /bin/sh /etc/snmp/cpustat.sh
  exec .1.3.6.1.4.1.2021.55 iostat /bin/sh /etc/snmp/iostat.sh
  exec .1.3.6.1.4.1.2021.56 load /bin/sh /etc/snmp/load.sh
  ####
  # Finally, grant the group read-only access to the systemview view. #给notConfigGroup组所定义view名 all 以只读权限。
  # group context sec.model sec.level prefix read write notif
  access notConfigGroup "" any noauth exact all none none
  #access notConfigGroup "" any noauth exact mib2 none none
  # -----------------------------------------------------------------------------
  # Here is a commented out example configuration that allows less
  # restrictive access.
  # YOU SHOULD CHANGE THE "COMMUNITY" TOKEN BELOW TO A NEW KEYWORD ONLY
  # KNOWN AT YOUR SITE. YOU *MUST* CHANGE THE NETWORK TOKEN BELOW TO
  # SOMETHING REFLECTING YOUR LOCAL NETWORK ADDRESS SPACE.
  ## sec.name source community
  #com2sec local localhost COMMUNITY
  #com2sec mynetwork NETWORK/24 COMMUNITY
  ## group.name sec.model sec.name
  #group MyRWGroup any local
  #group MyROGroup any mynetwork
  #
  #group MyRWGroup any otherv3user
  #...
  ## incl/excl subtree mask
  #view all included .1 80
  ## -or just the mib2 tree-
  #view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
  #view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
  ## context sec.model sec.level prefix read write notif
  #access MyROGroup "" any noauth 0 all none none
  #access MyRWGroup "" any noauth 0 all all all
  #### /etc/snmp/snmp.conf endt##########
  /etc/rc.d/init.d/snmpd start
2.安装配置mrtg
  在安装mrtg之前所必须的安装两个包,libpng,gd
  wget http://planetmirror.com/pub/sourceforge/libpng/libpng-1.0.15.tar.gz   gunzip -c libpng-*.tar.gz |tar xf -
  rm libpng-*.tar.gz
  mv libpng-* /usr/local/src/libpng
  cd libpng
  make -f scripts/makefile.std CC=gcc ZLIBLIB=../zlib ZLIBINC=../zlib
  rm *.so.* *.so
  wget http://www.boutell.com/gd/http/gd-1.8.4.tar.gz   gunzip -c gd-*.tar.gz |tar xf -
  rm gd-*.tar.gz
  mv gd-* gd
  cd gd
  perl -i~ -p -e s/gd_jpeg.o//g Makefile
  make INCLUDEDIRS="-I. -I../zlib -I../libpng" LIBDIRS="-L../zlib -L. -L../libpng" LIBS="-lgd -lpng -lz -lm" CFLAGS="-O -DHAVE_LIBPNG"
  cd ..
  wget ftp://linux.tnc.edu.tw/pub/Sysop/MRTG/mrtg-2.9.28.tar.gz   tar zvxf mrtg-2.9.28.tar.gz
  cd mrtg-2.9.28
  ./configure --prefix=/usr/local/mrtg --with-gd=/usr/local/src/gd --with-z=/usr/local/src/zlib --with-png=/usr/local/src/libpng
  make && make install
  3.配置mrtg
  mkdir /usr/local/apache/htdocs/mrtg 这里/usr/local/apache/htdocs是www的默认主页地址,大家可能跟我不同
  cp images/* /usr/local/apache/htdocs/mrtg images/*是在安装源文件夹里
  下面接着:
  /usr/local/mrtg/bin/mrtg /usr/local/apache/htdocs/mrtg/mrtg.cfg
  这个需要运行3次,前两次都会报错,不用去理会他,第3次就应该没有错误了,不过,若是有问题的话,就需要改mrtg.cfg,
  再执行直到没有错误发生为止。
  由于需要将多台服务器的信息输出到一个页面,
  /usr/local/mrtg/bin/cfgmaker --output=/usr/local/apache/htdocs/mrtg/mrtg.cfg
  创建一个mrtg.cfg文件在/usr/local/apache/htdocs/mrtg目录下,由于需要将多台服务器的信息输出到一个页面,所以我们必须对 mrtg.cfg进行了修改,我们需要把每一台服务器的网络流量,内存使用状态,CPU使用状态,还有磁盘的读写状态都需通过mrtg.cfg来显示,如下是我的做法,可以参考:
  # Created by yzjboy
  ### Global Config Options
  # for UNIX
  # WorkDir: /home/http/mrtg
  # or for NT
  # WorkDir: c:mrtgdata
  ### Global Defaults
  # to get bits instead of bytes and graphs growing to the right
  Options[_]: growright, bits
  WorkDir: /usr/local/apache/htdocs/mrtg/
  Options[_]:growright,bits
  Refresh: 300
  Interval: 5
  Language:GB2312
  #########################################
#############################
  # System: www2
  # Description: Linux wy1 2.4.20-8smp #1 SMP Thu Mar 13 17:45:54 EST 2003 i686
  # Contact: Root <root@wuying.com> (configure /etc/snmp/snmp.local.conf)
  # Location: wy1.wuying.com (edit /etc/snmp/snmpd.conf)
  #######################################
###############################
  ### Interface 2 >> Descr: 'eth0' | Name: '' | Ip: '192.168.0.1' | Eth: '00:D0:B7:7E:7A:D1' ###
  Target[192.168.0.1_192.168.0.1]: /192.168.0.1:public@192.168.0.1:
  SetEnv[192.168.0.1_192.168.0.1]: MRTG_INT_IP="192.168.0.1" MRTG_INT_DESCR="eth0"
  MaxBytes[192.168.0.1_192.168.0.1]: 1024000
  Xsize[192.168.0.1_192.168.0.1]: 300
  Ysize[192.168.0.1_192.168.0.1]: 100
  #kmg[192.168.0.1_192.168.0.1]: M/s
  #kilo[192.168.0.1_192.168.0.1]: 1024
  Title[192.168.0.1_192.168.0.1]: Traffic for www1服务器网络流量
  PageTop[192.168.0.1_192.168.0.1]: <H1>Traffic for www1服务器网络流量</H1>
  #Options[192.168.0.1_192.168.0.1]: growright,gauge,nopercent
  ###MEM status
  Target[WWW1_mem]:`snmpwalk -v 1 192.168.0.1 -c public .1.3.6.1.4.1.2021.53 | grep 53.101 | awk -F" '{print $2}'`
  #Targey[WWW1_mem]: memTotalReal.0&memAvailReal.0:holdata@holdata.3322.org
  Xsize[WWW1_mem]: 300
  Ysize[WWW1_mem]: 100
  Ytics[WWW1_mem]: 7
  MaxBytes[WWW1_mem]: 1006
  Title[WWW1_mem]:NAS服务器内存状态
  PageTop[WWW1_mem]:<H1>NAS服务器内存状态</H1>
  ShortLegend[WWW1_mem]:
  kmg[WWW1_mem]: MB
  kilo[WWW1_mem]:1024
  YLegend[WWW1_mem]: Memory Usage
  Legend1[WWW1_mem]: 可用内存
  Legend2[WWW1_mem]: 总内存量
  Legend3[WWW1_mem]: 可用内存
  Legend4[WWW1_mem]: 总内存量
  LegendI[WWW1_mem]: 可用内存
  LegendO[WWW1_mem]: 总内存量
  Options[WWW1_mem]: growright,gauge,nopercent
  ###cpu status
  Target[WWW1_CPU]:`snmpwalk -v 1 192.168.0.1 -c public .1.3.6.1.4.1.2021.54 | grep 54.101 | awk -F" '{print $2}'`
  #Targey[WWW1_CPU]: memTotalReal.0&memAvailReal.0:holdata@holdata.3322.org
  Xsize[WWW1_CPU]: 300
  Ysize[WWW1_CPU]: 100
  Ytics[WWW1_CPU]: 7
  MaxBytes[WWW1_CPU]: 100
  Title[WWW1_CPU]:www1服务器CPU状态
  PageTop[WWW1_CPU]:<H1>www1服务器CPU状态</H1>
  ShortLegend[WWW1_CPU]:
  kmg[WWW1_CPU]: %
  #kilo[WWW1_CPU]:1024
  YLegend[WWW1_CPU]: CPU Usage
  Legend1[WWW1_CPU]: 已用CPU:
  Legend2[WWW1_CPU]: 可用CPU:
  LegendI[WWW1_CPU]: 已用CPU:
  LegendO[WWW1_CPU]: 可用CPU:
  Options[WWW1_CPU]: growright,gauge,nopercent
  ###iostat
  ###cpu status
  Target[WWW1_IO]:`snmpwalk -v 1 192.168.0.1 -c public .1.3.6.1.4.1.2021.55 | grep 55.101 | awk -F" '{print $2}'`
  #Targey[WWW1_IO]: memTotalReal.0&memAvailReal.0:holdata@holdata.3322.org
  Xsize[WWW1_IO]: 300
  Ysize[WWW1_IO]: 100
  Ytics[WWW1_IO]: 7
  MaxBytes[WWW1_IO]: 10000
  Title[WWW1_IO]:www1服务器磁盘存储状态
  PageTop[WWW1_IO]:<H1>www1服务器磁盘存储状态</H1>
  ShortLegend[WWW1_IO]:
  kmg[WWW1_IO]: K/s,M/s
  kilo[WWW1_IO]:1024
  YLegend[WWW1_IO]: DISK IO SPEED
  Legend1[WWW1_IO]: IO速度:
  Legend2[WWW1_IO]: IO速度:
  LegendI[WWW1_IO]: IO速度:
  LegendO[WWW1_IO]: IO速度:
  Options[WWW1_IO]: growright,gauge,nopercent
  用同样方法加入其他服务器snmp相关数据,
  制作首页index.html:
  /usr/local/mrtg/bin/indexmaker
  --output=/usr/local/apache/htdocs/mrtg/index.html
  --title=服务器流量统计
  /usr/local/apache/htdocs/mrtg/mrtg.cfg
  上面这个程序indexmaker是在制作首页。会自动地输出一个index.html的文件中。
  使用手工运行mrtg并不能定时产生适当的统计信息,因此最好还是定时自动运行mrtg来生 成统计信息,默认为五分钟运行一次。
  作为root身份crontab -e进入编辑状态,添加内容如下:
  */5 * * * * /usr/local/mrtg/bin/mrtg /usr/local/apache/htdocs/mrtg/mrtg.cfg
  ok!到此为止,配置完毕,记得一定要启动snmp和httpd服务!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: