转自:http://blog.chinaunix.net/space.php?uid=8311552&do=blog&id=2032465
一、概述
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
(
www.cacti.net)
出现了。对该工具只有一个字形容:
“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
#make
#make install
与
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
#tar zxvf cgilib-0.5.tar.gz
#cd cgilib-0.5
#make CC=gcc CFLAGS="-O3 -fPIC -I."
#cp *.h /usr/include/
#cp libcgi* /usr/lib
Building zlib
#tar zxvf zlib-1.2.2.tar.gz
#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
#./configure
#make
#make install
运行
snmpget,snmpwalk
测试是否安装成功
RPM
包的
snmpwalk
的名称是:
net-snmp-utils.*.rpm
,也可以从安装光盘上
RPM
安装。
4.安装CACTI
官方网站:
http://www.cacti.net/
a)
安装cacti源文件
下载
cacti-0.8.6g.tar.gz
将这个压缩包解压到网站根目录
#cp cacti-0.8.6g.tar.gz /home/wwwroot //httpd站点目录所在
#cd /home/wwwroot/
#tar xzvf cacti-0.8.6g.tar.gz
#mv cacti-0.8.6g cacti
#chown –R apache.apache cacti
#cd cacti
b)
配置Mysql数据库
为
cacti
配置用户和数据库:
#mysql –u root –p
mysql>create database cactidb;
mysql>grant all privileges on cactidb.* to cactiuser@localhost identified by 'password';
mysql>quit
c)
配置Cacti连接数据库
#vi /home/wwwroot/cacti/include/config.php
$database_type = “mysql”;
$database_default = “cactidb”;
$database_hostname = “localhost”;
$database_username = “cacti”;
$database_password = “password”;
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 Information System:
00:LINUX:MAIL.BIZCN.COM:2.4.20-30.9SMP:#1:SMP:WED:FEB:04:20:36:46:EST:2004:I686
Uptime:
156994868
Hostname:
mail.bizcn.com
|
添加监控服务器(图
6
)
2)
配置添加的服务器的监控服务(这里一般使用
UCD/NET
模板)
点
New Graphs
选择监控点名,勾选相应的
creat
添加监控服务器(图
7
)
3
)、添加目录树
(增加后将在监控的位置出现)
点
Graph Trees中的Add(如图)
添加监控服务器(图
9
)
4
)、监控
点击总菜单中的
Graphs
显示监控图,可在左边选择相应的监控端查看(一般添加
5
分钟后就有图出来)
监控服务器(图
10
)
以下是关于流量
负载
内存等的截图
四、被监控端配置
大部分情况下,我们监控的是服务器,以
RedHat Linux
为例,看看如何打开
SNMP
服务。
只有开启了
SNMP
服务,监控端才可以收集数据。
打开默认的
/etc/snmp/snmp.conf
文件
,
更改如下配置
:
1
、查找以下字段:
代码
:
# sec.name 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
的研究还处中初级阶段!要想好好利用这个工具,也得费一番心思!