1.1 安装snmpd

 
  
  1. yum install net-snmpd 

1.2 配置snmpd.conf
 

 
  
  1. vi /etc/snmpd/snmpd.conf    
  2. #           sec.name     source          community    
  3. com2sec localMonitor  localhost       thomas     
  4. #       groupName      securityModel securityName    
  5. group   notConfigGroup v1           localMonitor    
  6. group   notConfigGroup v2c          localMonitor     
  7. #     name   incl/excl     subtree                               mask(optional)    
  8. view mib2   included  .iso.org.dod.internet.mgmt.mib-2 fc     
  9. #          group          context sec.model sec.level prefix read   write  notif    
  10. access  notConfigGroup ""      any       noauth    exact  mib2 none none  


简单解释一下,首先通过com2sec将公共用户thomas映射到到名为localMonitor的安全用户中,用户的访问被限制在本机,这两个用户名都是自己定义的,系统默认的用户名是public。接下来是将localMonitor添加到notConfigGroup的组中,一个com2sec指令一般对应两个group指令?(Note that groups must be set up for the two community-based models separately - a single com2sec (or equivalent) directive will typically be accompanied by two group directives)接下来定义一个视图,然后通过access为notConfigGroup赋予对这个视图的只读访问权限。

1.3启动snmpd
 

 
  
  1. service snmpd start  


配置MRTG

mrtg的工作原理简单来说就是通过snmp协议以及其他程序来收集信息,然后保存在本地文件数据库里,然后生成可视化的图表和页面。如果需要更灵活的分析可以通过结合RRDtool工具来作为数据存储的载体, MRTG-3 将全面采用RRDtool。
一般来说监控页面都是通过web方式访问的,因此首先要搭一个web服务器,这个就不多说了 ,因为所需要的只是一个静态页面的服务器,因此最简单的就可以,在生产环境中很多时候监控机都是一台单独的机器,只是负责定时收集线上的服务器的状态信息的。目前本机是使用nginx来作为WEB服务,将mrtg分析的结果存放在/var/www/mrtg目录下。下面就是配置MRTG来生成我们所需要的监控信息

2.1 安装MRTG

2.1.1 yum 方式

 
  
  1. yum -y install mrtg* 

 
2.1.2 源码编译安装方式

下载mrtg,目前最新版本为mrtg-2.17.4


# wget http://oss.oetiker.ch/mrtg/pub/mrtg-2.17.4.tar.gz

2.1.3安装mrtg-2.17.4

 

 
  
  1. # tar zxvf mrtg-2.17.4.tar.gz    
  2. # cd mrtg-2.17.4   # ./configure --prefix=/usr/local/mrtg --sysconfdir=/etc/mrtg --with-gd=/usr/local/gd2/include --with-gd-lib=/usr/local/gd2/lib --with-gd-inc=/usr/local/gd2/include --with-png=/usr/local/include --with-png-lib=/usr/local/lib --with-png-inc=/usr/local/include --with-zlib=/usr/local/zlib/include --with-zlib-lib=/usr/local/zlib/include --with-zlib-inc=/usr/local/zlib/include    
  3. # make    
  4. # make install 

2.2使用MRTG的cfgmarker生成配置文件(以yum安装方式为例)

例子为监控多设备

 
  
  1. cfgmaker public@localhost > /etc/mrtg/mrtg.cfg   
  2. cfgmaker public@192.168.1.10 > /etc/mrtg/192.168.1.10.cfg  
  3. cfgmaker public@192.168.1.11 > /etc/mrtg/192.168.1.11.cfg 


这样生成的配置文件自动将通过snmpd服务来获取本机的网络接口的统计加入到MRTG的配置文件中,一般来说有几个网口在工作就会有几个统计项。首先需要修改的是全局配置信息

 

 
  
  1. vi /etc/mrtg/mrtg.cfg  
  2. WorkDir: /var/www/mrtg    
  3. Options[_]: growright, bits  
  4. Language:utf8   
  5.  
  6. vi /etc/mrtg/192.168.1.10.cfg  
  7. WorkDir: /var/www/mrtg  
  8. Options[_]: growright, bits  
  9. Language:utf8   
  10.  
  11. vi /etc/mrtg/192.168.1.11.cfg  
  12. WorkDir: /var/www/mrtg  
  13. Options[_]: growright, bits  
  14. Language:utf8  

