分类: LINUX
2010-11-17 13:32:47
网络监控之Cacti spine 的安装
作者:pkfeiyang blog:http://pkfeiyang.cublog.cn
一:综述
1.描述
如今换联网发展迅速,服务越来越多,随之你的服务器变增加了,你每天必做的事情就是不断的登录到服务器去查看你的服务器信息,担心负载是不是很高,内存是不是满了等等。
这是你会感到很乏味,那么监控将是你的首选,如今比较流行的监控有,基于服务的nagios,网络的有cacti、gangla、unnoc、mrtg这些都是你的首选,然后你每天喝着茶水,就看着报纸了。
Cacti就是rrdtool的一个forefront,它内置了快速的获数据取工具、优秀的绘图模板以及许多设计精良的数据获取脚本,从而可以 通过结合rrdtool强大的数据抓取、数据存储和绘图功能,轻松实现主机负载、网络流量等信息的走势图的绘制。目前其最新的软件版本是0.8.7g。
2.绘图器的选择
关于cacti的绘图器有两种选择,一种是cmd.php和spine,spine是一个基于C语言的,非常快速的轮询引擎。使用 spine 比 使用 cmd.php 效率高,特别是在当 cmd.php 执行接近或超过 300 秒的时候。cmd.php采集存在大的延迟,从添加设备到up,spine通常不到一分钟,而cmd.php等的时间较长,超过10分钟。当设备down 后 2分钟之内spine可以发出alert,而cmd.php可能需要10分钟以上。
3.关于net-snmp工作原理
NET-SNMP是一種的
命令行应用程序
从支持SNMP的设备获得数据.支持独立请求 (snmpget, snmpgetnext), 与重复请求 (snmpwalk, snmptable, snmpdelta).
对支持SNMP的设备配置属性.(snmpset).
从支持SNMP的设备获取特定的信息.(snmpdf, snmpnetstat, snmpstatus).
将MIB OIDs的两种表现形式(数字及文字)相互转换.并显示MIB的内容与结构(snmptranslate).
一个图形化的MIB浏览器(tkmib).基于Tk/perl.
一个接收SNMP提示消息(SNMP traps)的守护程序.(snmptrapd).可以将选定的SNMP消息记录到系统日志(syslog),NT 事件日志(NT Event Log),文本文件中.或是转发到其它的SNMP管理程序,也可以传给外部的应用程序.
一个回应SNMP查询的客户端.(snmpd).它集成了大量SNMP的模块.并可通过动态链接库,外部脚本与命令,多路SNMP技术(SMUX),以及可扩客户端协议(AgentX)进行扩展.
一个用来开发SNMP应用程序的程序库.支持C 与 perl 的 APIs.
二:cacti 前期准备
1. Cacti 工作流程结构
2. 软件下载
A 系统
Centos5.5 1386
B 安装库文件
我的环境都是yum的,如果你想编译安装的话,自行安装lamp即可。
yum -y install ntp vim-enhanced gcc gcc-c++ gcc-g77 flex bison utoconf automake bzip2-devel ncurses-devel zlib-devel ibjpeg-devel libpng-devel libtiff-devel freetype-devel libXpm-devel gettext-devel pam-devel kernel gd gd-devel LibXML2
LibMcrypt
Cacti 相关软件列表
cacti-spine-0.8.7g.tar.gz
ttfonts-zh_CN-2.14-6.noarch.rpm
rrdtool-1.2.13.tar.gz
net-snmp-5.3.1
(我是yum的)
cacti 0.8.7b (英文版,这里可以不下载,字体根据自己喜好来设置吧)
PHP 版本 5.1.6
Apache/2.2.3
中文汉化 cactiez
cacti-0.8.7b-cn-utf8.tar.gz
http://blogimg.chinaunix.net/blog/upfile2/080822131849.gz
cacti-plugin-0.8.7b-PA-v2.1-cn-utf8.diff.gz http://blogimg.chinaunix.net/blog/upfile2/080822131839.gz
补充:因为cacti 需要http 提供服务,当你的服务器运行多种服务时,注意端口的占用。
当无法修改apache的端口时,可以用stenforce 0 关闭selinux。
三:安装
1 . 安装net-snmp
rpm -qa | grep net-snmp
net-snmp-perl-5.3.2.2-9.el5_5.1
net-snmp-libs-5.3.2.2-9.el5_5.1
net-snmp-5.3.2.2-9.el5_5.1
net-snmp-devel-5.3.2.2-9.el5_5.1
net-snmp-utils-5.3.2.2-9.el5_5.1
2.创建cacti数据库
mysql –u root –p
mysql>create database cacti default character set utf8;
mysql>grant all on cacti.* to cacti@localhost IDENTIFIED BY 'cacti';
mysql>flush privileges;
mysql> quit
3. 安装cacti
cacti-0.8.7b-cn-utf8.tar.gz
tar –zxvf cacti-0.8.7b-cn-utf8.tar.gz
将解压的目录放到你http的目录
如
mv cacti-0.8.7b-cn-utf8 /var/www/html/cacti
cd /var/www/html/cacti
修改连接数据库文件
vi include/config.php
$database_type = "mysql";
$database_default = "cacti"; #你建的数据库
$database_hostname = "localhost"; #主机一般不要改
$database_username = "cacti";#cacti 数据库用户
$database_password = "cacti";#密码
$database_port = "3306";# 端口一般不要修改
导入数据信息
pwd
/var/www/html/cacti
mysql -u cacti -p cacti < cacti.sql
4. 安装cacti的spine 绘图器
tar –xzf cacti-spine-0.8.7g.tar.gz
cd cacti-spine-0.8.7g
打补丁:
wget
patch -p1 -N < unified_issues.patch
执行以下步骤安装
cacti]# aclocal
cacti]# libtoolize --force
Using `AC_PROG_RANLIB' is rendered obsolete by `AC_PROG_LIBTOOL'
Putting files in AC_CONFIG_AUX_DIR, `config'.
cacti]# autoconf
cacti]# autoheader
cacti]# automake
cacti]#./configure
cacti]# ./configure --prefix=/home/cacti/apps/spine
cacti]# make
cacti]# make install
3、安装后,要对配置文件进行修改
spine]#cp ./etc/spine.conf.dist ./spine.conf 建立spine的配置文件
cacti]# vim /home/cacti/apps/spine/etc/spine.conf
DB_Host localhost
DB_Database cacti
DB_User cacti
DB_Pass cacti
DB_Port 3306
将spine.conf 拷贝到/etc/ 下
/usr/local/spine/bin/spine #默认读取/etc/spine.conf 文件
SPINE: Using spine config file [/etc/spine.conf]
SPINE: Version 0.8.7g starting
SPINE: Time: 0.3692 s, Threads: 1, Hosts: 2 [root@mycentos52
添加自动化采集任务
*/1 * * * * /usr/bin/php /var/www/html/cacti/poller.php > /dev/null 2>&1
如果不能出图,多手动运行几次
显示上边为正确,错误会提示你
4 安装rrdtool 支持中文
Yum 安装也可以
#rpm -ivh rrdtool-1.3.4-2.fc9.i386.rpm #但我没试过呢
因为很多cacti 支持中文,但rrdtool绘图生成的图表里边的设备名不支持中文
如:
这种情况。
此时其他的页面都是中文的,你在怎么修改页面、系统支持中文这里也不会改变,持有让rrdtool支持中文才可以。
首先查看系统支持的字符集有哪些
locale –a
xh_ZA.utf8
yi_US
yi_US.cp1255
yi_US.utf8
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8
zh_HK
zh_HK.big5hkscs
zh_HK.utf8
zh_SG
zh_SG.gb2312
zh_SG.gbk
zh_SG.utf8
zh_TW
zh_TW.big5
zh_TW.euctw
zh_TW.utf8
zu_ZA
zu_ZA.iso88591
zu_ZA.utf8
红色部分说明支持中文,这个很重要,否则rrdtool 不能生成中文字符
安装yum install ruby //安装ruby的语言支持环境,编译rrdtool时需要;不安装,编译也可以通过,最好是安装进去
安装字符集
下载地址:
rpm –ivh ttfonts-zh_CN-2.14-6.noarch.rpm
安装完成后会在/usr/share/fonts/ 下面生成一个zh_CN的目录
里边的文件有:
fonts.dir fonts.scale gbsn00lp.ttf gkai00mp.ttf zysong.ttf
红色部分是支持中文的字符集,自己可以找喜欢的设置
修改 i18n支持中文字符
sed -i -e 's/^LANG=.*/LANG="zh_CN.GB18030"/' /etc/sysconfig/i18n
下面修改rrdtool 源码文件,让它编译的时候支持中文字符
vi /opt/cacti/rrdtool-1.2.13/src/rrd_graph.c (此为源码包的路径)
删除rrd_graph.c文件中以下两行:
setlocale(LC_TIME,"");
setlocale(LC_CTYPE,"");
在原来setlocale(LC_CTYPE,"")的位置增加以下内容
setlocale(LC_ALL,"zh_CN.gb2312");
补充:1.有些人喜欢注释掉,其实这又是会出错,编译不能进行,最好删掉
2.有很多人将setlocale(LC_ALL,"zh_CN.gb2312"); 换成zh_CN.UTF-8,也是可以的,这就需要你系统支持那些字符了,第一种不行可以使用第二种。
编译安装rrdtool
./configure –prefix=/usr/local/rrdtool
Make && make install
安装完成(需要cacti 安装完后才能添加路径)
:修改Cacti的rrdtool设置,使其支持中文设备名和图片中输出中文
1)登陆Cacti,在主页的左边点击setting,选择paths页 (console>>setting>>paths)
将RRDTool Binary Path修改为:/usr/local/rrdtool/bin/rrdtool
还需要修改rrdtool的字体设置。
2)登陆Cacti,在主页的左边点击setting,选择paths页 (console>>setting>>paths)
将RRDTool Default Font Path修改为:/usr/share/fonts/zh_CN/TrueType/gkai00mp.ttf
点击save。
5 收尾工作
1. 修改apache 默认支持关闭gb2312
如:
#AddDefaultCharset UTF-8
AddDefaultCharset GB2312
2. 设置防火墙,开放80
Iptables –A INPUT -m state --state NEW -m tcp -p tcp --dport 80 –j ACCEPT
访问:
3 .进行安装
1第一次登陆默认用户名和密码都是admin
2路径设置
3.常规设置
这两个地方很重要,一定要写对,否则会报告错误。
4轮询器的设置
记住选择spine
来张效果图
6 错误收集
错误一:
11/15/2010 07:34:42 PM - SPINE: Poller[0] FATAL: Unable to read configuration file! (Spine init)
11/15/2010 07:44:43 PM - SPINE: Poller[0] FATAL: MySQL Error:'1146', Message:'Table 'cacti.settings' doesn't exist' (Spine init)
解决:
检查你的spine 配置文件,或重新安装spine
错误二:编辑spine 时错误
checking if UCD-SNMP needs crypto support... no
checking if Net-SNMP needs crypto support... yes
checking for snmp_timeout in -lnetsnmp... no
Cannot find NET-SNMP libraries(snmp)... checking UCD-SNMP
checking for snmp_timeout in -lsnmp... no
configure: error: Cannot find UCD-SNMP libraries(snmp)
解决:
configure 时 加上--with-snmp=/usr/local/net-snmp/ 你的net-snmp路径
或不加或加上这个参数--with-static=/usr/local/lib
./configure --with-static=/usr/local/lib
错误三:
checking for mysql_init in -lmysqlclient_r... no
configure: error: MySQL libraries not found
MySQL-client-standard-4.1.21-0.rhel4.i386()
MySQL-devel-standard-4.1.21-0.rhel4.i386 ()
MySQL-server-standard-4.1.21-0.rhel4.i386()
MySQL-shared-standard-4.1.21-0.rhel4.i386()
httpd-2.0.50.tar()
php-5.0.0.tar()
libxml2-2.6.11.tar()
phpMyAdmin-2.6.1-rc1.tar()
#
解决:
和错误二同样
错误四:
/usr/local/spine/spine
SPINE: Version 0.8.7b starting
11/15/2010 05:19:46 PM - SPINE: Poller[0] ERROR: SNMP Library Version Mismatch (5.3.1 vs 5.3.2.2) (Spine parent)
11/15/2010 05:00:01 PM - SPINE: Poller[0] ERROR: SNMP Library Version Mismatch (5.3.1 vs 5.3.2.2) (Spine parent)
此spine 和net-snmp的版本有问题
解决:
先卸载以前安装的net-snmtp 和spine
先安装net-snmp 然后再编译安装spine 此时你可以指定你的net-snmp 也可以不指定,都可以的。
错误五
11/15/2010 05:00:01 PM - POLLER: Poller[0] WARNING: Cron is out of sync with the Poller Interval! The Poller Interval is '60' seconds, with a maximum of a '300' second Cron, but 300 seconds have passed since the last poll!
11/15/2010 04:56:00 PM - SYSTEM STATS: Time:59.2263 Method:spine Processes:1 Threads:1 Hosts:2 HostsPerProcess:2 DataSources:21 RRDsProcessed:0
11/15/2010 04:56:00 PM - POLLER: Poller[0] Maximum runtime of 58 seconds exceeded. Exiting.
解决:
因为cron的时间与poller.php的时间差别有关
一般poller.php的跟新时间为60s,所以cron里边也要设置成每分钟跟新一次
如:
*/1 * * * * /usr/bin/php /var/www/html/cacti/poller.php > /dev/null 2>&1
错误六
##########
11/16/2010 01:10:03 PM - SYSTEM STATS: Time:1.1319 Method:spine Processes:1 Threads:1 Hosts:2 HostsPerProcess:2 DataSources:8 RRDsProcessed:7
11/16/2010 01:10:02 PM - SPINE: Poller[0] Host[4] ERROR: Empty result [127.0.0.1]: '/usr/bin/php -q /var/www/html/cacti/plugins/syslog/syslog_counter.php'
11/16/2010 01:09:11 PM - SYSTEM STATS: Time:1.1314 Method:spine Processes:1 Threads:1 Hosts:2 HostsPerProcess:2 DataSources:8 RRDsProcessed:7
11/16/2010 01:09:10 PM - SPINE: Poller[0] Host[4] ERROR: Empty result [127.0.0.1]: '/usr/bin/php -q /var/www/html/cacti/plugins/syslog/syslog_counter.php'
解决:
暂时的
delete from settings where name = 'syslog_last_incoming' ;
chinaunix网友2010-11-18 17:24:43
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com