Cacti使用手册
一、概述
1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此,snmp和rrdtool是cacti的关键。Snmp关系着数据的收集,rrdtool关系着数据存储和图表的生成。
 
2. Mysql配合PHP程序存储一些变量数据并对变量数据进行调用,如:主机名、主机ip、snmp团体名、端口号、模板信息等变量。
 
3. snmp抓到数据不是存储在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目录的rra文件夹下)。rrdtool对数据的更新和存储就是对rrd文件的处理。
 
二、Cacti的架构及工作流程
1.cacti的架构
2.cacti的工作流程
 
三、Cacti的安装
1.安装环境:CentOS-5.4
源码包存放目录 /usr/local/src
软件安装目录 /usr/local/
数据存放目录 /data
源码包版本
cacti-0.8.7e
cacti-spine-0.8.7e
cronolog-1.6
httpd-2.2.10
mysql-5.0.75
php-5.2.12
rrdtool-1.2.30
设置计划任务同步时间服务器
*/1 * * * * /usr/sbin/ntpdate pool.ntp.org ; /sbin/clock –w
 
2.安装所需开发包
yum -y install gcc gcc-c++ autoconf automake flex bison kernel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel gettext gettext-devel libart_lgpl libart_lgpl-devel curl curl-devel openssl openssl-devel gd php-gd
 
3.安装snmp服务和 snmpwalk snmpget等工具
yum –y install net-snmp net-snmp-devel net-snmp-libs net-snmp-utils php-snmp
 
4.安装mysql 数据存放目录 /data/mysql
useradd -s /sbin/nologin mysql
./configure --prefix=/usr/local/mysql --localstatedir=/data/mysql/data --with-charset=gbk --with-extra-charsets=all --enable-thread-safe-client --without-debug --enable-static --without-innodb --with-pthread
make ; make install
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /data/mysql/
/usr/local/mysql/bin/mysql_install_db --user=mysql &>/dev/null
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
cp /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
/etc/rc.d/init.d/mysqld restart
chkconfig mysqld on
 
5.安装apache 虚拟主机根目录 /data/www 日志存放路径 /data/wwwlog
./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --enable-deflate --enable-cgid --with-curl --enable-ssl --with-ssl --enable-mods-shared=all --enable-track-vars
make ; make install
echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.local
make clean ; cd ..
useradd -s /sbin/nologin apache
chown -R apache:apache /data/www /data/wwwlog
chmod g+s /data/www
 
6.安装php
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --enable-fastcgi --enable-mbstring --disable-ipv6 --with-zlib-dir --with-gd --with-libxml-dir --with-png-dir --with-jpeg-dir --with-curl --with-freetype-dir --with-snmp
make ; make install
cp php.ini-dist /usr/local/php/lib/php.ini
 
7.整合apache与php
添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>
 
8.安装rrdtool
./configure --prefix=/usr/local/rrdtool
make ; make install
 
9.安装cacti
tar –zxvf cacti-0.8.7e.tar.gz /usr/local/src
cp –r cacti-0.8.7e /data/www/cacti
useradd cactiuser
usermod -a -G apache cactiuser
chown -R apache:apache /data/www /data/wwwlog
chown -R cactiuser /data/www/cacti/rra
chown -R cactiuser /data/www/cacti/log
 
10.配置数据库,新建供cacti使用的库,用户,并授权,导入/data/www/cacti/cacti.sql
mysql –uroot –p
Password:
mysql> create database cactidb;
Query OK, 1 row affected (0.00 sec)
 
mysql> grant all on cacti.* to cactiuser@localhost identified by “cacti”;
Query OK, 1 row affected (0.00 sec)
 
mysql>exit
# cd /usr/local/apache/htdocs/cacti
# mysql –uroot –p cacti < cacti.sql
Password:
 
11.在cacti中配置数据库信息
vi /data/www/cacti/include/config.php
 
$database_type = "mysql";
$database_default = "cactidb";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "cacti";
$database_port = "3306";
 
12.安装spine 不是必须,可选,对应cacti的版本下载对应的版本
cd /usr/local/src/cacti-spine-0.8.7e
aclocal
libtoolize --force
autoconf
autoheader
automake
./configure --prefix=/usr/local/spine
make ; make install
 
13.被监控端的配置
被监控端需要开启snmp服务
yum –y install net-snmp net-snmpd-devel
配置/etc/snmpd/snmpd.conf
找出这三行:
com2sec notConfigUser default       public    配置监控端IP
将default修改为cacti监控端的IP,public是默认的口令,如有必要可修改
access notConfigGroup ""      any       noauth    exact all none none 监控内容
将none修改为all
#view all    included .1                               80
将#去掉,使条目生效
service snmpd restart
chkconfig snmpd on
可以用以下命令测试是或否能从远端获得数据
snmpwalk -c public -v 2c 218.246.22.170    口令 被监控端地址
如有输出,则成功,无则配置有误
 
14.为cacti用户添加cron任务
su – cactiuser
/usr/local/php/bin/php /data/www/cacti/poller.php
如有输出,则成功,rra目录下会生成.rrd结尾文件
有数据文件.rrd但取不出数据,全为nan说明获取不到数据
注意:首次执行poller.php时请使用cacti用户,否则生成的rrd文件cacti将没有写入权限。
 