第2行是手动指定的,定义MRTG的输出目录,第3行取消注释就可以,第4行是添加上去的。

2.3. 运行MRTG

 

 

 
  
  1. env LANG=C /usr/bin/mrtg /etc/mrtg/*.cfg   

执行三次,头两次一般会有警告,没有关系,如果第三次还报错就可能有配置错误了,运行结束后WorkDir指定的目录下会生成各个配置项的监控信息图片和页面

2.4 生成index.html

 

 
  
  1. #indexmaker --output=/var/www/mrtg/index.html --title="test MRTG on linux" /etc/mrtg/*.cfg 

2.5 编辑计划任务crontab

crotabl -e后输入以下内容

 
  
  1. */5 * * * env LANG=C /srv/mrtg/bin/mrtg /srv/mrtg/*.cfg > /dev/null &  


五分钟收集一次信息

 

接下来可以通过自己写一些脚本程序来输出想要的状态信息,MRTG同样可以将这些信息进行记录分析,例如在mrtg.cfg末尾添加

 
  
  1. Target[cpu]: `/srv/mrtg/mybin/cpu.sh`    
  2. MaxBytes[cpu]: 100   
  3. Options[cpu]: gauge, nopercent, growright    
  4. YLegend[cpu]: CPU loading (%)    
  5. ShortLegend[cpu]: %    
  6. LegendO[cpu]:   CPU usr;    
  7. LegendI[cpu]:   CPU sys;    
  8. Title[cpu]: CPU Load    
  9. PageTop [cpu]:<H1>CPU Load</H1>   

这个配置的意思就是说通过/etc/mrtg/mybin/cpu.sh程序的输出来获取信息,放括号内的标识(cpu)也是MRTG将要生成的文件名的前缀,/etc/mrtg/mybin/cpu.sh的内容

 

 
  
  1. #!/bin/bash    
  2. function echo_cpu {            
  3.      echo $1           
  4.      echo $2 }    
  5. cpuinfo=` sar -u 1 3|grep Average|awk '{print $3, $5}'`    
  6. uptime=` uptime|cut -d , -f 1,2`    
  7. echo_cpu $cpuinfo    
  8. echo $uptime    
  9. hostname  


这个程序的输出结果:

 

 
  
  1. 0.06 
  2. 0.04   
  3. 10:53:15 up 43 days, 17:38   
  4. my-ip.hosting8.info  


第一行为 CPU usr,第二行为 CPU sys,第三行为系统运行时间,第四行为主机名,第三第四行是默认会出现在MRTG的结果页面的不需要定义,只需要定义头两行的意义就可以了。如果要监控其他主机就需要在被监控的机器上部署响应查询的程序,有些是现成的。例如可以通过在目标主机上配置nginx的status页面,然后监控机去抓然后分析就可以了。

 

4. 写一个简单的页面来汇集以上的监控项生成的图片,例如所有今天的图片,链接到各自详细的html文件中去就可以了

5. 为nginx设置访问控制

 

location /var/www/mrtg 
  auth_basic "Restricted";   
  auth_basic_user_file /etc/nginx/htpasswd;
 }
创建密码文件,内容如下

 

# this be passwords 
thisbetheusername:thisbeencryptedpass:yercomment
可以通过Apache的htpasswd程序创建

 

htpasswd -b htpasswd NewUser NewPassword
如果没有htpasswd程序也没关系,密文实际上就是密码字串经过56位DES加密产生的,因此可以通过perl或ruby来产生密文,再复制到密码文件中去

Perl

perl -le 'print crypt("password", "salt")'

Ruby (run in irb)

"password".crypt("salt")