简介

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实时资源监控 centos资源监控平台_运维


忘记登陆密码

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

登录成功后进入首页

centos7实时资源监控 centos资源监控平台_centos7实时资源监控_02


新建node结点监控

centos7实时资源监控 centos资源监控平台_运维_03


填写node结点信息并点击创建

centos7实时资源监控 centos资源监控平台_linux_04


查看监控的设备

centos7实时资源监控 centos资源监控平台_监控类_05


为master结点添加监控模型

centos7实时资源监控 centos资源监控平台_centos_06


为node结点添加监控模型

centos7实时资源监控 centos资源监控平台_linux_07


查看监控对象的图形

centos7实时资源监控 centos资源监控平台_centos_08


master结点图像

centos7实时资源监控 centos资源监控平台_运维_09


node结点图像

centos7实时资源监控 centos资源监控平台_centos7实时资源监控_10

自定义监控对象

编写监控脚本

[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实时资源监控 centos资源监控平台_监控类_11


centos7实时资源监控 centos资源监控平台_监控类_12


centos7实时资源监控 centos资源监控平台_运维_13


输出字段配置(输出字段要与脚本输出一致)

centos7实时资源监控 centos资源监控平台_linux_14


添加配置数据源模板

centos7实时资源监控 centos资源监控平台_linux_15


centos7实时资源监控 centos资源监控平台_运维_16


centos7实时资源监控 centos资源监控平台_centos_17


添加配置图形模板

centos7实时资源监控 centos资源监控平台_运维_18


centos7实时资源监控 centos资源监控平台_centos7实时资源监控_19


centos7实时资源监控 centos资源监控平台_centos_20


配置图形项

centos7实时资源监控 centos资源监控平台_监控类_21


centos7实时资源监控 centos资源监控平台_centos_22


关联输入

centos7实时资源监控 centos资源监控平台_centos7实时资源监控_23


centos7实时资源监控 centos资源监控平台_centos7实时资源监控_24


关联设备和数据源

centos7实时资源监控 centos资源监控平台_监控类_25


管理设备中添加图形模板

centos7实时资源监控 centos资源监控平台_监控类_26


centos7实时资源监控 centos资源监控平台_linux_27


测试是否有数据输入到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实时资源监控 centos资源监控平台_centos_28


自定义监控项配置完成