su – cactiuser
crontab –e
*/1 * * * *       /usr/local/php/bin/php /data/www/cacti/poller.php > /dev/null 2>&1
四、cacti的配置
1.在浏览器中输入 http://10.20.100.101
默认用户名:admin 密码:admin
更改密码
设置cacti用到的命令路径
/usr/bin/snmpwalk
/usr/bin/snmpget
/usr/bin/snmpbulkwalk
/usr/bin/snmpgetnext
/usr/local/rrdtool/bin/rrdtool
/usr/local/php/bin/php
/data/www/cacti/log/cacti.log
/usr/local/spine/bin/spine
2.进入cacti之后需要修改如下位置,否则会导致出不了图
 
五、cacti插件安装 settings,thold,monitor
1.为cacti-0.8.7e打官方补丁,一定要对照版本
wget http://www.cacti.net/downloads/patches/0.8.7e/cli_add_graph.patch
wget http://www.cacti.net/downloads/patches/0.8.7e/snmp_invalid_response.patch
wget http://www.cacti.net/downloads/patches/0.8.7e/template_duplication.patch
wget http://www.cacti.net/downloads/patches/0.8.7e/fix_icmp_on_windows_iis_servers.patch
wget http://www.cacti.net/downloads/patches/0.8.7e/cross_site_fix.patch
patch -p1 -N < cli_add_graph.patch
patch -p1 -N < snmp_invalid_response.patch
patch -p1 -N < template_duplication.patch
patch -p1 -N < fix_icmp_on_windows_iis_servers.patch
patch -p1 -N < cross_site_fix.patch
 
2.为cacti打cacti-plugin-arch补丁
unzip cacti-plugin-0.8.7e-PA-v2.6.zip
cp cacti-plugin-0.8.7e-PA-v2.6.diff ../
首先使用以下命令进行测试
patch -p1 -N --dry-run < cacti-plugin-0.8.6j.diff
以上命令成功后,使用以下命令进行安装
patch -p1 -N < cacti-plugin-0.8.7e-PA-v2.6.diff
mysql -u root cacti < pa.sql
在对Cacti源程序进行打补丁, 不应该有任何错误,如有误,请重新审查.
 
3.安装settings,thold,monitor
wget -c http://cactiusers.org/downloads/settings.tar.gz
wget -c http://cactiusers.org/downloads/thold.tar.gz
将解压缩出的目录文件放置cacti的plugins目录下.
4.编辑配置文件global.php
vi /data/www/cacti/include/global.php
在$plugins = array();下面添加
$plugins[] = 'thold';
$plugins[] = 'monitor';
$plugins[] = 'settings';
 
5.修改访问设置
"Console"->"User Management"->"admin"->Realm Permissions
将Plugin Management和View Monitoring勾上.
"Console"->"Configuration"->Plugin Management
点击Thresholds的"Install", 之后点击"Enable"
安装完成后,点击thold页面会有段报错
Warning: Division by zero in /var/www/cacti_patched/lib/html_utility.php on line 296
vi /data/www/cacti/lib/html_utility.php
找到 $total_pages = ceil($total_rows / $rows_per_page);
替换成
if ($rows_per_page == 0){
 
$total_pages = 0;
 
}else{
 
$total_pages = ceil($total_rows / $rows_per_page);
 
}
 
六、模板的安装
1. Advance Ping 脚本及模板
要使用此模板,编译PHP时必须加上--enable-sockets    选项来支持套接字。
1). 功能:此模板用来监控一个TCP/UDP端口、ICMP的延时情况和丢包情况。
2).下载ss_fping.php脚本并放到/usr/local/apache/htdocs/cacti/scripts/目录下,下载cacti_graph_template_ping_advanced_ping_v1_3.xml模板,用cacti的模板导入页将此模板导入。
第一项意思是一次向要监控的端口发送多少个探测包(默认20个),第二项是使用的协议,可以是ICMP、TCP、UDP,第三项是要监控的端口号(只有第二项为TCP或是UDP时使用),填写完成后点击create按钮。
在Console控制台选项卡下的左侧菜单中选择Date Sources,选择以上新建的数据源可以修改以上填写的信息。
Pkt Loss:丢包数量/20 * 100%(每次ping 20个包)
Avg Loss:平均丢包情况
Latency:延时情况
Avg Latency:平均延时情况
 
七、监控windows主机
1.windows2003的snmp服务配置
安装snmp
控制面板 -> 添加删除程序 -> 添加/删除windows组件 -> 管理和监视工具 -> 简单网络管理协议(SNMP)
配置snmp
管理工具 -> 服务 -> SNMP Service -> 安全 -> 接受团体名称 添加public,这个是用来登录的密码,自定义的 -> 接受来自这些主机的SNMP数据包 填上你的cacti服务器IP
安装第三方软件snmp informant
注意一定在配置完snmp以后装,不然会提示没有配置snmp
 
2.windows主机模板
cacti模板文件 Cacti_SNMP_INFORMANT_STD_W32_Metrics.zip
解压后10个文件
cacti_data_query_w32_-_cpu_statistics.xml
cacti_data_query_w32_-_network_statistics.xml
cacti_data_query_w32_-_disk_statistics.xml
cacti_data_query_w32_-_object_statistics.xml
cacti_data_query_w32_-_memory_statistics.xml
以上文件在cactit管理界面,Import Templates导入。
 
snmp_informant_disk.xml
snmp_informant_objects.xml
snmp_informant_memory.xml
snmp_informant_cpu.xml
snmp_informant_network.xml
以上文件copy到服务器cacti安装目录的resource/snmp_queries