Chinaunix首页 | 论坛 | 博客
  • 博客访问: 553146
  • 博文数量: 81
  • 博客积分: 5015
  • 博客等级: 大校
  • 技术积分: 866
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-25 09:08
个人简介

www.cloud86.cn

文章分类

全部博文(81)

文章存档

2017年(2)

2014年(1)

2011年(1)

2007年(5)

2006年(31)

2005年(41)

我的朋友

分类: 系统运维

2005-06-25 10:55:26

当服务器达到30台的的情况下必须要进行统一管理,例如统计服务器群的网络流量, 内存状态, CPU状态, 磁盘存储状态,经过无数小时的努力,终于把它应用在IDC30多台服务器群,大大方便每天检查服务器运行状态、负载等情况。

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

当服务器达到30台的的情况下必须要进行统一管理,例如统计服务器群的网络流量, 内存状态, CPU状态, 磁盘存储状态,经过无数小时的努力,终于把它应用在IDC30多台服务器群,大大方便每天检查服务器运行状态、负载等情况。

硬件:

其中1台服务器安装mrtg, apache,net-snmp 其他服务器只需安装net-snmp

系统环境:

redhat9.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

 

由于需要对CPUMemIO状态进行监控,所以本人在/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 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 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/htdocswww的默认主页地址,大家可能跟我不同
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 (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]:

Traffic for www1服务器网络流量

#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]:

NAS服务器内存状态

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]:

www1服务器CPU状态

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]:

www1服务器磁盘存储状态

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!
到此为止,配置完毕,记得一定要启动snmphttpd服务哦!

访问:

就能看到流量图了。

阅读(2274) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~