这段时间,大家跟着我一块已经看了很多lnmp——即Linux-nginx-mysql-php,这个架构真的很了不起,它可以实现很多功能,譬如通过整合nginx做负载均衡、虚拟主机....,接下来继续给大家介绍lnmp架构。本博文是通过整合lnmp+cacti实现网络监控功能。

    大家都知道,cacti本身是用来做监控的,通过snmp采集数据,并将采集到的数据通过rrdtool绘成图形,而用户主机之类的信息都记录在rra文件中,rra文件大小都是固定的,比如当客户端想看到自己磁盘的使用情况,它会向cacti发送请求,cacti根据请求的内容命令rrdtool绘图,最后回送给用户。官方文档:http://docs.cacti.net/wiki:documentation,可以根据自己所用软件的版本,选择合适的Document以供参考,方便大家打架。

    官方文档很壮观啊,全英文,对于英语不好的童鞋们就该晕了,那么,为了大家能够快速而准确的搭建平台,本博主将自己的学习记录粘贴到下面,供大家参考学习。想看的更全面,大家课选择下载下面的附件。

###############工具介绍#######################

snmp:数据采集工具

rrdtool:绘画图表,储存更新数据

cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据


##############cacti简介########################

Cacti是通过 snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善。界面友好。软件 Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量跟系统资讯监控外,Cacti 也可外挂 Scripts 及加上 Templates 来作出各式各样的监控图。

cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此,snmp和rrdtool是cacti的关键。Snmp关系着数据的收集,rrdtool关系着数据存储和图表的生成。

Mysql配合PHP程序存储一些变量数据并对变量数据进行调用,如:主机名、主机ip、snmp团体名、端口号、模板信息等变量。

snmp抓到数据不是存储在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目录的rra文件夹下)。rrdtool对数据的更新和存储就是对rrd文件的处理,rrd文件是大小固定的档案文件(Round Robin Archive),它能够存储的数据笔数在创建时就已经定义。关于RRDTool的知识请参阅RRDTool教学。


########################实现过程############################

需要安装的包有:rrdtool,php,php-mysql,php-xml,php-snmp,net-snmp*



cacti-0.0.8a版本以后都不需要装插件,所以0.0.8a之前的cacti需要安装插件cacti-plugin


cacti-spine-0.8.8b.tar.gz cacti-0.8.8b.tar.gz


[root@server34 ~]# yum install php mysql-server php-gd -y



[root@server34 ~]# tar zxf cacti-0.8.8b.tar.gz -C /var/www/html/



[root@server34 html]# mv cacti-0.8.8b/ cacti


[root@server34 html]# yum install rrdtool -y


[root@server34 html]# yum install php-mysql php-xml -y



安装php-snmp之前先查看系统php的版本


[root@server34 html]# rpm -q php


php-5.3.3-3.el6_2.8.x86_64





[root@server34 ~]# yum localinstall php-snmp-5.3.3-3.el6_2.8.x86_64.rpm -y



修改时区,因为要做crontab,


[root@server34 ~]# vim /etc/php.ini


date.timezone = Asia/Shanghai



[root@server34 ~]# /etc/init.d/httpd start


Starting httpd:                                            [  OK  ]



用于检测所需要的包是否均安装成功


[root@server34 html]# vim index.php


<?php


phpinfo()


?>



依次检查mysql,session,sockets,xml,pcre是否安装成功


http://192.168.0.34                                                                              



数据库首次启动,是初始化,目地创建表结构


[root@server34 ~]# /etc/init.d/mysqld start



mysql加密        


[root@server34 ~]# mysql_secure_installation




[root@server34 ~]# yum list net-snmp*


Loaded plugins: product-id, subscription-manager


Updating certificate-based repositories.


Unable to read consumer identity


Installed Packages


net-snmp.x86_64                        1:5.5-41.el6                 @rhel-source


net-snmp-libs.x86_64                   1:5.5-41.el6                 @rhel-source


