您的位置:首页 > 运维架构

开源监控软件 cacti的应用

2013-11-06 15:13 381 查看
开源监控Cacti的架构及应用

一:cacti 的简介
二:Cacti 的特点以及优点
三:Cacti 所监控的对象
四:监控的步骤
五:snmp 的工作原理
六:cacti 架构及应用
一:Cacti 的简介:
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、开源
1,自由发行
2,开放源代码
3,运行高效
2、跨平台
支持的平台redhat 、windows 、solaris、centos 、suse
3、界面友好
图形丰富 各种模板 自定义模板
4、可扩展
支持二十种的插件,丰富的插件资源,大大提高了cacti的功能。
三:Cacti 所监控的对象:
1、服务器cpu 、内存、磁盘、进程、连接数
2、Web、 mail 、ftp 数据库 、中间件
3、网络接口流量、转发速率、丢包率
4、网络设备性能 、配置文件 、路由数
5、安全设备性能、连接数、电源、温度
6、机房运行环境:电流、电压、湿度等

四:监控的步骤:
1,如何获取数据?
命令:ping ssh telnet
脚本:编辑相应的脚本测试被监控主机的状态
Snmp协议:
SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。随后,人们对SGMP进行了很大的修改,特别是加入了符合Internet定义的SMI和MIB:体系结构,改进后的协议就是著名的SNMP。SNMP的目标是管理互联网Internet上众多厂家生产的软硬件平台,因此SNMP受Internet标准网络管理框架的影响也很大。

2,如何存储数据?
数据的存储是靠rrd数据库来实现的,也叫环状数据库,数据库格式以.rrd结尾。数据库中存放的不是直接收集到的信息,而是通过聚合函数聚合之后的数据,默认每隔5分钟,收集一次信息,也可以每隔5秒钟收集一次信息,这叫做pdp。通过聚合之后的数据存放到rrd表格中叫做rra,rrd表格是由数据库管理,这里数据库也叫做数据源,而数据库的创建是靠rrdtool工具完成的。
Rrdtool 创建数据库 更新数据库 绘图
3,如何展示以及报警?
图形的展示,以及报警是通过基于web页面的cacti这个软件来实现的,报警的方式有发送邮件、msn消息、飞信消息。

五:Snmp的工作原理:
1、三层架构:第一层叫网管工作站简称nms ,第二层叫做agent ,也就是被监管的设备,第三层就是数据库。
2、原理:
agent 把收集到的信息放到数据库中,nms把要请求的数据的信息提交给agent ,nms与agent 打交道的方式有GetRequest 、 GetNextRequest、 SetRequest、 GetResponse、trap 向数据库中收集数据,然后把数据提交给nms。
GetReques:请求得到这个对象本节点相关信息
GetNextRequest:请求得到这个对象本节点以下的所有信息
SetRequest:agent 设置本节点的信息
Trap :agent主动向nms 提交信息

3、OID :
为了在系统中能够找到所需对象,我们需要为每一个对象分配一个唯一的表示号。在关系数据库中我们称之为关键字,而在对象术语中,则叫做对象标识(Object identifier-OID)。通常OID在内部都使用一个或多个大整数表示,而在应用程序中则提供一个完整的类为其他类提供获取、操作。一个OID必须在一层中保持唯一,理想上应该在所有对象上都唯一。
把被监控对象的名称和OID放在一个文件中,这个文件叫做MIB库。
不同的设备的MIB-2 的OID 是不同的,比如说udp的报文OID 是1.3.6.1.2.7,udp 进来的报文OID 1.3.6.1.2.7.2 ,udp出错的报文OID 1.3.6.1.2.7.3。
六:架构cacti及其应用
1、snmp 的安装
1,rpm 包安装snmp
net-snmp-5.3.2.2-7.el5.i386.rpm 提供snmpd服务,开启这个服务将成为agent将提供161端口。
net-snmp-utils-5.3.2.2-7.el5.i386.rpm 安装这个软件包,将成为nms ,提供很多工具。
开启snmpd 服务查看端口



2,nms 与agent 打交道需要进行身份认证,在snmp的1版本 、2c 版本是靠团体名进行身份验证的,明文传递信息,不安全。3版本 是靠账号验证的。密文传递信息,比较安全,但是,一般使用2c版本,比较方便。
通过snmp的工具snmpwalk 简单获取agent(本地主机)的信息
Snmpwalk -v 2c - c public 127.0.0.1



将会得到很多MIB 信息,在安装snmp的软件包时,将各节点的MIB库文件就已经存放到/usr/share/snmp/mibs 目录下面了。
Nms 只能得到 SNMPv2-MIB 和HOST-RESOURCES-MIB的相关信息,这是因为在snmp的配置在文件中,只打开了这两个节点OID,所以nms 只能获得这两个节点以下的相关信息。



