cacti是一款使用PHP语言开的发性能与流量检测软件,检测对象可以是Linux、Windows服务器,也可以是路由交换机等网络设备,主要基于SNMP(simple、Network、Management、Protocol,简单网络管理协议)来搜集CPU占用、内存使用、运行进程、网卡流量等数据
cacti的工作流程:
步骤一,snmp协议收集远程服务器的数据
步骤二,将snmp收集的数据内容保存到rrd数据库中
步骤三,若用户查看某台设备上的流量或其它状态信息
步骤四,在mysql数据库中查找该设备对应的rra数据库文件的名称
步骤五,通过rrdtool命令进行绘图即可
一、安装
1.构建cacti监控平台时要先进行LAMP架构
测试直接用yum一键安装、在生产环境中最好使用手工编译安装
yum -y install httpd
yum -y install mariadb mariadb-server
yum -y install php php-mysql
#编写php首页进行测试机
cd /var/www/html/
vim index.php
#关闭防火墙、SELinux
systemctl stop firewalld
setenforce 0
#启动服务
# systemctl start mariadb
# systemctl status mariadb
# systemctl enable mariadb
# systemctl status httpd
测试效果:
2.安装工具包,snmp协议,rrdtool
yum -y install zlib freetype libjpeg fontconfig gd libxml2 php-gd
yum -y install net-snmp net-snmp-utils
yum -y install rrdtool rrdtool-devel
3.安装cacti
#用wget下载最新的源码包
wget https://www.cacti.net/downloads/cacti-1.1.38.tar.gz
#解压到/var/www/html底下然后用mv重命名为cacti
tar zxvf cacti-1.1.38.tar.gz -C /var/www/html/
mv /var/www/html/cacti-1.1.38/ /var/www/html/cacti
#创建cacti管理用户
useradd -M -s /sbin/nologin cacti
#修改cacti属主和数组
chown -R cacti.cacti /var/www/html/cacti/
#修改cacti底下include底下config.php文件
vim /var/www/html/cacti/include/config.php
$database_type = "mysql";
$database_default = "cacti"; #修改数据库名称
$database_hostname = "localhost";
$database_username = "cacti"; #修改授权用户
$database_password = "cacti123"; #修改授权密码
$database_port = "3306";
$database_ssl = false;
4.创建数据库赋授予权限
# mysql -uroot -p
mysql> create database cacti default character set utf8;
Query OK, 1 row affected, 1 warning (0.63 sec)
mysql> grant all privileges on cacti.* to 'cacti'@'localhost' identified by 'cacti123';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'cacti123'' at line 1
#这个报错是因为在mysql8.0中,创建用户和授权不能一并执行。
mysql8.0中必须分开,先创建用户、再给用户赋值
mysql> create user 'cacti'@'localhost' identified by 'cacti123';
Query OK, 0 rows affected (0.09 sec)
mysql> grant all privileges on cacti.* to 'cacti'@'localhost';
Query OK, 0 rows affected (0.09 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
PS:如果出现以下错误:
mysql> create user 'cacti'@'localhost' identified by 'cacti123';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
#这个报错是因为自定义密码过于简单
对于自定义密码过于简单的,使用以下方法解决:
mysql> show variables like 'validate_password%';
mysql> set global validate_password.policy=LOW;
Query OK, 0 rows affected (0.00 sec)
如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可
mysql> set global validate_password.length=6;
Query OK, 0 rows affected (0.00 sec)
5.导入cacti数据库
一、导出数据库
用mysqldump命令(注意mysql的安装路径,即此命令的路径):
1、导出数据和表结构:
mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
#/usr/local/mysql/bin/ mysqldump -uroot -p abc > abc.sql
2、只导出表结构
mysqldump -u用户名 -p密码 -d 数据库名 > 数据库名.sql
#/usr/local/mysql/bin/ mysqldump -uroot -p -d abc > abc.sql
注:/usr/local/mysql/bin/ ---> mysql的data目录
二、导入数据库
1、首先建空数据库
mysql>create database abc;
2、导入数据库
方法一:
(1)选择数据库
mysql>use abc;
(2)设置数据库编码
mysql>set names utf8;
(3)导入数据(注意sql文件的路径)
mysql>source /home/abc/abc.sql;
方法二:
mysql -h 主机地址(本机localhost) -u 用户名(root) -p 数据库名 < 要导入的数据文件
#mysql -uabc_f -p abc < abc.sql
#cd /var/www/html/cacti
# mysql -u cacti -p
mysql> use cacti;
mysql> source /var/www/html/cacti/cacti.sql;
Query OK, 0 rows affected (0.03 sec)
Query OK, 1 row affected (0.01 sec)
6.修改snmp协议的配置文件,开启snmp协议
在本机模拟作为被控端
vim /etc/snmp/snmpd.conf
set nu
41 com2sec notConfigUser 192.168.42.128 public #192.168.42.128表示监控主机,public表示监控项目,可以任意取。
62 access notConfigGroup "" any noauth exact all none none
85 view all included .1 80 #去掉前面的#号
# systemctl start snmpd
# systemctl enable snmpd
7.进入安装页面http://192.168.42.128/cacti
1、解决PHP拓展模块
1:
安装ldap
yum install php-ldap
打开php.ini配置文件找到ldap那个区域模块添加
extension=ldap.so
2:
安装mbstring拓展模块
yum install php-mbstring
打开php.ini配置在配置文件最后一行添加
extension=mbstring.so
3:
安装posix模块
yum -y install php-process
查看验证是否安装成功
php -m|grep posix
posix
显示红色字体posix就表示安装成功
php -m|grep openssl
2.解决数据库时间问题
#进入数据库授权
GRANT SELECT ON mysql.time_zone_name TO cacti@localhost IDENTIFIED BY 'cacti123';
#再把以下命令重新授权一下
grant all on cacti.* to cacti@localhost identified by 'cacti123';
#刷新
flush privileges;
#又会出现下面报错
ERROR: Your MySQL TimeZone database is not populated. Please populate this database before proceeding.
#解决办法
mysql_tzinfo_to_sql /usr/share/zoneinfo/Asia/Shanghai Shanghai | mysql -u root -p mysql
#重启数据库
systemctl restart mariadb.service
#重启httpd服务
# systemctl restart httpd
3、解决PHPTimezone Support
#打开php.ini配置文件找到date.timezone原本是注释状态需要去掉前面的;分号然后在=等于后面空格加上Asia/Chongqing
date.timezone = Asia/Chongqing
#重启httpd服务
默认账密admin/admin,登陆进去后会提示当前密码不安全重新设置密码,密码要求符合复杂性要求:大写字母加数字加特殊符号。至此,安装完成。
二、Cacti的使用
Cacti的常用服务器的画图大部分都是使用模板的形式做的,而Cacti安装好之后本身自带了一部分模板,这些模板虽然可用,但是支持的项目太少,于是我们要寻求更多的模板以及更优化的内容。
Cacti的官方的模板库:http://docs.cacti.net/templates
1:cacti模板的一般加载方法:
一个Cacti的模板一般有两部分组成。一部分是xml模板文件,另一部分是xml的数据收集文件,虽然这两种文件都是xml格式的,但是你可以很显而易见的就能分出它们的不同。因为它们的文件大小一点都不相似。
举个简单的例子:
这个是一个windows的监控模板,我们可以简单的根据文件的大小来看。
- 大小大于10KB的,那就是xml模板文件。
-
大小小于10KB的,那就是xml数据收集文件。
Xml模板文件是要在cacti的Web页面的Console选项卡内Import Templates项进行添加:
而xml数据收集文件,则是要放在Linux上Cacti的安装目录cacti/resource/snmp_queries中:只要将两种类型的xml正确的导入/放入到应有的位置,那么模板就添加成功了。
2:如何在Cacti上添加一个新主机并监控相关的内容:
(以添加Linux主机为例)
1.创建画图
a. 在Cacti的Web页面Console->Import Templates导入响应的xml模板文件。
b. 在Linux上cacti/resource/snmp_queries中放入模板相关的xml数据收集文件。并确保属主和属组均为cacti。
c. 点击Console->Devices,打开设备管理页面。
d. 点击右上角的add,添加一个新的机器
e. 当主机的信息填好之后,点击Create
f. 此时你的页面左上角应该显示:Save Successful,并且已经显示出了主机信息和SNMP信息,如果SNMP信息显示 SNMP error,请查看最后的问题综述。
g. 这时我们就可以添加相应的监控项了,在页面最下方的Associated Graph Templates中添加图形模板,在Associated Data Queries中添加数据模板。
h. 添加好相应的模板之后点击Save。此时左上角会出现Save Successful.
i. 点击右上角的Create Graphs for this Host(为这个主机增加监控图形),来为刚才通过模板所获得到的数据进行画图。
j. 选中需要画图的项,其中依然分为两部分:
通过Graph Templates中的内容都需要选中,而Data Query获取的内容比较详细,所以可以按需选择。
k. 选择好需要画图的项目后,点击右下角的Create,左上角会出现被创建出来的画图项。
2.在Graphs界面显示新添加主机。
a. 在Cacti Web界面Graph Trees中,选择相应的列(或者系统默认的Default Tree)。
b. 进去Tree之后,点击右上角的Add,添加一个新的显示项。
c. 在Tree Item Type中选择Host,然后在下面的Host中选择我们刚才创建的主机。点击Create。
d. 此时,再进入Graphs界面,就可以看到在Default Tree下加入了我们新创建的主机。