cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此,snmp和rrdtool是cacti的关键。Snmp关系着数据的收集,rrdtool关系着数据存储和图表的生成。 SNMP是英文“Simple Network Management Protocol”的缩写,中文意思是“简单网络管理协议”。

SNMP是目前最常用的环境管理协议。SNMP被设计成与协议无关,所以它可以在IP,IPX,AppleTalk,OSI以及其他用到的传输协议上被使用。SNMP是一系列协议组和规范(见下表),它们提供了一种从网络上的设备中收集网络管理信息的方法。SNMP也为设备向网络管理工作站报告问题和错误提供了一种方法。

实验1:
http://www.cyberciti.biz/nixcraft/linux/docs/uniqlinuxfeatures/mrtg/
可以参考上面网站的
MRTG:Multi Router Traffic Grapher------MRTG是一个监控网络链路流量负载的工具软件,通过snmp协议得到设备的流量信息,并将流量负载以包含PNG格式的图形的HTML 文档方式显示给用户,以非常直观的形式显示流量负载,但是采集的数据没有存储起来。

Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。
Cacti 有三大组件:MySQL 数据库、RRDtool 工具、Net-Snmp 程序。
MySQL并不负责监控数据的存储,只保存模板和rra 文件与主机对应等信息,而真正的监控数据存储和图像展现都是rrdtool 来做的。而Net-SNMP 负责数据的采集。

cacti偏重于网络流量,系统负载方面的监控。
Nagios则比较注重于主机和服务的监控。

安装cacti-0.8.7h.tar.gz

yum install httpd php php-mysql php-gd php-xml php-snmp mysql mysql-devel net-snmp rrdtool net-snmp-devel net-snmp-utils -y
/etc/init.d/httpd start

net-snmp-utils-5.3.1-14.el5   #用于提供snmpget、snmpwalk等snmp数据采集命令
net-snmp-5.3.1-14.el5         #提供snmp数据采集服务


vim /etc/php.ini
date.timezone = Asia/Chongqing  大概在947行

vim /etc/snmp/snmpd.conf
#com2sec notConfigUser  default       public
com2sec local     localhost        public  #允许本机和本地192.168.0.0网络的主机
com2sec mynetwork 192.168.0.0/24      public

#group   notConfigGroup v1           notConfigUser
#group   notConfigGroup v2c           notConfigUser
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.1
#view    systemview    included   .1.3.6.1.2.1.25.1.1
view all    included  .1                               80

#access  notConfigGroup ""      any       noauth    exact  systemview none none
access MyROGroup ""      any       noauth    exact  all    none   none
access MyRWGroup ""      any       noauth    exact  all    all    none

syslocation RHEL6.0
syscontact Root <root@localhost>

snmpwalk -v 1 -c public localhost IP-MIB::ipAdEntIfIndex    测试snmp的配置

tar zxf cacti-0.8.7h.tar.gz
mv cacti-0.8.7h  /var/www/html/cacti
useradd cacti
cd /var/www/html/cacti/
chown -R cacti rra log
vim include/config.php
$database_username = "cacti";
$database_password = "westos";
mysqladmin create cacti   如果mysql有密码,则 mysqladmin create -pwestos cacti
cd /var/www/html/cacti
mysql cacti < cacti.sql 或mysql cacti -pwestos < cacti.sql 导入cacti的表结构
mysql
grant all on cacti.* to cacti@localhost identified by 'westos';
flush privileges;

mysql
show databases;
ll /var/www/html/cacti/rra
su - cacti
crontab -e
*/5 * * * * php /var/www/html/cacti/poller.php > /dev/null 2>&1
php /var/www/html/cacti/poller.php

打开浏览器   http://desktop77/cacti/install    
进去安装,然后再登录  admin  admin 进去后就可以查看图形
实验中遇到的问题:
1.如果系统时间设置的不对,则应调整系统时间
date -s "2012-07-17 09:46:33"    设置系统时钟
hwclock  --hctosys     硬件时钟与系统时钟同步