如果想监控到到更多节点的相关信息,只需把节点的OID 添加到配置文件中
比如说获取TCP-MIB.txt中的信息tcp节点的OID是 1.3.6.1.2.1.6,设置好之后重启服务,将会得到tcp的相关信息。



Snmpwalk -v 2c - c public 127.0.0.1



2、Rrdtool 的应用
2,rrdtool 的简介:
高性能的记录绘图工具rrdtool ,主要用于处理时间序列的数据
Rrdtool 提供了几个子命令实现对.rrd 文件的管理,如create,update,updatev ,graph ,dump ,last ,info 等命令。
使用rrdtool 绘图的步骤:
1、使用rrdtool create 创建一个新的rrd数据文件;
2、使用, rrdtool update 为前面的创建的rrd 数据文件提供数据;此数据需要周期性的进行更新,因此,应该讲rrdtool update 创建为cron任务;
3、使用rrdtool graph 从rrd 数据文件中获取数据并绘图;
3,Rrdtool create 命令的用法:
Rrdtool create filename 【--start |-b start time 】【--step| -s step】【--no-overtime】【DS:dst arguments 】 【RRA:CF:cf arguments】
Filename :rrd数据库文件名称
Start :开始时间
Step :步长,每隔多长时间记录一次,默认每隔300秒。
no-overtime:不覆盖一个已经存在的rrd数据文件
DS:数据源
Dst :数据源类型
Arguments:变量
RRA:每隔几个步长统计一下信息
CF:对数据进行处理的统计函数:AVERAGE 平均值,MIN 最小值,MAX 最大值
1.使用rrdtool创建rrd数据库文件
rrdtool create test.rrd -s 5 DS:testds:GAUGE:8:0:U RRA:AVERAGE:0.5:1:17280
创建的数据库文件test.rrd ,每隔5秒收集一下信息,数据源是testds,对数据求绝对值,到8秒的时候也可以接受数据,最小值是0最大值没有,对表格中的数据求平均值,数据不超过50%,步长为1,记录统计每隔5秒的一天之内的数据,栏位是17280。
将会在当前目录下产生一个rrd数据库文件test.rrd
查看rrd数据库文件的数据平均值信息
rrdtool fetch test.rrd AVERAGE



当前还没有信息,以为没有往表格中输入信息,所以统计不到信息,编辑一个脚本不断地往表格中输入信息,运行脚本
#!/bin/bash
while true ;do
rrdtool update test.rrd N:$RANDOM
sleep 5
done
查看rrd数据库文件的数据平均值信息,将会得到一些数据
rrdtool fetch test.rrd AVERAGE



2..使用rrdtool 工具创建图形,获取的是test.rrd数据库中的数据,每隔五秒收集一次信息,数据源是testds,求数据的平均值,图形的形式是线条颜色为黄色。
rrdtool graph test.png -s 1382934740 --step 5 -t tupian -v vtupian DEF:vname=test.rrd:testds:AVERAGE LINE1:vname#ff0
在当前目录下将产生test.png,查看图片



3、cacti的安装
Rrdtool 太过繁琐麻烦,所以很少有人愿意使用这个工具,cacti的出现大大简化了操作,cacti是基于web页面的开源监控软件,在页面里,就可以收集数据信息,绘制图形。
1,LAMP的环境搭建
使用yum安装lamp的软件包
打开httpd 服务,设置开机启动
打开mysqld 服务,设置开机启动
修改mysql服务器的登陆密码
Mysqladmin -u root -p password ‘123’
登陆mysql 服务器,创建数据库,数据库的名称是cacti ,用于存放收集到的数据信息
,然后授予所有权限给cacti 这个用户来管理cacti数据库中的所有表格,然后刷新权限。
create database cacti;
grant all privileges on cacti.* to cacti@localhost identified by 'cacti';
Query OK, 0 rows affected (0.00 sec)
flush privileges;
2,使用cacti的源代码中带的脚本,往cacti数据库中导入表格
cacti-0.8.7g.tar.gz cacti的php页面
cacti-plugin-0.8.7g-PA-v2.8.tar.gz cacti的插件管理器
monitor-latest.tgz 插件 实现监控的功能
sendMsg.zip 实现msn报警功能
settings-latest.tgz 增加设置的功能
feition.tar.bz2 实现飞信报警的功能
thold-latest.tgz 设置域值大小的功能
解压cacti-0.8.7g.tar.gzi到站点主目录下/var/www/html
切换到cacti 目录下,将会看到很多php 文件和一些目录,poller.php是cacti利用snmp协议不断地获取数据的php脚本,rra 目录,用户存放rrd数据库,image 目录,存放cacti生产的图片。Cacti.sql 文件,用于导入到mysql数据库服务器中的cacti数据库中,给cacti数据库创建表格。
mysql -u root -p cacti <./cacti.sql
进入到cacti数据库中查看表格


