环境说明: 操作系统:Centos 5.8_x86_64 cacti版本:cacti-0.8.8a spine版本:cacti-spine-0.8.8a 说明:这里只介绍如何安装配置cacti,并不涉及如何配置监控远程主机。 一、安装依赖环境包: yum install httpd php php-mysql php-snmp mysql mysql-server net-snmp net-snmp-utils php-gd vixie-cron 如果为编译安装apache,需要指定--enable-sockets yum install rrdtool --nogpgcheck service mysqld start service httpd start service crond start service snmpd start chkconfig httpd on chkconfig mysqld on chkconfig snmpd on chkconfig crond on 确定php扩展模块: mysql,SNMP,XML,Session,Sockets,GD,LDAP(如果安装了php-ldap模块的话) 给MySQL用户root添加密码: mysqladmin --user=root password centos 二、安装配置cacti tar xf cacti-0.8.8a.tar.gz -C /var/www/html/ mv /var/www/html/cacti-0.8.8a /var/www/html/cacti 创建cacti数据库 mysqladmin -uroot -p create cacti 如果是中文版则,需要如下命令创建 mysql> create database cacti default character set utf8; 导入sql语句 mysql -uroot -p cacti < /var/www/html/cacti/cacti.sql mysql> GRANT ALL ON cacti.* TO cacti@localhost IDENTIFIED BY 'centos'; mysql> flush privileges; vim /var/www/html/cacti/include/config.php << $database_type = "mysql"; $database_default = "cacti"; $database_hostname = "localhost"; $database_username = "cacti"; $database_password = "centos"; useradd cacti cd /var/www/html/cacti chown -R cacti rra/ log/ echo "*/5 * * * * /usr/bin/php /var/www/html/cacti/poller.php &> /dev/null" > /var/spool/cron/cacti 注意:首次执行poller.php时应使用cacti用户,否则生成的rrd文件cacti将没有写入权限! 三、配置snmp使可以监控本机 vim /etc/snmp/snmpd.conf << com2sec notConfigUser default public ==> 改为 com2sec notConfigUser 127.0.0.1 public 四、配置使用spine来执行获取数据 依赖关系: mysql-devel net-snmp-devel 编译安装 tar -xf cacti-spine-0.8.8a.tar.gz -C /usr/src/ cd /usr/src/cacti-spine-0.8.8a/ ./configure make && make install 提供配置文件 cd /usr/local/spine/etc/ cp spine.conf.dist spine.conf vi spine.conf >> 修改一下内容 DB_Host localhost DB_Database cacti DB_User cacti DB_Pass centos DB_Port 3306 DB_PreG 0 启用spine 登录cacti的网页,点击Settings,在页面上方点击Paths,找到Alternate Poller Path,写入spine的路径:/usr/local/spine/bin/spine,然后点击Save保存。 再点击页面上方的Poller,找到Poller Typer项,在下拉列表中选择spine,然后点击Save保存。 通过浏览器访问http://serverip/cacti 五、被监控端配置 yum install net-snmp vim /etc/snmp/snmpd.conf ==> com2sec notConfigUser 192.168.56.201(监控端IP) public view all included .1 80 access notConfigGroup "" any noauth exact all none none 六、相关知识点 测试snmp通过如下命令: snmpwalk -v 2c -c public localhost system 模版: 图形模版:图是如何绘制 数据模版:定义如何获取数据及保存方法 主机模版:归好类的图形和数据模版 获取数据-->保存数据-->绘图 自定义顺序: 1、定义脚本收集数据,执行脚本输出结果为:XXX:0-9 XXX:0-9 Name:输入数据收集方法名称 InputType:获取数据的方法 InputString:/bin/bash <path_cacti>/scripts/xx.sh <hostname> <snmp_community> 创建完成后,添加输入字段和输出字段: 输入字段为脚本引用的各个变量 输出字段为脚本执行后生成的各个字段,名字要和输出的名字一致 2、定义数据模版 根据输出字段添加各自的数据源 3、定义数据源 4、定义图像模版 1、创建图像模板 Vertical Lable tcp_3 conn 2、添加图像(Graph Template Items) Text Format:该颜色线条的说明 Graph Item Type:图像类型: GPRINT:打印,类似当前值,最大值,平均值 COMMENT:显示到图形中的 4、图形管理添加图形 定义数据源所关联的图像 常用相关命令: 1、查看一rrd文件的最后一次或第一次的更新时间 rrdtool last localhost_load_1min_5.rrd | xargs -i date -d '1970-01-01 {} sec utc' rrdtool first localhost_load_1min_5.rrd | xargs -i date -d '1970-01-01 {} sec utc' 2、查看rrd文件的内容 rrdtool fetch XXX.rrd AVERAGE 2、查看rrd文件结构信息 rrdtool info XXX.rrd >> filename = "eth0.rrd" rrd_version = "0003" step = 300 # RRDtool 希望每5分钟收到一个数据 last_update = 1163862985 # 这是最近一次更新的 timestamp 。可以用 date 转换为具体的时间 ds[eth0_in].type = "COUNTER" # 有一个名为 eth0_in 的 DS,DST是 COUNTER ds[eth0_in].minimal_heartbeat = 600 # hearbeat 时间是600 秒 ds[eth0_in].min = 0.0000000000e+00 # eth0_in 的最小值是 0 (bytes) ds[eth0_in].max = 1.2500000000e+07 # eth0_in 的最大值是 1250000000 (bytes) ds[eth0_in].last_ds = "UNKN" ds[eth0_in].value = 0.0000000000e+00 ds[eth0_in].unknown_sec = 85 ds[eth0_out].type = "COUNTER" ds[eth0_out].minimal_heartbeat = 600 ds[eth0_out].min = 0.0000000000e+00 ds[eth0_out].max = 1.2500000000e+07 ds[eth0_out].last_ds = "UNKN" ds[eth0_out].value = 0.0000000000e+00 ds[eth0_out].unknown_sec = 85 rra[0].cf = "AVERAGE" # 第一个 RRA 的编号是0,不是1。 rra[0].rows = 600 # 共保存 600 个记录 rra[0].pdp_per_row = 1 # 每个 CDP 由一个 PDP 统计得出 rra[0].xff = 5.0000000000e-01 # 只要当前interval 的 PDP 为 unknown ,则该 CDP 的值也是unknown rra[0].cdp_prep[0].value = NaN rra[0].cdp_prep[0].unknown_datapoints = 0 rra[0].cdp_prep[1].value = NaN rra[0].cdp_prep[1].unknown_datapoints = 0 rra[1].cf = "AVERAGE" # 第二个 RRA 的编号是 1。同样也是 AVERAGE 型。 rra[1].rows = 600 # 也是保存 600 个记录 rra[1].pdp_per_row = 4 # 每个 CDP 由4个 PDP 的求平均值得出 rra[1].xff = 5.0000000000e-01 # 每个 CDP 最多允许2个 PDP 为 unknown ,超过则该 CDP 为unknown