简介

Cacti是用php语言实现的一个软件,它的主要功能是通过snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此cacti的关键在于snmp和rrdtool工具,snmp关系着数据的收集,而rrdtool关系着数据存储和图表的生成 snmp抓到数据并不是存储在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目录的rra文件夹下),rrdtool对数据的更新和存储就是对rrd文件的处理,rrd文件是大小固定的档案文件(Round Robin Archive),它能够存储的数据笔数在创建时就已经定义 Cacti提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善而且界面比较友好 Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量跟系统资讯监控外,Cacti 也可外挂 Scripts 及加上 Templates 来作出各式各样的监控图,同时通过Mysql配合PHP程序可以存储一些变量数据并对变量数据进行调用,如:主机名、主机ip、snmp团体名、端口号、模板信息等

前期准备

准备两台Centos7虚拟机,关闭防火墙和selinux,同步系统时间,配置IP地址和hostname

hostname ip
master 192.168.29.131
node 192.168.29.133

master结点部署Nginx和MySQL

#从官网上下载Nginx的yum源并安装
[root@master ~]# yum install nginx -y
#从官网上下载MySQL的yum源并安装
[root@master ~]# yum install mysql mysql-server -y
#启动mysql服务
[root@master ~]# systemctl start mysqld
#设置mysql登陆密码等

master结点安装依赖

[root@master ~]# yum install php php-mysql php-snmp php-pdo perl-DBD-MySQL net-snmp net-snmp-utils rrdtool rrdtool-devel rrdtool-php -y
#启动snmpd服务
[root@master ~]# systemctl start snmpd

node结点安装依赖

[root@node ~]# yum install net-snmp -y

master部署Cacti

官网下载Cacti压缩包并解压到Nginx的web文件夹中

[root@master ~]# tar -zxvf cacti-1.2.12.tar.gz -C /usr/share/nginx/html/cacti

配置Nginx服务器

[root@master ~]# vi /etc/nginx/conf.d/default.conf 
server {
    listen       80;
    server_name  localhost;
    location / {
    	#配置文件根目录
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    #配置解析PHP文件
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html/$fastcgi_script_name;
        include        fastcgi_params;
    }
}
#启动php-fpm服务
[root@master ~]# systemctl start php-fpm 
#启动Nginx服务器
[root@master ~]# systemctl start nginx

配置MySQL

#创建cacti数据库
mysql> create database cacti;
#cacti解压文件夹中自带表格,导入表格
mysql> use cacti
mysql> source /usr/share/nginx/html/cacti/cacti.sql
#创建cactiuser用户
mysql>grant all privileges on cacti.* to 'cactiuser'@'localhost' identified by 'your_password';
mysql>flush privileges;

配置Cacti连接数据库文件

[root@master ~]# vi /usr/share/nginx/html/cacti/include/config.php 
$database_type     = 'mysql';
$database_default  = 'cacti';
$database_hostname = 'localhost';
$database_username = 'cactiuser';
$database_password = 'your_password';
$database_port     = '3306';
$database_retries  = 5;
$database_ssl      = false;
$database_ssl_key  = '';
$database_ssl_cert = '';
$database_ssl_ca   = '';

安装Cacti

浏览器访问http://master_ip/cacit,根据页面的报错提示修改内容,直到安装完成 配置php

[root@master ~]# vi /etc/php.ini
date.timezone = Asia/Shanghai
memory_limit = 800M
max_execution_time = 60
#修改完成后重启服务
[root@master ~]# systemctl restart php-fpm

配置MySQL

[root@master ~]# vi /etc/my.cnf
default-time_zone='+8:00'
tmp_table_size=28M
join_buffer_size=57M
innodb_buffer_pool_size	=444M
innodb_flush_log_at_timeout=3
innodb_read_io_threads=32
innodb_write_io_threads=16
innodb_buffer_pool_instances=2
innodb_io_capacity=5000
innodb_io_capacity_max=10000
max_allowed_packet=16777216
max_heap_table_size=40M
tmp_table_size=40M
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4
innodb_buffer_pool_instances=11
innodb_buffer_pool_size=1G
#填充时区
[root@master ~]# mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
#修改完成后重启mysql
[root@master ~]# systemctl restart mysqld

配置文件权限

[root@master ~]# cd /usr/share/nginx/html/
#设定用户和用户组
[root@master html]# chown -R nginx.nginx cacti/
#创建日志文件
[root@master cacti]# touch log/cacti.log
#设置文件执行权限
[root@master cacti]# chmod 777 log/cacti.log
[root@master cacti]# chmod 777 resource/snmp_queries/
[root@master cacti]# chmod 777 resource/script_server/
[root@master cacti]# chmod 777 resource/script_queries/
[root@master cacti]# chmod 777 scripts/
[root@master cacti]# chmod 777 log/
[root@master cacti]# chmod 777 cache/boost/
[root@master cacti]# chmod 777 cache/mibcache/
[root@master cacti]# chmod 777 cache/realtime/
[root@master cacti]# chmod 777 cache/spikekill/

node结点配置snmp

[root@node ~]# vi /etc/snmp/snmpd.conf
com2sec notConfigUser  192.168.29.131       public
view all    included  .1                               80
#启动snmpd服务
[root@node ~]# systemctl start snmpd

master配置自动采集数据

[root@master ~]# vi /etc/crontab 
*/1 * * * *  root /usr/bin/php /usr/share/nginx/html/cacti/poller.php --force  > /dev/null 2>&1

可视化监控

访问http://master_ip/cacti可进行登录,(默认登录账号密码都为admin) 在这里插入图片描述 忘记登陆密码

mysql> use cacti;
mysql> update user_auth set password=md5("new_password") where id ='1';

登录成功后进入首页 在这里插入图片描述 新建node结点监控 在这里插入图片描述 填写node结点信息并点击创建 在这里插入图片描述 查看监控的设备 在这里插入图片描述 为master结点添加监控模型 在这里插入图片描述 为node结点添加监控模型 在这里插入图片描述 查看监控对象的图形 在这里插入图片描述 master结点图像 node结点图像 在这里插入图片描述

自定义监控对象

编写监控脚本

[root@master ~]# vi /usr/share/nginx/html/cacti/scripts/tcpstate.sh
#监控TCP连接LISTEN的数量
#!/bin/bash
LISTEN_STATE=$(ss -anlp| cut -d " " -f3|grep LISTEN|wc -l)
echo  "listen:$LISTEN_STATE"

#修改脚本权限
[root@master ~]# chmox +x /usr/share/nginx/html/cacti/scripts/tcpstate.sh

添加并配置数据输入方法 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 输出字段配置(输出字段要与脚本输出一致) 在这里插入图片描述 添加配置数据源模板 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 添加配置图形模板 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 配置图形项 在这里插入图片描述 在这里插入图片描述 关联输入 在这里插入图片描述 在这里插入图片描述 关联设备和数据源 在这里插入图片描述 管理设备中添加图形模板 在这里插入图片描述 在这里插入图片描述 测试是否有数据输入到rrd文件

[root@master ~]# rrdtool lastupdate /usr/share/nginx/html/cacti/rra/local_linux_machine_tcpstate.rrd
 tcplisten
1591668242: 35
#数据有输入
#手动刷新图像
[root@master ~]# php /usr/share/nginx/html/cacti/poller.php

查看图像 在这里插入图片描述 自定义监控项配置完成