用lnmp与cacti实现网络监控的工具和方法介绍
这段时间,大家跟着我一块已经看了很多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 www.xiaoxiongboke.com 关联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
浏览器中设置:
1.setting->path->添加启动路径‘/usr/local/spine/bin/spine’->save
2.seting->poller->选择spine->save(轮询方式为spine)