前面我整理了两篇关于Prometheus和Zabbix的部署和使用方法的文章,这次介绍第三个监控工具,就是Cacti。相比前面两个开源的监控工具,可能稍微小众些。但也是很强大的工具,希望能帮助到大家。
Cacti是一套基于php,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。
Cacti是通过 snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善。界面友好。软件Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量跟系统资讯监控外,Cacti 也可外挂 Scripts 及加上 Templates 来作出各式各样的监控图。
Cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此,snmp和rrdtool是cacti的关键。Snmp关系着数据的收集,rrdtool关系着数据存储和图表的生成。
Mysql配合PHP程序存储一些变量数据并对变量数据进行调用,如:主机名、主机ip、snmp团体名、端口号、模板信息等变量。
snmp抓到数据不是存储在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目录的rra文件夹下)。rrdtool对数据的更新和存储就是对rrd文件的处理,rrd文件是大小固定的档案文件(Round Robin Archive),它能够存储的数据笔数在创建时就已经定义。
Cacti的优点:
1、基于RRDtool使效率提高。
Cacti基于RRDtool存储监控数据,在查询指定时间段的监控数据时候不用浏览整个数据文件,和mrtg的文本log相比具有更高的效率。监控曲线图片的生成并不想mrtg那样和数据采集同步并定时成生,而是通过RRDtool提供的图片生成工具使用PHP脚本来生成动态web图片。
2、监控项目曲线图多样化。
RRDtool的图片生成工具提供了多种参数,这样可以动态设置更多样式的曲线图,也可以将若干监控项目集中显示在一张图片中,例如我们如果要同时显示http/ftp/DNS多种协议的流量时就可以派上用场了。当然,其他如颜色,曲线样式,图片大小格式,说明文字等都可以定制产生。
3、基于web配置与监控,操作简单。
Cacti是一种web方式的软件,监控项目的新建、配置、管理、监控都是基于web方式来操作的,这对于使用者来说是非常舒服的。
4、可扩展性
Cacti支持超过二十种的插件,丰富的插件资源,大大提高了cacti的功能。
Cacti的缺点:
Cacti主要的功能强大在于他的画图功能,所以说它的其他功能都是靠它的插件来完成的,我们必须手动去添加所需插件。例如:当我们需要报警功能是,我们必须安装thold插件。
当需要添加多台监控设备时,我们只能一个一个的添加,并一个一个的添加相应的监控项。
当监控一个新设备时,必须新建模板,而且还要知道你想要监控项目的OID值,无论是新建模板还是获取OID值都非常繁琐,很不方便。
SNMP协议的中文名叫简单网络管理协议,所以SNMP协议的安全性不高。
与NagIOS比较,Cacti在监控方面绘图比较不错,在流量与图形展现方面存在优势,Nagios侧重于监控应用状态、故障分析,报警机制(邮箱、短信等)相对来说比Cacti灵活。
支持snmp协议监控
有命令行监控
支持snmpAgent客户端
支持windows环境
离线方式:
下载安装包地址:https://www.cacti.net/download_cacti.php
解压下载的安装包:tar xf cacti-1.2.12.tar.gz -C /var/www/html/
2.2.1 部署cacti运行环境
(1)linux环境用的centos7,安装时区选择Shanghai
关闭防火墙命令:systemctl stop firewalld.service
关闭SELINUX命令:vim /etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器。
(2)安装LAMP架构
安装Apache的命令:yum -y install httpd
安装mysql数据库的命令:yum -y install mariadb mariadb-server
安装php的命令:yum -y install php php-mysql
开启apache服务的命令:/bin/systemctl start httpd.service
查看apache服务状态的命令:service httpd status
查看apache安装成功的命令:rpm -qa |grep httpd
启动mysql命令:systemctl start mariadb(Mariadb是mysql的分支,centos7默认识别mariadb)
查看mysql的状态命令:systemctl status mariadb
将mysql加入开机自启的命令:systemctl enable mariadb
(3)编写php首页进行测试机
进入编辑路径下命令:cd /var/www/html/
编辑测试页面命令:vim index.php
<?php
phpinfo();
?>
(4)安装工具包,snmp协议,rrdtool
安装工具包的命令:yum -y install zlib freetype libjpeg fontconfig gd libxml2 php-gd
安装snmp的命令: yum -y install net-snmp net-snmp-utils
安装rrdtool的命令:yum -y install rrdtool rrdtool-devel
开启snmp服务的命令:/bin/systemctl start snmpd.service
查看httpd服务状态的命令:/bin/systemctl status snmpd.service
2.2.2 安装cacti
(1)用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
(2)创建cacti管理用户的命令:
useradd -M -s /sbin/nologin cacti
(3)修改cacti属主和数组的命令:
chown -R cacti.cacti /var/www/html/cacti/
(4)修改cacti底下include底下config.php文件
先执行查找config.php的命令:find -name config.php
(5)执行修改cacti连接数据库配置命令:
vim /var/www/html/cacti/include/config.php
(6)数据库设置密码命令:mysqladmin -uroot password 12345
进入数据库创建cacti数据库并授予权限命令:mysql -u root –p
在数据库中建库cacti
create database cacti default character set utf8;
grant all on cacti.* to cacti@localhost identified by '12345';
quit;
把cacti目录底下的cacti.sql导入到cacti数据库里面(这边使用的用户时cacti用户授予的密码是12345)命令:mysql -u cacti -p cacti < cacti.sql
(7)修改snmp协议的配置文件(在本机模拟linux cacti被控端)
修改配置文件命令:vim /etc/snmp/snmpd.conf
41行:com2sec notConfigUser 127.0.0.1 public
62行:access notConfigGroup "" any noauth exact all none none
85行:view all included .1 80 #去掉前面的#号
重启snmp协议命令:/bin/systemctl restart snmpd.service
使用snmpwalk -v 2c -c public 127.0.0.1命令测试这个ip的snmp是否正常,有响应。
(8)进入安装页面http://192.168.43.148/cacti
进入下面页面后,要解决PHP一些拓展应用
(9)解决PHP拓展模块
先执行命令 cd / 命令回到根目录,再执行find –name php.ini命令寻找到php.ini的路径
修改php.ini的命令:vim /etc/php.ini
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就表示安装成功
(10)解决数据库时间问题
#进入数据库授权语句
GRANT SELECT ON mysql.time_zone_name TO cacti@localhost IDENTIFIED BY '12345';
#再把以下命令重新授权一下语句
grant all on cacti.* to cacti@localhost identified by '12345';
#刷新语句
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
问题改完可能会出现这个时区错误
#打开php.ini配置文件找到date.timezone原本是注释状态需要去掉前面的;分号然后在=等于后面空格加上Asia/Shanghai
date.timezone = Asia/Shanghai
(11)执行重启HTTP服务的命令:/bin/systemctl restart httpd.service
点击next下一步安装好后进入登录页面,登录修改密码
默认账密admin/admin,登陆进去后会提示当前密码不安全重新设置密码,密码要求符合复杂性要求:大写字母加数字加特殊符号(我设的:Cacti123!)
简单部署开启数据任务后,持续监控画面:
Cacti的常用服务器的画图大部分都是使用模板的形式做的,而Cacti安装好之后本身自带了一部分模板,这些模板虽然可用,但是支持的项目太少。一个Cacti的模板一般有两部分组成。一部分是xml模板文件,另一部分是xml的数据收集文件。
Cacti的官方的模板库:http://docs.cacti.net/templates
Xml模板文件是要在cacti的Web页面的Console选项卡内Import Templates项进行添加:
而xml数据收集文件,则是要放在Linux上Cacti的安装目录cacti/resource/snmp_queries中,并确保属主和属组均为cacti:
1.点击Console->Devices,打开设备管理页面。
2. 点击右上角的add,添加一个新的机器
3. 当主机的信息填好之后,点击Create
4. 此时你的页面左上角应该显示:Save Successful,并且已经显示出了主机信息和SNMP信息,如果SNMP信息显示 SNMP error,请查看最后的问题综述。
5. 这时我们就可以添加相应的监控项了,在页面最下方的Associated Graph Templates中添加图形模板,在Associated Data Queries中添加数据模板。
6. 添加好相应的模板之后点击Save。此时左上角会出现Save Successful.
7. 点击右上角的Create Graphs for this Host(为这个主机增加监控图形),来为刚才通过模板所获得到的数据进行画图。
8. 选中需要画图的项,其中依然分为两部分:
通过Graph Templates中的内容都需要选中,而Data Query获取的内容比较详细,所以可以按需选择。
9. 选择好需要画图的项目后,点击右下角的Create,左上角会出现被创建出来的画图项。
添加被监控设备:
1. 在Console >> Graph Trees中,点击右上角的Add,添加一个新的显示项(或者系统默认的Default Tree)。
2. 在Tree 编辑页面中选择Edit Tree,然后在下面的Tree Items中拖动中间区域我们刚才创建的主机,及右侧区域需要展示的图模型。点击Finish Editing Tree,再点右上角的save保存,完成Tree的编辑。
3. 此时,再进入Graphs界面,就可以看到在Default Tree下加入了我们新创建的主机。
界面显示监控主机界面:
执行采集数据的命令:
/usr/bin/php /var/www/html/cacti/poller.php
将采集数据的命令加上定时每分钟采集一次,以此得到动态图像的命令:
echo '*/1 * * * * /usr/bin/php /var/www/html/cacti/poller.php > /dev/null' >> /var/spool/cron/root