共计 6234 个字符,预计需要花费 16 分钟才能阅读完成。
导读 | Cacti 是一套基于 PHP,MySQL,SNMP 及 RRDTool 开发的网络流量监测图形分析工具。在三大开源工具中,cacti 的网络监控能力是非常强的,通过 snmpget 来获取数据,使用 RRDtool 绘画图形,而且你完全可以不需要了解 RRDtool 复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host 以及任何一张图,还可以与 LDAP 结合进行用户验证,同时也能自己增加模板,功能非常强大完善。今天我们介绍下 cacti 的安装与配置 |
Cacti 在英文中的意思是仙人掌的意思,Cacti 是一套基于 PHP,MySQL,SNMP 及 RRDTool 开发的网络流量监测图形分析工具。它通过 snmpget 来获取数据,使用 RRDtool 绘画图形,而且你完全可以不需要了解 RRDtool 复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host 以及任何一张图,还可以与 LDAP 结合进行用户验证,同时也能自己增加模板,功能非常强大完善。Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量跟系统资讯监控外,Cacti 也可外挂 Scripts 及加上 Templates 来作出各式各样的监控图。
cacti 是用 php 语言实现的一个软件,它的主要功能是用 snmp 服务获取数据,然后用 rrdtool 储存和更新数据,当用户需要查看数据的时候用 rrdtool 生成图表呈现给用户。因此,snmp 和 rrdtool 是 cacti 的关键。Snmp 关系着数据的收集,rrdtool 关系着数据存储和图表的生成。
Mysql 配合 PHP 程序存储一些变量数据并对变量数据进行调用,如:主机名、主机 ip、snmp 团体名、端口号、模板信息等变量。
snmp 抓到数据不是存储在 mysql 中,而是存在 rrdtool 生成的 rrd 文件中(在 cacti 根目录的 rra 文件夹下)。rrdtool 对数据的更新和存储就是对 rrd 文件的处理,rrd 文件是大小固定的档案文件(Round Robin Archive),它能够存储的数据笔数在创建时就已经定义。关于 RRDTool 的知识请参阅 RRDTool 教学。
snmp(Simple Network Management Protocal, 简单网络管理协议) 在架构体系的监控子系统中将扮演重要角色。大体上,其基本原理是,在每一个被监控的主机或节点上 (如交换机) 都运行了一个 agent,用来收集这个节点的所有相关的信息,同时监听 snmp 的 port,也就是 UDP 161,并从这个端口接收来自监控主机的指令 (查询和设置)。
如果安装 net-snmp,被监控主机需要安装 net-snmp(包含了 snmpd 这个 agent),而监控端需要安装 net-snmp-utils,若接受被监控端通过 trap-communicate 发来的信息的话,则需要安装 net-snmp,并启用 trap 服务。如果自行编译,需要 beecrypt(libbeecrypt) 和 elf(libraryelf) 的库。
RRDtool 是指 Round Robin Database 工具(环状数据库)。Round robin 是一种处理定量数据、以及当前元素指针的技术。想象一个周边标有点的圆环--这些点就是时间存储的位置。从圆心画一条到圆周的某个点的箭头--这就是指针。就像我们在一个圆环上一样,没有起点和终点,你可以一直往下走下去。过来一段时间,所有可用的位置都会被用过,该循环过程会自动重用原来的位置。这样,数据集不会增大,并且不需要维护。RRDtool 处理 RRD 数据库。它用向 RRD 数据库存储数据、从 RRD 数据库中提取数据。
Cacti 整个系统的架构是这样的:基于 SNMP 协议,被监控端是服务器,或一些网络设备,网络管理工作站,采用 Linux(或 Freebsd) 操作系统,并且安装 Net-SNMP 工具,使用 RRDTOOL 采集数据,存储数据,并用 Cacti 调用 rrdtool 显示出来。
CACTI 采用 PHP 编写,基于 B / S 结构。
1)网络设置
2)主机系统(1)网络接口流量(进与出的带宽)(2)监控 CPU 的负载、内存等等(3)监控磁盘的空间、进程数等等
3)cacti 常见的监测对象(1)服务器资源:CPU、内存、磁盘、进程、连接数等(2)服务器类型:WEB、Mail、FTP、数据库、中间件(3)网络接口:流量、转发速度、丢包率(4)网络设备性能、配置文件(对比与备份)、路由数(5)安全设备性能、连接数、攻击数(6)设备运行状态:风扇、电源、温度(7)机房运行环境:电流、电压、温湿度
以下使用 CentOS release 6.7 (Final) 进行安装,将 cacti 根目录放置在 /web/vhosts,并配置 web 服务器使用 http://cacti.feiyu.com/ 进行访问,首先在主监控机上安装 LAMP 的 web 环境,此处直接使用 yum 进行安装。
[root@localhost ~]# yum install -y yum install php php-mysql php-snmp mysql mysql-server php-pdo perl-DBD-MySQL
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf #配置 cacti 访问路径
ServerName cacti.feiyu.com
DocumentRoot /web/vhosts/cacti
<directory "/web/vhosts/cacti">
Options Indexes
AllowOverride none
Order allow,deny
Allow from all
ErrorLog "logs/cacti-error_log"
CustomLog "logs/cacti-access_log" common
然后安装 snmp:
[root@localhost ~]# yum install net-snmp net-snmp-utils -y
再安装 rrdtool:
[root@localhost ~]# yum install -y rrdtool rrdtool-devel rrdtool-php
下载 cacti:
[root@localhost ~]# wget http://www.cacti.net/downloads/cacti-0.8.8f.tar.gz
[root@localhost ~]# mkdir /web/vhosts -p
[root@localhost ~]# tar xf cacti-0.8.8f.tar.gz -C /web/vhosts/ #cacti 根目录放置处
[root@localhost ~]# cd /web/vhosts/
[root@localhost vhosts]# ls
cacti-0.8.8f
[root@localhost vhosts]# ln -sv cacti-0.8.8f cacti
[root@localhost ~]# service httpd start
[root@localhost ~]# service mysqld start
cacti 文件中有创建表的 sql 语句,但是没有创建数据库,需要手动创建。
[root@localhost cacti]# mysqladmin create cactidb
[root@localhost cacti]# mysql cactidb < cacti.sql [root@localhost cacti]# mysql -e "grant all on cactidb.* to cactiuser@localhost identified by'cactiuser'"[root@localhost cacti]# mysqladmin flush-privileges [root@localhost cacti]# mysql -u cactiuser -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.1.73 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type'help;'or'\h'for help. Type'\c' to clear the current input statement. mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cactidb |
| test |
+--------------------+
3 rows in set (0.00 sec)
mysql> \q
Bye
编辑 cacti 配置文件,修改根目录:
[root@localhost cacti]# cd include/
[root@localhost include]# vim config.php
$database_type = "mysql";
$database_default = "cactidb"; #修改为自己创建的数据库
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "cactiuser";
$database_port = "3306";
$database_ssl = false;
$url_path = "/";
cacti 获取数据需要用普通用户执行脚本获取。
[root@localhost cacti]# useradd cactiuser
[root@localhost cacti]# chown -R cactiuser.cactiuser log rra
安装好 cacti 后,首先校对时间。
[root@localhost log]# date 0122203616
定义定时任务执行数据收集脚本
[root@localhost cacti]# echo '*/5 * * * * /usr/bin/php /web/vhosts/cacti/poller.php &> /dev/null' > /var/spool/cron/cactiuser
执行此脚本会报许多错,原因是 php 时区有问题
[root@localhost cacti]# php /web/vhosts/cacti/poller.php
修改时区:
[root@localhost cacti]# vim /etc/php.ini
947 date.timezone = Asia/Shanghai
[root@localhost cacti]# service php-fpm restart
然后开始在浏览器中访问 cacti,指定 rrdtool、php、snmp 工具的 Binary 文件路径,确保所有的路径都是显示”FOUND”,没有“NOT FOUND”的,点击 Finish 完成安装。默认账号和密码都是 admin,首次登陆首先需要修改密码。
点击 graphs,查看 cacti 监控本机的图表。
下面开始添加自定义监控项,需要自己编写脚本实现。
[root@cacti ~]# vim tcpconn.sh
#!/bin/bash
#
#$1:hostname or IP
#$2:snmp community(public)
SNMPNETSTAT=/usr/bin/snmpnetstat
ESTABLISHED=`$SNMPNETSTAT -v 2c -c $2 -Can -Cp tcp $1|grep -i 'established'|wc -l`
echo -n "established:$ESTABLISHED"
[root@cacti ~]# cp tcpconn.sh /web/vhosts/cacti/scripts/ #复制脚本到 cacti 目录中
添加步骤如下所示:
(1)在 Data Input Methods 中添加脚本,并需要在 Input Fields 中添加用户需要传的参数,http://cacti.feiyu.com/,进入 cacti 图形窗口,点击 Data Input Methods–>add,如下所示:
(2)然后在 Iutput Fields 定义输入字段 2 个,与脚本中的输入保持一致:
(3)然后在 Output Fields 定义输出字段,与脚本中的输出保持一致:
定义完成后如下图所示:
(4)数据收集后需要保存在 RRD 文件中, 然后创建 RRD 文件,在 Data Templates 中添加数据模板:
有了数据模板然后创建数据源,点 Data Sources
数据文件定义完成如下所示:
(5)然后创建模板,将模板应用到主机上就能生成图片了:
(6)然后添加图片格式:
图片格式添加完成后如下所示:
(7)然后点 Graph Management 关联设备:
(8)关联主机后并关联数据源:
(9)然后再添加对图片的说明(图片下面的彩色方块):Console -> Graph Templates -> (Edit) -> Graph Template Items,将 Current,Average,Max 都添加上去:
[root@cacti scripts]# vim tcp3.sh
#!/bin/bash
#
#$1:hostname or IP
#$2:snmp community(public)
SNMPNETSTAT=/usr/bin/snmpnetstat
TEMPFILE=`mktemp /tmp/$1_tcpconn.XXXXXXXXXX`
$SNMPNETSTAT -v 2c -c $2 -Can -Cp tcp $1 > $TEMPFILE
ESTABLISHED=`grep -i "ESTABLISHED" $TEMPFILE|wc -l`
TIMEWAIT=`grep -i "TIMEWAIT" $TEMPFILE|wc -l`
SYNRECEIVED=`grep -i "SYNRECEIVED" $TEMPFILE|wc -l`
echo -n "established:$ESTABLISHED timewait:$TIMEWAIT synreceived:$SYNRECEIVED"
[root@cacti scripts]# cp tcp3.sh /web/vhosts/cacti/scripts/
然后在浏览器中进行定义,定义的步骤与上面的相同的。
定义完成后的数据模板如下所示:
添加图像完成后如下所示:
最终生成的图像如下: