cacti+rrdtool高级流量监控
***********************************************************************
作者: JoeCen[joecen{at}21cn{dot}com]
转载时请保持该通告
FAQ已经写好,上面都是本贴上面的问题。
请大家以后提问前先查看该FAQ!
我的Cacti--FAQ
前言:
在CU的论坛上经常看到有人问MRTG的问题,还有很多的关于MRTG的精彩文章。MRTG的确是非常好的东东,但我认为它毕竟已经是一套很旧的软件了,其作者在多年前就已经开发了RRDTool代替该软件,现在已经发展得很成熟。既然有更好的选择,为什么我们还要用MRTG呢?
第一部分,介绍:
2004年我刚进某公司工作,当时我使用MRTG建立了一套系统,专门监测我们服务器和其它网络设备的流量。
后来我想将其它的系统性能比如CPU负载、系统负载,网络连接数等一起监测起来。我在网上查找了很多的资料,也实现了这些功能,但总觉得实现的太费劲,管理起来太麻烦了。比如我有几百个被监测点,分布在不同的机房,而且我需要将这些服务器和网络设备分类,这样的话我就要将这些被监测点放在不同的mrtg配置文件中,运行多个crontab,而且自己还写了一些html页面对其进行管理。
后来有幸看到了abelyang兄写的大作“rrdtool教学”,里面列举了rrdtool的种种优点,于是我下定决心要将MRTG更换为rrdtool。
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的架构和cacti的工作流程,现在也一并发上来。
<图一>
第二部分:Cacti的安装
该安装文档是我参照上的官方文档进行安装后,总结出来的。平台是Linux或FreeBSD。
1、安装mysql
cacti从0.4.8g版本开始支持mysql5数据库 (2006/1/12更新)
下载源码:
apache、mysql、php
安装:
CODE:[Copy to clipboard]shell>; groupadd mysql
shell>; useradd -g mysql mysql
shell>; cd /usr/local
shell>; gunzip < /PATH/TO/MYSQL-VERSION-OS.tar.gz | tar xvf -
shell>; ln -s FULL-PATH-TO-MYSQL-VERSION-OS mysql
shell>; cd mysql
shell>; scripts/mysql_install_db --user=mysql
shell>; chown -R root .
shell>; chown -R mysql data
shell>; chgrp -R mysql .
shell>; bin/mysqld_safe --user=mysql &
./bin/mysqladmin -u root password "yourpasswd" 基于安全的原因,为root用户设置密码才能让root用户登陆mysql,不然会有2002错误出现
建立启动脚本:
CODE:[Copy to clipboard]cp ./support-files/mysql.server /etc/init.d/mysql
ln -s ../init.d/mysql S85mysql
ln -s ../init.d/mysql K85mysql
2、安装apache
下载:
安装:
CODE:[Copy to clipboard]./configure --prefix=/www --enable-so
make && make install
建立启动脚本
CODE:[Copy to clipboard]cp /www/bin/apachectl /etc/init.d/httpd
cd /etc/rc3.d
ln -s ../init.d/httpd S85httpd
ln -s ../init.d/httpd K85httpd
启动
/www/bin/apachectl start
3、安装php
下载:
安装:
CODE:[Copy to clipboard]/configure --prefix=/www/php --with-apxs2=/www/bin/apxs --with-config-file-path=/www/php --enable-sockets --with-mysql=/usr/local/mysql --with-zlib-dir=/usr/include --with-gd
make && make install
cp php.ini-dist /www/php/php.ini
vi /www/conf/httpd.conf
加入:
###############for php and cacti###################
AddType application/x-tar .tgz
AddType application/x-httpd-php .php
AddType image/x-icon .ico
DirectoryIndex index.php index.html index.html.var
#######################over########################
../bin/apachectl restart
4、设置mysql
CODE:[Copy to clipboard]# mysql -u root -prootroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 4.0.23-standard
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>; create database cactidb;
Query OK, 1 row affected (0.00 sec)
mysql>; grant all on cactidb.* to root;
Query OK, 0 rows affected (0.01 sec)
mysql>; grant all on cactidb.* to ;
Query OK, 0 rows affected (0.01 sec)
mysql>; grant all on cactidb.* to cactiuser;
Query OK, 0 rows affected (0.00 sec)
mysql>; grant all on cactidb.* to ;
Query OK, 0 rows affected (0.01 sec)
mysql>; set password for );
Query OK, 0 rows affected (0.00 sec)
mysql>; exit
5、安装rrdtool
下载:
然后
./configure
make && make install 即可
与mrtg相比,rrdtool自带了gd库,所以不用先安装gd库.(不过由于rrdtool自带的gd库不支持中文,所以rrdtool画出来的图也不能有中文,否则会出现乱码).
注意:rrdtool1.2的版本由于已经不再自带外部的lib库(如cgilib,zlib等),所以需要从下载这些库来安装。建议还是使用1.0的版本,比较方便。
6、安装net-snmp
几乎所有的网络设备和操作系统默认都安装了snmp服务。
unix系统安装的都是net-snmp或ucd-snmp(其实两个都是同一组人写的)。
如果没有安装snmp,可以到net-snmp.sourceforge.org上下载源码编译安装。
我这里说的安装SNMP服务并不是要求安装SNMPD,其实是Cacti需要用到net-snmp中的两个命令――snmpwalk和snmpget进行数据的采集。
我们可以直接在系统中运行snmpwalk和snmpget看是否有该命令,如果有则不用安装了。
7、安装cacti
注意:写该文档时cacti的最高版本时0.8.6c,现在的最高版本是0.8.6f。由于0.8.6f以下的版本有SQL注入漏洞,请大家下载0.8.6f或以上的版本进行安装。
下载:
安装:
CODE:[Copy to clipboard]cp cacti-0.8.6c.tar.gz /www/htdocs
tar xzvf cacti-0.8.6c.tar.gz
mv cacti-0.8.6c cacti
cd cacti
导入表:
CODE:[Copy to clipboard]/usr/local/mysql/bin/mysql –u root –prootroot cactidb < cacti.sql
chown –R cactiuser rra/ log/
设置配置文件:
CODE:[Copy to clipboard]vi /www/htdocs/cacti/include/config.php
$database_type = “mysql”;
$database_default = “cactidb”;
$database_hostname = “localhost”;
$database_username = “cactiuser”;
$database_password = “cactipw”;
核对以上几项是否正确
CODE:[Copy to clipboard]Crontab –u cactiuser –e
为cactiuser用户加入
*/5 * * * * /www/php/bin/php /www/htdocs/cacti/poller.php >; /dev/null 2>;&1
(不要使用root用户运行上面的命令,否则要再运行一次chown –R cactiuser rra/ log/)
8、页面设置:
在浏览器上输入:
进入cacti的初始设置页面:
在这里我们要输入一些原始的信息:
NEXT -》
输入一些信息,如rrdtool、php、snmpwalk、snmpget的位置,使用ucd-snmp还是net-snmp等 -》
输入原始的用户和密码:admin/admin -》
更改admin用户的密码 -》
点击 Save
安装完成!!!
现在可以在浏览器中进入Cacti的世界了!
########################### cacti设置进阶 ##############################
一、合并数据的功能参考下面的方法:
You have to create you own graph, but to get multiple hosts, you do not select a host when creating a new graph.
Click on Console ->; Graph Management, then click on Add in the upper right hand corner.
Select None and None for Selected Graph Template and Host. Click create.
Then set your max value and graph title... Click create.
Now you can start adding graph items.
You should see all data sources for all hosts. Then you can add any of them you like.
二、自定义脚本
1、脚本:
比如建立/tmp/echo.sh脚本:
CODE:[Copy to clipboard]#!/bin/sh
echo 10
echo 20
2、snmpd配置:
vi snmpd.conf
加入:
CODE:[Copy to clipboard]exec .1.3.6.1.4.1.2021.51 mytest /bin/sh /tmp/echo.sh
重启snmpd。
3、cacti配置
在“Import Templates”中导入附件中的模板(解压后共三个文件)。
4、使用方法
我建立的“Graph Templates”的名称是“TwoValueGraph”。在“Associated Graph Templates”中选择“TwoValueGraph”,然后建立图形。
三、使用monitor、threshld插件
可以从下载threshld和monitor这两个插件。
但在安装插件时,必须先安装cacti的一个patch--Plugin Architecture 。(也在同一个网站下载)
安装Plugin Architecture
解压后有一个文件夹和一个patch文件,可以直接打补丁,也可以使用该文件夹的文件覆盖cacti目录即可安装完成。
安装threshld和monitor
安装插件的步骤都是一样的,比如安装threshld
解压后会出现一个threshld文件夹,将该文件夹复制到/cacti/plugins文件夹,然后编辑/cacti/include/config.php文件,
在 $plugins = array();下面加上:
$plugins[] = 'thold';
(如果安装monitor的话加上 $plugins[] = 'monitor';)
保存即可。
注意:有些插件默认不显示在页面上,需要在user managerment里将View Thresholds或View minitore选择上。
四、让cacti支持中文
我们发现,如果将一个device以中文命名,会在devices页面出现乱码,而且图像也会出现乱码。
为了解决这些问题,实现使用中文的目的,我们需要修改cacti和rrdtool的代码,以让其支持中文。
注意:我这里所说的“支持中文”只是让cacti能显示中文,而不是将cacti全部汉化。如果有朋友有兴趣想要为cacti的汉化出一份力的话,可以联系其作者。
软件版本:
cacti-0.8.6g
rrdtool-1.2.8
支持中文环境的linux
首先我们要解决“Devices”的页面的中文乱码的问题。
编辑hosts.php文件,查找"eregi_replace”(大概在766行左右),将下面的代码:
CODE:[Copy to clipboard]
">t $host["description"];?>注意:我并没有仔细研究作者究竟要用"eregi_replace“过滤什么东西,而只是简单的将其删除以达到显示中文的目的。如果有朋友可以通过修改该代码实现中文显示而又能继续进行过滤的话,麻烦告诉我。
然后就是让rrdtool显示中文,需要的版本是1.2.8(为什么?问abel去)。修改的方法请看:
最后在cacti的“setting”-》“Paths”-》“RRDTool Default Font Path”中填上中文的fonts,比如:“/usr/share/fonts/zh_CN/TrueType/gbsn00lp.ttf”。
在支持中文环境的linux上能成功实现中文显示。
虽然在BSD下也成功编译,但由于系统环境没有设置好,所有没有成功,麻烦有BSD经验的朋友告知方法。