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
官网下载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 = '';
浏览器访问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/
[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
[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