您的位置:首页 > 理论基础 > 计算机网络

用lnmp与cacti实现网络监控

2014-04-25 22:57 253 查看
这段时间,大家跟着我一块已经看了很多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... noconfigure: 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 startingSPINE: Time: 0.2860 s, Threads: 5, Hosts: 2

浏览器中设置: http://192.168.0.34/cacti 1.setting->path->添加启动路径‘/usr/local/spine/bin/spine’->save2.seting->poller->选择spine->save(轮询方式为spine)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: