一个依赖互联网站点生存的企业,是不会对他的生存之本疏忽大意的,而企业的本性又是追求利润的最大化,所以在硬件,软件方面的投入又是锱铢必较。我们这些运维人员是在力求软硬件性能最大化的同时保证业务的正常运转。这次我们从企业利润最大化角度构建一套让站点基础硬件及基础软件平稳运行的监控系统。
我们以一个简易网站架构为例(网站架构图来自51CTO的weizhenguo的博客)来解析在应用架构之下的监控体系如何建立的。
![]() |
我们分析一下整个架构图的数据流向: 互联网的访问数据通过防火墙的80端口进入,在web防火墙端对SQL注入攻击,跨站攻击等数据进行一次过滤,真正的访问数据流经过负载均衡组(一个节点容易产生单点故障)把流量分配给主应用服务器区的负载均衡web组(这里应该有缓冲集群,静态文件集群和动态web服务器集群),动态web服务器调用数据库集群(我们常说的主从<一主多从,多主多从等>)的数据来响应用户。这是主体站点,当然为了安全起见,又有日志监控服务器,入侵监测系统,为了网站依然被攻破的情况下,有应急措施,在生产环境的交换机下又挂接了一个防火墙,防火墙后面是一直运行并且和生产环境保持同步的备份机。
好,我们把应用业务分析完毕,怎么去查看每个设备的实时状态呢,比如说防火墙的session数,负载均衡器的硬件利用率,交换机的带宽,单台应用服务器的内存使用率,I/o情况等。这就需要我们建立一套完整的监控系统,让我们运维人员随时了解服务器的喜怒哀乐,灵活的提醒方式更给我们的运维安心和舒畅的心情。^_^,我们开始介绍目前业界流行的监控体系:cacti+nagios构建的全方位监控体系。
我们采用分而治之的方式来分别介绍这个庞大的体系:首先介绍cacti,然后介绍nagios,然后介绍他们的结合点的搭建。
Cacti(http://www.cacti.net/):
Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。他的工作原理是这样的:Net-snmp定时采集数据并把传送给RRDtool,当用户查询某台具体设备的流量时,cacti查找该设备对应的rra文件名称,然后RRDtool绘制图形,cacti把图形展示给客户。
![]() |
Net-snmp定时采集数据存在rrdtool生成的rrd文件中(在cacti根目录的rra文件夹下)。rrdtool对数据的更新和存储就是对rrd文件的处理,rrd文件是大小固定的档案文件(Round Robin Archive),它能够存储的数据笔数在创建时就已经定义。
由于Cacti是基于php开发,且用到mysql数据库,展示用apache服务器,看来一套LAMP基础环境的安装我们是逃不过去了。下面我们就介绍LAMP环境的安装:
LAMP的环境需要的软件
yum install -y gcc gcc-c++ glibc glibc-devel glibc-common autoconf automake libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel gd gd-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel openssl openssl-devel libart_lgpl-devel
一.rpm安装
yum install -y mysql mysql-server mysql-devel httpd php php-mysql
开启服务:
[root@listen html]# service httpd restart
[root@listen html]# service mysqld restart
我们为Mysql设置密码:[root@listen cacti]# mysqladmin -uroot password zhenglang0813
[root@listen html]# chkconfig httpd on
[root@listen www]# chkconfig mysqld on
我们开始安装net-snmp:
[root@listen yum.repos.d]# yum install net-snmp net-snmp-devel net-snmp-libs net-snmp-utils php-snmp
我们开始安装RRDtool这个绘图软件:
[root@listen www]# cd /etc/yum.repos.d/
[root@listen yum.repos.d]# vi dag.repo
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
gpgkey=http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
enabled=1
[root@listen yum.repos.d]# yum install rrdtool perl-rrdtool
好,我们到此为止还只有Cacti没有安装,我们现在就来安装他:
Cacti的下载及安装:
[root@listen ~]# wget -c http://www.cacti.net/downloads/cacti-0.8.7e.tar.gz
[root@listen ~]# tar zxvf cacti-0.8.7e.tar.gz
[root@listen ~]# mv cacti-0.8.7e /var/www/html/cacti
[root@listen ~]# cd /var/www/html/cacti
[root@listen cacti]# chown -R root:root ./*
我们需要创建cacti数据库:
[root@listen cacti]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.0.77 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database cacti;
Query OK, 1 row affected (0.00 sec)
mysql> \q
Bye
You have new mail in /var/spool/mail/root
然后我们用/var/www/html/cacti目录中的cacti.sql来创建表和其中的字段等。
[root@listen cacti]# mysql -uroot -p cacti <cacti.sql
Enter password:
[root@listen cacti]#
下面我们创建一个数据库用户cactiuser并让他对cacti数据库拥有所有的权限。
mysql> grant all on cacti.* to cactiuser@localhost identified by "zhenglang0813";
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit;
下面我们需要更改/var/www/html/cacti下面两个文件进行修改,以使php能够链接到数据库上。
[root@listen cacti]# pwd
/var/www/html/cacti
[root@listen cacti]# cd include
[root@listen include]# vi config.php
找到这一项并修改成如下密码:$database_password = "zhenglang0813";
[root@listen include]# vi global.php
找到这一项并修改成如下密码:$database_password = "zhenglang0813";
到目前为止,我们的安装算是告一段落,下面我们建立任务调度,这样才能使得net-snmp定期采集数据并放到rrdtool下面去
[root@listen include]# crontab -e
*/5 * * * * php /var/www/html/cacti/poller.php >/dev/null 2>&1 ----表明5分钟采集一次数据
[root@listen include]# crontab -l 我们查看刚才的任务计划
接下来我们做的就是初始化Cacti,好,我们现在就开始:http://192.168.0.88/cacti访问如上链接会看到如下画面:
![]() |
我们点击NEXT进入下一页面:我们选择“New Install”
![]() |
然后进入如下页面:图中显示为Cacti寻找出来的各种组件的路径,假如有红色标注的,说明没有找到,这时我们可以查看组件是否安装,以及路径是否正确。当然假如你是按照我操作的步骤的话,那就没有什么问题,
![]() |
好,我们点击finish,进入如下页面:
这是Cacti的默认用户名和密码填写处,默认用户名密码为:admin/admin:
![]() |
填入之后Cacti强制我们修改密码,那我们就修改为:zhenglang0813,到此cacti的庐山真面目算是呈现在我们面前:
![]() |
在介绍怎么使用Cacti之前,我们还需要修改一处:点击左侧的Settings,选择:RRDTool Utility Version的版本为“RRDtool 1.3.x”,因为我们安装的RRDtool组件是1.4的,我们只能在Cacti中选择最靠近这个版本的,不然不能绘制图形。
接下来我们开始介绍Cacti的使用方法: