简介

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)
Centos7部署Cacti监控平台及应用_第1张图片
忘记登陆密码

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

登录成功后进入首页
Centos7部署Cacti监控平台及应用_第2张图片
新建node结点监控
Centos7部署Cacti监控平台及应用_第3张图片
填写node结点信息并点击创建
Centos7部署Cacti监控平台及应用_第4张图片
查看监控的设备
在这里插入图片描述
为master结点添加监控模型
Centos7部署Cacti监控平台及应用_第5张图片
为node结点添加监控模型
Centos7部署Cacti监控平台及应用_第6张图片
查看监控对象的图形
Centos7部署Cacti监控平台及应用_第7张图片
master结点图像
Centos7部署Cacti监控平台及应用_第8张图片
node结点图像
Centos7部署Cacti监控平台及应用_第9张图片

自定义监控对象

编写监控脚本

[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

添加并配置数据输入方法
Centos7部署Cacti监控平台及应用_第10张图片
在这里插入图片描述
Centos7部署Cacti监控平台及应用_第11张图片
输出字段配置(输出字段要与脚本输出一致)
Centos7部署Cacti监控平台及应用_第12张图片
添加配置数据源模板
Centos7部署Cacti监控平台及应用_第13张图片
在这里插入图片描述
Centos7部署Cacti监控平台及应用_第14张图片
添加配置图形模板
Centos7部署Cacti监控平台及应用_第15张图片
在这里插入图片描述
Centos7部署Cacti监控平台及应用_第16张图片
配置图形项
在这里插入图片描述
Centos7部署Cacti监控平台及应用_第17张图片
关联输入
Centos7部署Cacti监控平台及应用_第18张图片
Centos7部署Cacti监控平台及应用_第19张图片
关联设备和数据源
Centos7部署Cacti监控平台及应用_第20张图片
管理设备中添加图形模板
Centos7部署Cacti监控平台及应用_第21张图片
在这里插入图片描述
测试是否有数据输入到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

查看图像
Centos7部署Cacti监控平台及应用_第22张图片
自定义监控项配置完成