用 Cacti 监视 Linux 服务器

给每年的 hacker 大会提供网络支持是件很有挑战的事情,弄不好就会有 hacker 当场黑掉网络这种尴尬事情出现。看看刚刚过去的 Defcon 大会技术人员是怎么架设网络的,使用了哪些有趣的硬件和软件,这里有 图片报道:2009 Defcon 的网络图片报道:2008年 Defcon 的网络。Defcon 技术人员用 OpenBSD 做 Firewall 跑在 Xeon 服务器上,用 Cacti 监测流量。VPSee 一直都用 Nagios 来监测自己的多台服务器,对 Cacti 很好奇,今天刚好有时间安装试试看。

安装 Cacti

安装必要的软件包:

# yum install net-snmp-utils php-snmp net-snmp-libs
# yum install perl-rrdtool rrdtool

Cacti 官方网站下载 cacti-0.8.7e.tar.gz:

# tar zxvf cacti-0.8.7e.tar.gz
# mv cacti-0.8.7e /var/www/cacti

给 cacti 打补丁:

# 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 < cross_site_fix.patch
# patch -p1 -N < fix_icmp_on_windows_iis_servers.patch
# patch -p1 -N < snmp_invalid_response.patch
# patch -p1 -N < template_duplication.patch

配置 Cacti

创建 Cacti 需要的数据库:

# mysql -u root -p
mysql> CREATE DATABASE cacti;
mysql> GRANT ALL ON cacti.* TO vpsee@localhost IDENTIFIED BY 'password';
mysql> FLUSH privileges;

初始化 Cacti 数据库表:

# mysql -u vpsee -p cacti < /var/www/cacti/cacti.sql

修改 Cacti 配置文件以连接到上面的数据库:

# vi /var/www/cacti/include/config.php
 
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "vpsee";
$database_password = "password";
$database_port = "3306";

安装 Cacti 插件工具

# wget -c http://mirror.cactiusers.org/downloads/plugins/cacti-plugin-0.8.7e-PA-v2.6.zip
# unzip cacti-plugin-0.8.7e-PA-v2.6.zip
# patch -p1 -N < cacti-plugin-arch/cacti-plugin-0.8.7e-PA-v2.6.diff
# mysql -u vpsee -p cacti < cacti-plugin-arch/pa.sql

安装 Monitor 插件

安装 monitor 插件可以监视 host/device 是否在线,先把 monitor 插件移到 plugins 目录,然后在 include/global.php 激活插件:

# wget -c http://cactiusers.org/downloads/monitor.tar.gz
# tar zxvf monitor.tar.gz
# mysql -u vpsee -p cacti < monitor/monitor.sql
# mv monitor /var/www/cacti/plugins/

# vi /var/www/cacti/include/global.php
$plugins = array();
//$plugins[] = 'thold';
$plugins[] = 'monitor';

配置 Web Server

配置 Web 服务器指向 Cacti 的安装目录 /var/www/cacti/

配置 SNMP

在需要监测的 Linux 机器上配置和启动 snmpd:

# vi /etc/snmp/snmpd.conf

agentaddress tcp:161
rocommunity mycommunity

启动 snmpd:

# /etc/init.d/snmpd start
# chkconfig snmpd on

配置 Cron

每5分钟执行一次:

# crontab -e

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

运行

打开浏览器,访问 http://www.example.com/cacti/ 应该可以看到界面了,默认用户名/密码是:admin/admin

不能显示图形?

登入进去后发现其他都正常就是图形不能显示出来,运行一下 poller.php 后可以看到图片了,但又出现新问题,图片上没有数据,并且报错:

# php /var/www/cacti/poller.php 

08/14/2009 10:03:40 AM - POLLER: Poller[0] WARNING: Cron is out of sync with the Poller Interval!  The Poller Interval is '300' seconds, with a maximum of a '300' second Cron, but 2420 seconds have passed since the last poll!
OK u:0.00 s:0.00 r:1.00
OK u:0.00 s:0.00 r:1.00
08/14/2009 10:03:42 AM - SYSTEM STATS: Time:1.2165 Method:cmd.php Processes:1 Threads:N/A Hosts:2 HostsPerProcess:2 DataSources:6 RRDsProcessed:6
OK u:0.00 s:0.00 r:1.00
OK u:0.00 s:0.00 r:1.00
OK u:0.00 s:0.00 r:1.00
OK u:0.00 s:0.00 r:1.02

怀疑是 crond 的问题,检查一下 crond,发现系统上没有 crond,安装完后刷新页面,图形就能正确显示了。

# ps aux | grep crond
root     17047  0.0  0.0   3908   696 pts/1    S+   10:32   0:00 grep crond

# yum install vixie-cron
# /etc/init.d/crond start

如果图形还不能正确显示,检查一下执行 cron 的用户存不存在:
*/5 * * * * cacti /usr/bin/php /var/www/cacti/poller.php > /dev/null 2>&1
需要一个 cacti 用户执行 cron,所以需要创建一个 cacti 用户,我用的是 root。

发表评论