Available Packages


net-snmp-devel.i686                    1:5.5-41.el6                 rhel-source


net-snmp-devel.x86_64                  1:5.5-41.el6                 rhel-source


net-snmp-libs.i686                     1:5.5-41.el6                 rhel-source


net-snmp-perl.x86_64                   1:5.5-41.el6                 rhel-source


net-snmp-python.x86_64                 1:5.5-41.el6                 rhel-source


net-snmp-utils.x86_64                  1:5.5-41.el6                 rhel-source



安装snmp简单网络管理工具


[root@server34 ~]# yum install net-snmp-utils.x86_64 -y


[root@server34 ~]# vim /etc/snmp/snmpd.conf


允许snmp采集本机和192.168.0.0/24网段的数据,密钥是public(但这是安全漏洞)


com2sec local localhost public


com2sec mynetwork 192.168.0.0/24 public



group MyRWGroup v1 local  //定义组


group MyRWGroup v2c local


group MyRWGroup usm local


group MyROGroup v1 mynetwork


group MyROGroup v2c mynetwork


group MyROGroup usm mynetwork



view    systemview    included   .1.3.6.1.2.1


view    systemview    included   .1.3.6.1.2.1.25.1.1


view    all    included  .1     80



access  MyROGroup       ""      any     noauth  exact all       none    none


access  MyRWGroup       ""      any     noauth  exact all       all    none



syslocation RHEL6.3


syscontact Root <root@server34.example.com>




disk / 10000  //打开


# % snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.9



[root@server34 ~]# /etc/init.d/snmpd start


Starting snmpd:                                            [  OK  ]



[root@server34 ~]# snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.9


UCD-SNMP-MIB::dskIndex.1 = INTEGER: 1


UCD-SNMP-MIB::dskPath.1 = STRING: /


UCD-SNMP-MIB::dskDevice.1 = STRING: /dev/mapper/VolGroup-lv_root


UCD-SNMP-MIB::dskMinimum.1 = INTEGER: 10000


UCD-SNMP-MIB::dskMinPercent.1 = INTEGER: -1


UCD-SNMP-MIB::dskTotal.1 = INTEGER: 19134332


UCD-SNMP-MIB::dskAvail.1 = INTEGER: 16993208


UCD-SNMP-MIB::dskUsed.1 = INTEGER: 1169144


UCD-SNMP-MIB::dskPercent.1 = INTEGER: 6


UCD-SNMP-MIB::dskPercentNode.1 = INTEGER: 2


UCD-SNMP-MIB::dskTotalLow.1 = Gauge32: 19134332


UCD-SNMP-MIB::dskTotalHigh.1 = Gauge32: 0


UCD-SNMP-MIB::dskAvailLow.1 = Gauge32: 16993208


UCD-SNMP-MIB::dskAvailHigh.1 = Gauge32: 0


UCD-SNMP-MIB::dskUsedLow.1 = Gauge32: 1169144


UCD-SNMP-MIB::dskUsedHigh.1 = Gauge32: 0


UCD-SNMP-MIB::dskErrorFlag.1 = INTEGER: noError(0)


UCD-SNMP-MIB::dskErrorMsg.1 = STRING:



检测:


[root@server34 ~]# snmpwalk -v 1 localhost -c public IP-MIB::ipAdEntIfIndex


IP-MIB::ipAdEntIfIndex.127.0.0.1 = INTEGER: 1


IP-MIB::ipAdEntIfIndex.192.168.0.34 = INTEGER: 2   //出现主机ip时则成功


[root@server34 ~]# snmpwalk -v 1 192.168.0.34 -c public IP-MIB::ipAdEntIfIndex


IP-MIB::ipAdEntIfIndex.127.0.0.1 = INTEGER: 1


IP-MIB::ipAdEntIfIndex.192.168.0.34 = INTEGER: 2



将web运行用户与apache的用户分开,安全运行cacti web页面


[root@server34 cacti]# pwd


