基于 RRDTOOL + CACTI 性能监视系统的架构
一、概述
Linux
下用的最多的是
MRTG
的性能监视,
MRTG
配置比较简单,
MRTG
的确是非常好的东东,但我认为它毕竟已经是一套很旧的软件了,其作者在多年前就已经开发了
RRDTool
代替该软件,现在已经发展得很成熟。既然有更好的选择,为什么我们还要用
MRTG
呢?
简单的说,
rrdtool
就是一个强大的绘图的引擎,很多语言都可以调用
rrdtool
绘图。
整个系统的架构是这样的:
基于
SNMP
协议,被监控端是服务器,或一些网络设备,
网络管理工作站,采用
Linux(
或
Freebsd)
操作系统,并且安装
Net-SNMP
工具,使用
RRDTOOL
采集数据,存储数据,并用
Cacti
调用
rrdtool
显示出来。
CACTI
采用
PHP
编写,基于
B/S
结构。
二、介绍
MRTG
的优点
:
简单、易上手,基本安装完了之后只要更改一下配置文件即可。
缺点
:
1
、使用文本式的数据库,数据不能重复使用;
2
、只能按日、周、月、年来查看数据;
3
、只能画两个
DS
(一条线、一个块);
4
、每取一次数据即需要绘图一次,浪费系统资源;
5
、无管理功能;
rrdtool
的优点:
1
、使用
rrd
存储格式,数据能重复使用,比如我可以将一个
rrd
文件中的数据与另一个
rrd
文件中的数据相加。
2
、可以定义任意时间段画图,即你可以画出一张半年以来的数据的图,也可以画出一张半小时以来的图。
3
、能画任意个
DS
。
4
、
CDEF
让你能任意摆弄数据。
缺点:
1
、
rrdtool
的作用只是存储数据和画图,它没有
mrtg
中集成的数据采集功能;
2
、在命令行的使用非常复杂,参数极多。
3
、无管理功能。
简单的说,
rrdtool
就是一个强大的绘图的引擎。
由于其非常复杂的命令,对用户非常不友好。幸运的是,
PHP
可管理化的
cacti
(
)
出现了。对该工具只有一个字形容:
“great
!
”
。
cacti
其实是一套
php
程序,它运用
snmpget
采集数据,使用
rrdtool
绘图。它的界面非常漂亮,能让你根本无需明白
rrdtool
的参数能轻易的绘出漂亮的图形。更难能可贵的是,它提供了强大的数据管理和用户管理功能,一张图是属于一个
host
的,每一个
host
又可以挂载到一个树状的结构上。用户的管理上,作为一个开源软件,它居然做到为指定一个用户能查看的
“
树
”
、
host
、甚至每一张图,还可以与
LDAP
结合进行用户的验证!真是不由得佩服作者考虑的周到!
Cacti
还提供自己增加模板的功能,让你添加自己的
snmp_query
和
script
!可以说,
cacti
将
rrdtool
的所有
“
缺点
”
都补足了!
|
Cacti的架构 ( 图一 )
|
Cacti的工作流程( 图二 )
三、监控管理工作站配置
采用
Linux
系统,
CACTI
要用到
Net-SNMP
,
RRDTool
,
Aapche
,
PHP
,
Mysql
,以下是安装过程:
1.
安装
Apache+Mysql+PHP
安装过程比较简单,参考其它的资料,需要注意的是,
PHP
最好加上
SNMP
支持,编译的时候,加上
—enable-snmp
注意。
PHP
不能运行在安全模式,否则,
Cacti
工作不正常。无法调用
/usr/local/bin/
下面的程序。
Mysql
数据库不能使用
5
以上的版本,测试
mysql 5 cacti
不能正常运行
!
2.
安装
rrdtool
1.0.x
版本
:
官方网站:
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
下载:
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/rrdtool-1.0.x/rrdtool-1.0.50.tar.gz
然后
(可去查看下载最新版)
#./configure –prefix=/usr/local/rrdtool |
与 mrtg 相比 ,rrdtool1.0.x 自带了 gd 库 , 所以不用先安装 gd 库 .( 不过由于 rrdtool 自带的 gd 库不支持中文 , 所以 rrdtool 画出来的图也不能有中文 , 否则会出现乱码 ).
1.2.x
版本
1.2
版的
rrdtool
画出的图,比
1.0
的要漂亮些.
1.0
用的是
GD
画图,
1.2
用的是
libart
和
freetype
画图
,1.2
的画图会慢一点.
注意:
rrdtool1.2
的版本由于已经不再自带外部的
lib
库(如
cgilib
,
zlib
等),所以需要从
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/libs/
下载这些库来安装。
库的编译安装 :
安装完后,执行rrdtool看是否正确,
如果执行不成功,提示命令不存在,则需要将所有RRDTool的可执行文件,拷到/usr/local/bin#cp /usr/local/rrdtool/bin/* /usr/local/bin
Building cgilib
|
Building zlib
#cd zlib-1.2.2 #./configure --prefix=/usr #make #make install |
Building libpng
#tar zxvf libpng-1.2.8-config.tar.gz #cd libpng-1.2.8-config #cp scripts/makefile.gcmmx makefile #./configure --disable-shared --prefix=/usr #make #make install |
Building freetype
#tar zxvf freetype-2.1.10.tar.gz #./configure --disable-shared --prefix=/usr #make #make install |
Building libart_lgpl
#tar zxvf libart_lgpl-2.3.17.tar.gz #./configure --disable-shared --prefix=/usr #make #make install |
Building rrdtool-1.2.6
#tar zxvf rrdtool-1.2.6.tar.gz #./configure #make #make install # cp /usr/local/rrdtool/bin/* /usr/local/bin/ #ln -s /usr/local/rrdtool-1.2.6 /usr/local/rrdtool |
3.
安装
Net-SNMP
RH
下面,默认安装了
SNMP
服务,但好象没有
snmpwalk,snmpget
这两个命令,所以需要安装
NET-SNMP
。
NET-SNMP
官方网站:
http://www.net-snmp.org/
下载
tar zxvf net-snmp-5.2.1.2.tar.gz
#tar zxvf tar zxvf net-snmp-5.2.1.2.tar.gz #cd net-snmp-5.2.1.2 |
运行
snmpget,snmpwalk
测试是否安装成功
RPM
包的
snmpwalk
的名称是:
net-snmp-utils.*.rpm
,也可以从安装光盘上
RPM
安装。
4.
安装
CACTI
官方网站:
http:///
a)
安装
cacti
源文件
下载
cacti-0.8.6g.tar.gz
将这个压缩包解压到网站根目录
#cp cacti-0.8.6g.tar.gz /home/wwwroot //httpd 站点目录所在 #tar xzvf cacti-0.8.6g.tar.gz |
b)
配置
Mysql
数据库
为
cacti
配置用户和数据库:
#mysql –u root –p |
c) 配置 Cacti 连接数据库
#vi /home/wwwroot/cacti/include/config.php $database_type = “mysql”; |
d) 导入数据表
/usr/local/mysql/bin/mysql -u root –p cactidb < cacti.sql chown -R cactiuser rra/ log/ |
e) 定时 crontab 运行 cacti 的收集数据程序
crontab -u cactiuser –e */5 * * * * /usr/local/bin/php /home/wwwroot/cacti/poller.php > /dev/null 2>&1 |
注意
: 不要使用root用户运行上面的命令,否则要再运行一次chown –R cactiuser rra/ log/
f)
配置
Cacti
在浏览器上输入:
http://IP/cacti
进入
cacti
的初始设置页面:
在这里我们要输入一些原始的信息:
NEXT
-》
输入一些信息,如
rrdtool
、
php
、
snmpwalk
、
snmpget
的位置,使用
ucd-snmp
还是
net-snmp
等
-》
输入原始的用户和密码:
admin/admin
-》
更改
admin
用户的密码
-》
点击
Save
安装完成!!!
现在可以在浏览器中进入
Cacti
的世界了!
5.
测试
1) 添加监控站点
点 Devices 中的 Add 进入添加服务器如图 3 、 4 、 5
|
添加监控服务器(图 3 )
|
添加监控服务器(图 4 )
|
添加监控服务器(图 5 )
如果能连接得上,则添加后会在头部显示
61.129.102.51 (61.129.102.51) | |
SNMP InformationSystem: 00:LINUX:MAIL.BIZCN.COM:2.4.20-30.9SMP:#1:SMP:WED:FEB:04:20:36:46:EST:2004:I686 |
|
|
添加监控服务器(图 6 )
2) 配置添加的服务器的监控服务(这里一般使用 UCD/NET 模板)
点 New Graphs 选择监控点名,勾选相应的 creat
|
添加监控服务器(图 6 )
3 )、添加目录树 (增加后将在监控的位置出现)
点 Graph Trees 中的 Add (如图)
|
添加监控服务器(图 7 )
选择 host ,并在下拉列表中选择你刚添加的
|
添加监控服务器(图 8 )
4 )、监控
点击总菜单中的 Graphs 显示监控图,可在左边选择相应的监控端查看(一般添加 5 分钟后就有图出来)
|
监控服务器(图 9 )
以下是关于流量 负载 内存等的截图
|
|
四、被监控端配置
大部分情况下,我们监控的是服务器,以
RedHat Linux
为例,看看如何打开
SNMP
服务。
只有开启了
SNMP
服务,监控端才可以收集数据。
打开默认的
/etc/snmp/snmp.conf
文件
,
更改如下配置
:
1
、查找以下字段:
代码
:
# source community
com2sec notConfigUser default public
将
"comunity"
字段改为你要设置的密码
.
比如
"bizcnpublic".
将
“default”
改为你想哪台机器可以看到你的
snmp
信息
,
如
10.10.10.10
。授权服务器
IP
2
、查找以下字段:代码
:
####
# Finally, grant the group read-only access to the systemview view.
# group context sec.model sec.level prefix read write notif
access notConfigGroup "" any noauth exact systemview none none
将
"read"
字段改为
all.
代码
:
#access notConfigGroup "" any noauth exact all none none
3
、查找以下字段:代码
:
## incl/excl subtree mask
#view all included .1 80
将该行前面的
"#"
去掉
.
4 、查找以下字段:代码 #
#name incl/excl subtree mask(optional)
添加一行 view all included .1
变成
#name incl/excl subtree mask(optional)
view all included .1
4 、查找一下字段:代码
#view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
将该行前面的
"#"
去掉
.
保存关闭
.
4
、运行
/etc/init.d/snmpd start
命令运行
snmpd.
5
、如果有防火墙,打开
UDP 161
端口。
最后运行
netstat -ln
查看
161
端口是否打开了
.
使用
ntsysv
,让
snmp
服务,每次开机自动运行。
如果没有安装
snmp
服务,请在
RH
的安装光盘上找到
net-snmp.rpm
,再安装。
五、测试
打开本机的
SNMP
服务,
打开
http://IP/cacti
默认
Cacti
有
LocalHost
的四项参数,直接可以查看了。
六、排错
1.
首先检查一下
rra/
下面,有没有数据
,如果没有检查
rra/ log/
的拥有者是不是
cactiuser
2. snmpwalk -v 2c -c public ServerIP if
用来测试被控对象
(serverIP)
是否开启了
SNMP
服务
3. snmpwalk -v 2c ServerIP -c public .1.3.6.1.4.1.2021.10.1.3
查看被控端是否有
CPU
负载的数据返回
4. /usr/local/bin/php /home/wwwroot/cacti/poller.php
用来测试
PHP
是否可以采集到数据。如果上面的都正确,但这步出错,很有可能是
PHP
配置的问题,或开启了
SuLinux
。
5.
如果按第
2
步
snmpwalk
能采集到数据,但第
3
步无法采集,可能是
PHP
设置的问题,修改
PHP.ini
,很有可能是
PHP
权限问题。如果第
4
步正常而无法显示图,则可能是
rra/ log/
的
Owner
不对
Cacti + rrdtool 非常灵活,可以使用到非常广的范围,但是很多需要自己写插件和模板,现在对 cacti 和 rrdtool 的研究还处中初级阶段!要想好好利用这个工具,也得费一番心思!




