3,制作个人的计划任务运行poller.php这个文件,使得cacti不断地获得数据
crontab -e
*/5 * * * * php /var/www/html/cacti/poller.php >/dev/null 2>&1
4,切换到include 目录下打开config.php ,指明php连接到cacti数据库的账号和口令



5,创建系统账号cacti,把log、 rra 目录的拥有者设置为cacti
useradd cacti
passwd cacti
Chown -R log rra
6,通过浏览器访问站点主目录下的cacti,将出现安装向导,如果没有问题的话点击finnish
将会出现后台管理员的登陆界面管理员的账号admin,密码;admin
然后系统会让你修改密码,之后将会进入cacti的主界面



刚进去因为没有安装插件只能看到console 和graphs两个菜单,在console菜单下有很多子菜单,比如说 create 、management 、templates 、configuration、utilities等。
management 菜单下的graph trees ,用于创建节点的,节点挂载到默认树下面,比如说,创建linux 、windows 、防火墙节点,与linux相关的图形,挂载到linux节点下,与windows节点相关的图形挂载到windows节点下,与防火墙相关的图像挂载到防火墙相关的节点下。
Templates (模板)菜单下的有图形模板、主机模板、数据模板。当被监管的主机的被监控的对象相同或相似时就可以直接套用模板,主机模板包括一个或多个图形模板 ,图形模板包括一个或多个数据模板。
Configuration 菜单下可以进行相应的设置,



General 进行全局的设置,比如说snmp的版本,rrdtool的版本,团体名的版本,设置好之后点击save进行保存。

四 、cacti的应用
1、监控linux本机
1,点击 devices 进行设置添加被监控主机的描述ip地址 和套用的模板,使用snmp获取信息








2,点击保存之后将会看到保存之后的信息,显示的是用snmp获取的信息
,点击create graphs ,对获取的信息制作图形。



将会根据相关联的图形模板,创建图形,也可以添加模板,与inux主机相关联的图形模板有linux的内存使用、用户登录数、 进程数。
点击create 将会创建linux内存使用情况图形,用户登录数图形,进程数图形。
切换到cacti的rra目录下面,将会形成相应的rrd数据库文件,生成rrd文件就一定会有相应的图片产生。

















2、监控windows主机的磁盘使用状况
1,准备工作
安装snmp服务,开启snmp服务,使得windows主机成为一个被监管的设备(agent)
Windows 主机的ip地址为192.168.1.102

开始--》控制面板--》添加删除服务--》添加删除组件--》管理和监视工具
进行相关的设置,添加团体名和nms的ip地址



2, 点击graph trees 创建节点windows xp ,以后windows主机的图形就可以挂 载 到这个节点上



3,点击devices 添加被监控的主机,t添加被监管设备的ip地址和要使用的模板,然 后点击create创建。



4,为主机选择图形模板



5,根据所选择的图形模板,绘制磁盘使用情况的图形
点击devices 将会出现window这台主机,选择windows这台主机挂在到刚刚创建的 windows xp 节点上



6,点击graphs这个插件,将会看到windowsxp这个节点,但是还没有出现图片,这个没有关系,点击右上角的logout,从新登陆一下cacti就可以了,将会看到windowsxp节点下面有一台主机winxp,点击winxp将会看到被监控信息,磁盘 物理内存 、虚拟内存使用状况。











五、cacti的报警
简要说明: 实现邮件报警和飞信报警两种功能,cacti所要监控的设备有linux主机本身的用户数,apache服务器的状态 ,磁盘使用情况和windows 主机的磁盘使用情况
拓扑图:



一:cacti插件管理器和插件的安装
Apache 服务器状态的监测,要靠apache的一个运行状态脚本来获取apache运行状态信息的, ss_apache_stats.php ,监控apache
状态的图形模板为cacti_host_template_webserver_-_apache.xml,这些图形模板和脚本到网上可以下载,模板可以中cacti的web页面中导入导出。
1,把脚本拷贝到cacti的scripts的目录下面
cp -p ss_apache_stats.php /var/www/html/cacti/scripts/
2,通过web方式的访问进入到cacti的主界面,导入监控apache服务器的图形模板



导入之后出现如下提示,说明模板导入成功



要想监控apache的运行状态的信息,必须打开apache的配置文件,开启状态输出的功能,状态输出功能的实现,是靠apache在启动时调用一个模块来实现的,然后打开输出状态的访问方式,ss_apache_stats.php这个php脚本就是获取apache输出状态的运行脚本。