/var/www/html/cacti


[root@server34 cacti]#useradd -u 1000 cacti


创建cacti库


[root@server34 cacti]# mysql -pwestos


mysql> create database cacti;




将表cacti.sql的内容导入到cacti库中


[root@server34 cacti]# mysql -pwestos cacti < cacti.sql



关联cacti`数据库与php


[root@server34 include]# vim config.php


$database_type = "mysql";


$database_default = "cacti";


$database_hostname = "localhost";


$database_username = "cacti";  //登录数据库的用户,登录数据库的用户与运行cacti的用户不是同一个


$database_password = "westos";  //登录数据库的密码


$database_port = "3306";


$database_ssl = false;



$url_path = "/cacti/";


$cacti_session_name = "Cacti";



给cacti用户授予运行cacti数据库所有操作权限。


mysql> grant all on cacti.* to cacti@localhost identified by 'westos';



运行以下命令,若能进入则授权成功


[root@server34 include]# mysql -ucacti -pwestos cacti



重启apache


[root@server34 include]# /etc/init.d/httpd restart


Stopping httpd:                                            [  OK  ]


Starting httpd:                                            [  OK  ]



采集数据,每隔5分钟采集一次数据


[cacti@server34 include]$ crontab -e


*/5 * * * * php /var/www/html/cacti/poller.php > /dev/null 2>&1




测试:


http://192.168.0.34/cacti


若无红色出现表示安装成功


注:第一次登录用户密码都是admin



点击graphs,等待五分钟,会绘出图形或者查看rra目录,rra目录下有文件则说明已经采集到数据了。


[cacti@server34 rra]$ ls


localhost_load_1min_5.rrd    localhost_mem_swap_4.rrd  localhost_users_6.rrd


localhost_mem_buffers_3.rrd  localhost_proc_7.rrd


[cacti@server34 rra]$ pwd


/var/www/html/cacti/rra




安装spine:

spine: a backend data gatherer for Cacti (spine是cacti的后端数据采集者)

用spine加快snmp采集数据的速度

poller轮询器

cacti-spine的版本必须与之前下载的cacti包的版本一致

[root@server34 ~]# tar zxf cacti-spine-0.8.8b.tar.gz


安装编译spine的依赖性

[root@server34 ~]# yum install automake autoconf dos2unix gcc make glibc-headers kernel-headers  libtool -y

[root@server34 cacti-spine-0.8.8b]# sh bootstrap


编译

[root@server34 cacti-spine-0.8.8b]# ./configure


错误1:

checking whether we are using Linux Capabilities... no

configure: error: Cannot find MySQL headers.  Use --with-mysql= to specify non-default path.

解决;

[root@server34 cacti-spine-0.8.8b]# yum install mysql-devel -y


再次编译

错误2:

configure: error: Cannot find SNMP headers.  Use --with-snmp= to specify non-default path.

解决:

[root@server34 cacti-spine-0.8.8b]# yum install net-snmp-devel -y


最后编译成功

[root@server34 cacti-spine-0.8.8b]# ./configure


[root@server34 cacti-spine-0.8.8b]# make && make install


[root@server34 etc]# cp -p spine.conf.dist /etc/spine.conf


[root@server34 etc]# pwd


/usr/local/spine/etc


更改spine的配置文件

[root@server34 etc]# vim spine.conf


DB_Host         localhost


DB_Database     cacti


DB_User         cacti


DB_Pass         westos


DB_Port         3306


DB_PreG         1


运行spine,出现以下信息则正确

[root@server34 etc]# /usr/local/spine/bin/spine

SPINE: Using spine config file [spine.conf]

SPINE: Version 0.8.8b starting

SPINE: Time: 0.2860 s, Threads: 5, Hosts: 2


浏览器中设置:

http://192.168.0.34/cacti

1.setting->path->添加启动路径‘/usr/local/spine/bin/spine’->save

2.seting->poller->选择spine->save(轮询方式为spine)