安装cacti-spine-0.8.7h.tar.gz  #此软件包是用来加速与数据库交互取数据的,默认使用cmd.php。因为cmd.php跨机房绘图有时不连贯,所以我们选用spine。此软件包限选。如果使用spine,就必须确保spine的路径正确。
yum install libtool -y
yum install mysql-devel -y
yum install net-snmp-devel -y
tar zxf cacti-spine-0.8.8a.tar.gz
cd cacti-spine-0.8.8a           #安装其他插件需要安装此软件包

##解释下命令

(1.autoscan (autoconf): 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。
your source files --> [autoscan*] --> [configure.scan] --> configure.ac
2.aclocal (automake):根据已经安装的宏,用户定义宏和acinclud.m4文件中的宏将configure.ac文件所需要的宏集中定义到文件 aclocal.m4中。aclocal是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”
3.autoheader(autoconf): 根据configure.ac中的某些宏,比如cpp宏定义,运行m4,声称config.h.in

4.automake: automake将Makefile.am中定义的结构建立Makefile.in,然后configure脚本将生成的Makefile.in文件转换为Makefile。如果在configure.ac中定义了一些特殊的宏,比如AC_PROG_LIBTOOL,它会调用libtoolize,否则它会自己产生config.guess和config.sub
5.autoconf:将configure.ac中的宏展开,生成configure脚本。这个过程可能要用到aclocal.m4中定义的宏。

##以上是解释命令

aclocal  如果没有这个命令,则是libtool没有安装
libtoolize  --force
autoheader    

autoconf   出现的错误可以不管

automake
./configure   --with-mysql=/usr/local/lnmp/mysql/ #如果是源码安装的lnmp架构,则需接--with-mysql=/usr/local/lnmp/mysql/
make && make install
cd /usr/local/spine/etc/
cp spine.conf.dist spine.conf
vim spine.conf
DB_User         cacti
DB_Pass         westos
然后在cacti的图形界面配置:console-》setting-》paths-》找“Alternate Poller Path” 填“/usr/local/spine/bin/spine”-》找“poller” “Poller Type” 选“spine” ,最后保存

安装cacti插件
下载cacti-plugin-0.8.7h-PA-v3.0.tar.gz              安装原版插件补丁包
tar cacti-plugin-0.8.7h-PA-v3.0.tar.gz
cd cacti-plugin-arch
cp cacti-plugin-0.8.7h-PA-v3.0.diff /var/www/html/cacti/  将插件文件放到cacti的目录
mysql cacti -pwestos < pa.sql  将插件数据库文件导入mysql数据库
cd /var/www/html/cacti/
patch -p1 -N < cacti-plugin-0.8.7h-PA-v3.0.diff    在cacti目录下生成插件目录
然后可以在cacti的图形界面中:左列点用户管理-》点admin用户名-》右下勾上插件管理 -》保存

安装monitor,setting等插件  
下载 cacti-settings.tar.gz ,cacti-monitor.tar.gz    
tar zxf cacti-settings.tar.gz -C /var/www/html/cacti/plugins  #公共设置
tar zxf cacti-monitor.tar.gz -C /var/www/html/cacti/plugins  #实现监控功能
进cacti图形界面,点左列插件管理,安装并激活两个插件
cd /var/www/html/cacti/include/
vim config.php
在?>前面加  $url_path = "/cacti/"
然后进图形界面,点上面的monitor,会有监控的主机情况

安装thold       实现报警功能
下载cacti-thold.tar.gz  
tar zxf cacti-thold.tar.gz -C /var/www/html/cacti/plugins
进cacti图形界面,安装并激活

监控其他linux主机:比如222.24.25.44    #我当时监控其他linux主机,snmp可以采集到数据,就是不往rra目录里面写,但是rra已经有写权限了,就是因为spine的路径没写正确导致的。还有,出现问题一定要看cacti的log,里面有很详细的日志记录。
先执行这条命令:snmpwalk -v 1 -c public 222.24.25.44 IP-MIB::ipAdEntIfIndex
会出现以下语句就好了:
IP-MIB::ipAdEntIfIndex.127.0.0.1 = INTEGER: 1
IP-MIB::ipAdEntIfIndex.222.24.25.44 = INTEGER: 2
另外snmp的配置文件要修改,iptables要关掉
注:如果不能监控别的主机,cacti的监控界面没有任何图形,则需检查selinux,iptables,php配置文件的时区,系统时间(date)。如果cacti可以采集到其他主机的信息,但不能绘图,则需检查cacti目录下的rra,log目录的权限。

步骤(1).console->device然后点击右上角的Add.
   Description:desktop85.example.com
   Hostname: 192.168.0.25
   Host Template : ucd/net SNMP Host
   SNMP Options:
       SNMP Version: Version 1
   然后点击右下角的create。
    (2)create之后在页面的右上角会出现 Create Graphs for this Host,点击一下
   选择你要监控的主机Host:desktop25.example.com(192.168.0.25)
           Graph Types:All

在下面的Graph Templates下选择:
   Graph Template Name      
   Create: ucd/net - CPU Usage    
   Create: ucd/net - Load Average    
   Create: ucd/net - Memory Usage

   然后你还可以create:select a graph type to create
   在Data Query中选择你要监控的数据。可以全选,
然后再右下角的:select a graph type:In/Out Bits
   之后点击Create
   (3)console->Graph Tree
   在右上角点击:Add
   Name:desktop25.example.com
   Sorting Type:Mannual Ordering

   然后点击create
   然后再弹出的一个页面上会显示Save Successful。然后你在添加:tree Items 点击右房的Add修改:tree Item Type 选择HOST,在 Tree Item values:Host选择:desktop25.example.com
然后在Round Robin Archive:后面选择:Daily(5 minutes Average)之后点击create。然后点击Save
   (4)此时你可以点击graphs 可以看到Host:desktop25.example.com点击一下可以看到你所监控的desktop25机子上的一些变化。


实验2:

整合nagios 的cacti:
先为cacti安装npc插件:npc-2.0.4.tar.gz
rpm -q php-pdo
rpm -q php-json   先检测这两个php相关包
vim /etc/php.ini    确保date.timezone=Asia/Chongqi  时间设置正确
tar zxf npc-2.0.4.tar.gz  -C /var/www/html/cacti/plugins
/etc/init.d/mysqld status     确保mysql运行
浏览器 http://222.24.25.248/cacti   进去安装npc插件
安装之后,点console -》设置-》npc->在remote command前打勾,并在下面两个框里写上:/usr/local/nagios/var/rw/nagios.cmd  http://222.24.25.248/nagios 然后保存


下面配置nagios
vim /usr/local/nagios/etc/nagios.cfg   前三个是默认的,只需修改第四个
check_external_commands=1

command_check_interval=‐1

event_broker_options=‐1

broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg             大概在249行
下载:ndoutils-1.4b7.tar.gz     将nagios的数据导入到mysql数据库中
tar zxf ndoutils-1.4b7.tar.gz
cd ndoutils-1.4b7
./configure --with-mysql-lib=/usr/lib/mysql
如果不加 --with-mysql-lib=/usr/lib/mysql,则在安装完后重启nagios会报错:不能加载ndomod.o这个库
make
cd  config
cp ndo2db.cfg /usr/local/nagios/etc/
cp ndomod.cfg /usr/local/nagios/etc/
cd  ../src
cp ndomod-3x.o /usr/local/nagios/bin/ndomod.o
cp ndo2db-3x /usr/local/nagios/bin/ndo2db
此时可以在数据库中查看
mysql -ucacti  -pwestos
show database;
use cacti;
show tables;       会有以npc_为前缀的表
vim /usr/local/nagios/etc/ndo2db.cfg
db_name=cacti
db_prefix=npc_
db_user=cacti
db_pass=westos
/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg  启动ndo2db
配置完成

/etc/init.d/nagios  reload

如果tail /var/log/messages   显示:/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg
Could not bind socket: Address already in use
则需:cd /usr/local/nagios/var/
    rm ndo.sock -f
如果在cacti的npc里,nagios的状态为off,则/etc/init.d/nagios  restart