重启apache服务器,用浏览器访问http://192.168.1.4/server-status,将会看到apache的输出信息,版本信息,CPU使用信息等。








3,点击devices 菜单,找到apache所在的linux主机,也就是本地主机,在添加图形模板的位置,将会出现有关apache状态信息的模本,这根导入的模板有关。



然后点击添加 保存 最后创建图形



点击graphs 找到host :localhost,将会形成相应的图形











4,但是怎么样才能实现报警呢?目录前cacti实现不了,因为没有安装插件,比如说限制域值的插件,状态图标插件。
cacti-plugin-0.8.7g-PA-v2.8.tar.gz 插件管理器
monitor-latest.tgz 显示状态图标的插件,当被监控的设备是绿颜色,说明是up 状态,当为红颜色是就是down状态
sendMsg.zip 实现msn报警的功能
settings-latest.tgz 增加设置功能
thold-latest.tgz 主要设置域值,超出设置的域值,将要报警。

5, 解压cacti的插件管理器cacti-plugin-0.8.7g-PA-v2.8.tar.gz
切换到cacti-plugin-arch/,将会看到一个补丁,导入数据库的一个脚本



把cacti-plugin-arch/目录下的所有内容,移动到cacti的主目录下面/var/www/html/cacti
把pa.sal 导入cacti数据库中,然后给cacti打补丁





打完补丁之后刷新cacti的主界面,将会发现cacti的主界面有点乱,打开cacti/include目录下的config.php,cacti与数据库连接的配置文件,修改cacti的访问路径为/cacti/



再次刷新cacti的主界面将会清晰明了



点击setting --》用户管理-->admin ,勾选插件管理,然后保存



点击插件管理器,里面还没有任何插件



6,安装所需要的插件monitor-latest.tgzsettings-latest.tgz thold-latest.tgz
解压源代码,把源代码目录移动到cacti目录下的plugins 目录下,修改名称



切换到/var/www/html/cacti/plugins/目录下,修改名称,不改名称,cacti识别不到



7,刷新cacti的web页面,将会看到三个插件。



8,点击按钮,进行插件的安装,安装好之后查件的状态将是active



9,点击settings将会出现很多选项,进行设置,比如说设置报警方式铃声报警、邮件报警。



二:实现邮件报警功能
1,点击settings 按钮,点击mail/dns插件,进行相应的操作,先发送一个测试邮件,用管理员发送邮件。








登录qq邮箱查看测试邮件
2,设置域值,实现报警
点击thresholds(域值)菜单,选中要监控的主机,比如监控本地linux主机的进程数目,设置域值,限制进程数目,最大几个进程,最小几个进程,如果超出范围,将进行邮件报警。








3,进程明显大于100,所以将会发送报警邮件,进入邮箱查看邮件
点击thold 查看告警,如果是红颜色,说明已经超过域值,正在告警,如果是绿颜色,没有超过域值。








过了五分钟,又收到一条告警信息,进程数达到139个,cacti实施报警



4,监控linux主机的apache服务器CPU使用情况,超过1%将进行报警,监控apache服务器的传输的字节数,超过2000字节,将实时报警。











三:实现飞信报警功能
1,解压飞信程序的源代码到当前目录下,拷贝共享库文件到系统共享库目录下也就是/lib目录下,否则,飞信程序执行不了。



2,测试飞信程序,是否可以正常发送飞信,先自己给自己发飞信。
语法:--mobile=发信人的电话号码
--pwd=发信人的飞信密码
--to=收信人的电话号码
--file-utf8=要发送的utf8字符集格式的飞信文件



发送飞信后将会产生一个以.jpg结尾的图片验证码,导出到windows系统的桌面,然后再linux系统当前状态下输入验证码,将会把飞信发出。








3,但是如何才能实现cacti的飞信报警呢?有一个发送飞信的脚本,当监控的设备数据信息超过某个范围时,cacti自动运行脚本发送飞信,可以实现用户不用上网,不在网管工作站,远距离的接受报警信息。把飞信脚本拷贝到 /var/www/html/cacti/plugins/thold/
mkdir /var/www/html/sendsms/
mv linuxso_20101113/ /var/www/html/sendsms/linuxso




切换到 /var/www/html/cacti/plugins/thold/,创建两个文件,alert.log 告警文件,sms.txt 日志文件



4,当监控的信息,超过域值时,告诉thold 执行脚本发送告警飞信。打开thold的声明文件thold_functions.php ,添加两条语句。


到这里我已经实现了邮件报警和飞信报警,你可以根据我的步骤完成cacti的应用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息