- yum install net-snmpd
- vi /etc/snmpd/snmpd.conf
- # sec.name source community
- com2sec localMonitor localhost thomas
- # groupName securityModel securityName
- group notConfigGroup v1 localMonitor
- group notConfigGroup v2c localMonitor
- # name incl/excl subtree mask(optional)
- view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
- # group context sec.model sec.level prefix read write notif
- 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赋予对这个视图的只读访问权限。
- service snmpd start
mrtg的工作原理简单来说就是通过snmp协议以及其他程序来收集信息,然后保存在本地文件数据库里,然后生成可视化的图表和页面。如果需要更灵活的分析可以通过结合RRDtool工具来作为数据存储的载体, MRTG-3 将全面采用RRDtool。
一般来说监控页面都是通过web方式访问的,因此首先要搭一个web服务器,这个就不多说了 ,因为所需要的只是一个静态页面的服务器,因此最简单的就可以,在生产环境中很多时候监控机都是一台单独的机器,只是负责定时收集线上的服务器的状态信息的。目前本机是使用nginx来作为WEB服务,将mrtg分析的结果存放在/var/www/mrtg目录下。下面就是配置MRTG来生成我们所需要的监控信息
- yum -y install mrtg*
下载mrtg,目前最新版本为mrtg-2.17.4
# wget http://oss.oetiker.ch/mrtg/pub/mrtg-2.17.4.tar.gz
- # tar zxvf mrtg-2.17.4.tar.gz
- # 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
- # make
- # make install
例子为监控多设备
- cfgmaker public@localhost > /etc/mrtg/mrtg.cfg
- cfgmaker public@192.168.1.10 > /etc/mrtg/192.168.1.10.cfg
- cfgmaker public@192.168.1.11 > /etc/mrtg/192.168.1.11.cfg
这样生成的配置文件自动将通过snmpd服务来获取本机的网络接口的统计加入到MRTG的配置文件中,一般来说有几个网口在工作就会有几个统计项。首先需要修改的是全局配置信息
- vi /etc/mrtg/mrtg.cfg
- WorkDir: /var/www/mrtg
- Options[_]: growright, bits
- Language:utf8
- vi /etc/mrtg/192.168.1.10.cfg
- WorkDir: /var/www/mrtg
- Options[_]: growright, bits
- Language:utf8
- vi /etc/mrtg/192.168.1.11.cfg
- WorkDir: /var/www/mrtg
- Options[_]: growright, bits
- Language:utf8
第2行是手动指定的,定义MRTG的输出目录,第3行取消注释就可以,第4行是添加上去的。
- env LANG=C /usr/bin/mrtg /etc/mrtg/*.cfg
执行三次,头两次一般会有警告,没有关系,如果第三次还报错就可能有配置错误了,运行结束后WorkDir指定的目录下会生成各个配置项的监控信息图片和页面
- #indexmaker --output=/var/www/mrtg/index.html --title="test MRTG on linux" /etc/mrtg/*.cfg
crotabl -e后输入以下内容
- */5 * * * env LANG=C /srv/mrtg/bin/mrtg /srv/mrtg/*.cfg > /dev/null &
五分钟收集一次信息
接下来可以通过自己写一些脚本程序来输出想要的状态信息,MRTG同样可以将这些信息进行记录分析,例如在mrtg.cfg末尾添加
- Target[cpu]: `/srv/mrtg/mybin/cpu.sh`
- MaxBytes[cpu]: 100
- Options[cpu]: gauge, nopercent, growright
- YLegend[cpu]: CPU loading (%)
- ShortLegend[cpu]: %
- LegendO[cpu]: CPU usr;
- LegendI[cpu]: CPU sys;
- Title[cpu]: CPU Load
- PageTop [cpu]:<H1>CPU Load</H1>
这个配置的意思就是说通过/etc/mrtg/mybin/cpu.sh程序的输出来获取信息,放括号内的标识(cpu)也是MRTG将要生成的文件名的前缀,/etc/mrtg/mybin/cpu.sh的内容
- #!/bin/bash
- function echo_cpu {
- echo $1
- echo $2 }
- cpuinfo=` sar -u 1 3|grep Average|awk '{print $3, $5}'`
- uptime=` uptime|cut -d , -f 1,2`
- echo_cpu $cpuinfo
- echo $uptime
- hostname
这个程序的输出结果:
- 0.06
- 0.04
- 10:53:15 up 43 days, 17:38
- 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")