服务器的集中监测
服务器的集中监测
1 构建Cacti基本监测体系
Cacti是一款使用PHP语言开发的性能与流量监测工具,监测的对象可以是Linux或Windows服务器,也可以是路由器、交换机等网络设备,主要基于(Simple Network Management Protocol,简单网络管理协议)来搜集CPU占用、内存使用、运行进程数,磁盘空间、网卡流量等各种数据。
实际上Cacti本身只是一个Web界面的管理套件,通过调用Net-SNMP工具来采集监测数据,并结合RRDtool(Round Robin Database Tool,轮询数据库工具)记录数据并绘制图片,如图所示,最终以Web页面的形式展现给管理员用户。
Cacti提供了优秀的整合和协调能力,充分利用LAMP基础平台,SNMP协议工具,RRDtool数据引擎,不仅配置简单、直观,而且支持插件和数据模板,使用时非常灵活,便于进一步扩展监测功能。
1.1 服务器配置(主控端——Cacti)
构建Caci集中监测平台的服务器端时,应提前安装好可用的Apache、MySQL,PHP网站平台,以及Net-SNMP、RRDtool等支持软件,然后下载Cacti源码包进行部署。
1.安装Net-SNMP、RRDtoo1等支持软件
(1)构建数据库及Web平台。
以使用RHEL-5.5系统光盘中的rpm包构建LAMP环境为例,所需安装的主要软件包如下所述。若还提示缺少其他依赖包,请根据提示从光盘中安装相应的软件包即可。
➣ httpd-2.2.3-46.el5、mysql-server-5.0.77-4.el5_4.2
➣ mysql-5.0.77-4.el5_4.2、mysql-connector-odbc-3.51.26r1127-1.el5
➣ perl-DBD-MySQL-3.0007-2.EL5、unixODBC-2.2.11-7.1
➣ php-5.1.6-27.el5、php-mysql-5.1.6-27.el5、php-pdo-5.1.6-27.el5
[root@sky ~]
# yum -y install httpd mysql-server mysql-devel mysql mysql-connector-odbc perl-DBD-MySQL unixODBC php php-mysql php-pdo gd php-snmp openssl-devel
#安装完成以后,配置并启动mysql、httpd服务,确保LAMP协作平台工作正常
[root@sky ~] # service httpd start [root@sky ~] # chkconfig httpd on [root@sky ~] # service mysqld start [root@sky ~] # chkconfig mysqld on |
(2)安装net-snmp-utils软件包。
Cacti平台通过SNMP协议采集监测数据,因此需要用到snmpget、snmpwalk等SNMP数据采集工具。在RHEL5.5系统中,这些工具程序由net-snmp-utifs软件包提供,所需安装的软件包及依赖包如下所述。
➣ net-snmp-utils-5.3.2.2-9.el5
➣ net-snmp-5.3.2.2-9.el5、net-snmp-libs-5.3.2.2-9.el5
➣ lm_sensors-2.10.7-9.el5
[root@sky ~] # yum -y install net-snmp-utils net-snmp net-snmp-devel net-snmp-libs lm_sensors |
(3)安装rrdtool软冉包。
以使用1.4.5版本的rrdtool源码包为例,通过Cacti或RRDtool的官方网站都可以下载到,分别为http://www.cacti.net/,http://oss.oetiker.ch/rrdtool/。注意将安装路径设为/usr/local,方便其他程序自动识别,将下载好的软件包rrdtool-1.4.5.tar.gz和cacti-0.8.7g.tar.gz上传到/home/目录下,然后解压安装。
[root@sky ~] # cd /home [root@sky home] # tar zxf rrdtool-1.4.5.tar.gz [root@sky home] # cd rrdtool-1.4.5 [root@sky rrdtool-1.4.5] #yum -y install gcc c++ [root@sky rrdtool-1.4.5] # ./configure --prefix=/usr/local/ [root@sky rrdtool-1.4.5] # make && make install [root@sky ~] # yum -y install cacti |
2.部署Cacti、设置数据庠连接
(1)部署Cacti源码包。
将下载的Cacti源码包释放Web服务器的网页目录,上传补丁到/home/目录并安装相应的补丁文件。
[root@sky home] # tar zxf cacti-0.8.7g.tar.gz [root@sky home] # mkdir /var/www/html/cacti [root@sky home] # mv cacti-0.8.7g/* /var/www/html/cacti/ [root@sky home] # cd /var/www/html/cacti/ [root@sky cacti] # patch -p1 -N < /home/data_source_deactivate.patch [root@sky cacti] # patch -p1 -N < /home/graph_list_view.patch [root@sky cacti] # patch -p1 -N < /home/html_output.patch [root@sky cacti] # patch -p1 -N < /home/ldap_group_authenication.patch [root@sky cacti] # patch -p1 -N < /home/script_server_command_line_parse.patch [root@sky cacti] # patch -p1 -N < /home/ping.patch [root@sky cacti] # patch -p1 -N < /home/poller_interval.patch |
添加一个用来读写监测数据的用户账号(如"runct"),并调整子目录rra/,log/的属主或权限,以便正常读取及写入数据。
[root@sky cacti] # useradd runct [root@sky cacti] # chown -R root.root ./ [root@sky cacti] # chown -R runct.runct rra/ log/ |
(2)建立数据库,表结构。
先创建用于Cacti监测平台的数据库,并授权一个数据库用户(如:cactiuser),然后使用cacti源码目录下的cacti.sql脚本,导入预设的各种数据表。
[root@sky cacti] # mysql -u root -p |
Enter password: <==默认的root用户数据库密码为空,直接空格 mysql> CREATE DATABASE cactidb DEFAULT CHARACTER SET utf8; mysql> GRANT all ON cactidb.* TO 'cactiuser' @ 'localhost' IDENTIFIED BY 'qwe.123' ; mysql> QUIT |
[root@sky cacti] # mysql -u cactiuser -p cactidb < cacti.sql <==导入预设库 |
Enter password: <==输入刚刚设置的cactiuser用户数据库密码 |
上述操作中,创建cactidb库时将默认的字符集编码指定为utf8,便于支持中文、导人预设库时,最好以之前授权的数据库用户cactiuser执行。
(3)调整Cacti配置文件。
Cacti的配置文件位于源码目录中的include/文件夹下,名称为config.php。要使Cacti系统能够正确访问并使用数据库,必须修改config.php文件确保数据库连接参数正确无误。
[root@sky cacti] # vim include/config.php <?php $database_type = "mysql" ; <==数据库类型 $database_default = "cactidb" ; <==数据库名称 $database_hostname = "localhost" ; <==数据库服务器的地址 $database_username = "cactiuser" ; <==授权用户 $database_password = "qwe.123" ; <==授权密码 $database_port = "3306" ; <==数据库服务的端口 $config [ 'url_path' ] = "/cacti/" ; ?> |
最后的$config['url_path'] = "/";行用来指定cacti源码目录相对于网站根目录的部署路径,如果cacti源码目录直接作为网站根目录则此行内容可以省略否则应为实际部署路径,如$config['url_path'] = "/cacti/";。
除此以外为了在监测图中正确显示中文,需要使Cacti系统识别本机的中文语言环境。对于版本为0.8.7g的Cacti系统,可以修改./lib/functions.php文件添加一行PHP代码setlocale(LC_CTYPE,"zh_CN.UTF-8");。
[root@sky cacti] # vim lib/functions.php setlocale(LC_CTYPE, " zh_CN.UTF-8" ); <==添加此行 |
3. Cacti的初始化安装
(1)调整httpd配置
修改httpd服务的主配置文件,设置好网站根目录,自动索引页,默认字符集等相关参数,然后重新加载httpd服务。
[root@sky cacti] # vim /etc/httpd/conf/httpd.conf DocumentRoot "/var/www/html/cacti" <==cacti源码目录作为网站根目录 <Directory "/var/www/html/cacti" > <==设置目录访问权限 Options None AllowOverride None Order allow,deny Allow from all </Directory> DirectoryIndex index.php index.html <==第一默认首页为index.php AddDefaultCharset UTF-8 <==默认字符集为UTF-8 |
[root@sky cacti] # service httpd restart |
配置防火墙,放行Web服务的80端口和数据库的3306端口
[root@sky cacti] # vim /etc/sysconfig/iptables *filter :INPUT ACCEPT [3833:349566] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [5110:612657] -A INPUT -m state - -state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state - -state NEW -m tcp - -dport 22 -j ACCEPT -A INPUT -p tcp -m tcp - -dport 80 -j ACCEPT <==开放web服务 -A INPUT -p tcp -m tcp - -dport 3306 -j ACCEPT <==开放数据库服务 -A INPUT -p udp -m udp - -dport 161 -j ACCEPT <==开放SNMP监测 COMMIT [root@sky cacti] # service iptables restart [root@sky cacti] # service iptables save [root@sky cacti] # setenforce 0 <==关闭SElinux |
(2)初始化Cacti系统。
在浏览器中访问Cacti服务器的Web服务,如http://192.168.1.10/,初次访问时将会自动跳转至Cacti安装指南界面,如图所示。
根据提示单击【Next >>】(下一步),接受默认的”New install“(全新安装),再次单击【Next >>】后可以看到Cacti的程序调用设置页面,如图所示。
在初始化过程中,程序调用设置是比较重要的环节.如果已安装的支持程序(例如php、rrdtool,snmpwalk等)不在默认的搜索范围中,则需要管理员手动指定实际路径,否则不用做任何改动。
确认各项设置无误后,单击右下角的“Finish”即可完成初始化安装,接下来自动进入Cacti系统登录页面,如图所示。至此Cacti的服务器端就配置完成了。
默认用户名和密码都是admin,第一次登陆需要强制修改密码
1.2 客户机配置(被控端——snmpd)
无论是交换机、路由器、还是Linux或Windows服务器,只要正确支持SNMP协议,并允许Cacti服务器采集数据,就能够进行集中监测了。下面仅介绍在Linux和Windows服码器中启用SNMP支持,并设置共同体名(识别及验证字串)的简单方法。
1. Linux 被控主机的设置
以RHEL-5.5系统为例,需安装光盘中的net-snmp,lm_senssors软件包,然后适当修改配置文件/etc/snmpd/snmpd.conf,并启动snmpd服务即可。snmpd服务默认在UDP协议的161端口响应SNMP查询。
[root@localhost ~] # yum -y install net-snmp lm_sensors com2sec notConfigUser 192.168.1.10 public access notConfigGroup "" any noauth exact all none none view all included .1 80 [root@localhost ~] # service snmpd start [root@localhost ~] # netstat -anpu | grep "snmpd" udp 0 0 0.0.0.0:161 0.0.0.0:* 2719/snmpd |
在文件snmpd.conf中改动的三条配置位于第41,62、85行,具体用如下所述。
第41行,192.168.1.10对应Cacti服务器地址(默认是default),表示允许其查询本机数据;public表示SNMP共同体名称,用来识别及验证,有点类似密码
第62行,all表示开放所有的SNMP查询权限(默认是SystemView)。
第85行,去掉开头的注释符号,以便支持各种查询访问。
2.Windows被控主机的设置
以Windows Server 2008为例,需通过"控制面板“或”服务器管理器“添加”SNMP服务“,功能如图所示。
安装完成以后,通过服务器管理器修改SNMP Service服务的安全属性,指定授权地址,共同体名称,如图所示,确认服务的状态为”已启动”。
2. Cacti的使用及插件扩展
配置好Cacti主控端,被控端以后,就可以设置集中监测任务了.本节将学习在Cacti系统的Web控制台中的基本操作(添加被控主机,创建图形,查看监测结果等)以及如何通过插件来扩展集中监测能力。
2.1 使用Cacti的Web控制台
在浏览器中访问Cacti系统,如http://192.168.1.10/,输入正确的管理员账号,密码(默认均为admin)——首次登录时应根据提示重新设置密码即可进入到Web管理控制台,如图所示。
下面讲解使用Web管理控制台的基本操作,主要包括如何添加被控主机设置监控项目,以及生成监测图像,查看监测图像。
1.添加被控端
(1)添加被控设备或主机。
单击导航栏中【Management】下的【oevlces】链接可以管理被控设备或主机。通过右上方的【Add】链接可以打开添加新设备的页面,如图所示。需要填写的内容主要包括Deserption(描述),Hosmame(主机名或地址),HostTemplate(主机模板),选用udp/net SNMP Host。另外“SNMP Community"处应填写被控端实际使用的共同体名称(如public),最后单击【Create】按钮完成添加。
创建新的被控设备以后将自动连接目标执行SNMP查询。若查询成功则可以继续后面的监测项目设置,否则应检查被控端的SNMP设置、网络连接、防火墙限制、共同体名称等相关因素以排除故障。
(2)设置要监测的项目。
成功连接被控端后会看到'Save Successful”的提示信息,页面下方可看到默认监测的项目如图所示。关联的图像模板(Graph Templates)默认已包括cpu占用,平均负载,内存使用,而数据查询(Data Queries)默认包括接口统计、获取分区信息。其中有些数据查询可能并不适用于当前设备,因此若在Status列看到“0 ltems“信息,表示并未获得有效数据。针对Linux被控端若要添加对系统进程的监测,可以在“Associated Graph Templares"栏目下添加"Unix-Processes”项;若要添加对磁盘分区使用情况的监测,可以在“Associated Data Queries”栏目下添加”SNMP-Get Mounted Partions”项,添加完成后的结果如图所示,其他无效的查询项可以将其删除掉,最终确定无误后单击下方的“Save”按钮保存设置。
修改为以下自定义的模板:
2. 生成监测图依
在Cacti管理控制台中设置好被控端以后,需要为每个监测项目生成直观的图像,然后再将图像添加到监测树以方便集中查看。
(1)创建图像。
单击导航栏中【Create】下的【New Graphs】链接进入图像创建页面后,选择指定的被控主机或设备,并选中其中最需要的图像条目,如图所示。最后单击下方的【Create】按钮,在出现的页面中再次单击【Create】技钮即完成图创建。
实际上并不要求为所有项目都创建图像,例如针对网卡流量统计的监测,更多的是关注eth0,eth1等物理网卡而lo,sit0等虚接口就无需生成图僚了;对磁盘分区的统计也一样,例如交换分区,光盘,软盘等也可以不选择。
(2)添加图像至监测树。
被控端的各种监测图在Cacti系统中以树形结构进行展示,因此对于新创建的图像对象,应该将其添加到【Graph Trees】中,以方便用户分类查看。单击导航栏中【Maragement】下的【Graph Trees】链接,再单击【Default Tree】可以对默认的图像监测树进行管理,如图所示。
单击最右边的“Add”链接,可以向监测树中添加“树项目”节点。“树项目“作为监测树的分支,包括三种不同类型:Host(主机)、Graph(图)、Header(标头)
➣ Host(主机),以整个被控主机或设备作为树节点,自动包括所有监测图。
这种方式操作最为简单、快捷,适合同时监测一个服务器的多个项目。例如,将被控机“Linux论坛服务器”添加到监测树,应将“Tree Item Types”设置为"Host",然后选中对应的被控主机,如图所示,最后单击右下方的“Create”按钮,在接下来的页面中单击“Save”完成添加。
➣ Graph(图),将单个图添加到监测树中的指定分支。
这种方式适合同时监测多个服务器的同一类项目(如网卡流量) ,最好是结合”Header“分支一起使用。在不指定上层分支“Parent Item”的情况下,添加的单个图像默认位于监测树的最顶层”root”下。
➣ Header(标头),在监测树中自定义一个新的分支。
这种方式适合建立自定义的分支结构,如按服务器用途归属部门分类。例如可以先建立一个“网站集群节点-CPU占用"的'Header”,然后在此分支下再添加每个节点服务器的"CPU Usage"图像项目,如图所示。
3. 定期采集监测数据
Cacti系统通过poller.php页面来采集监测数据,需使用php程序解释执行。为了获得持续稳定的数据,应结合计划任务定期进行采集,例如每5分钟(这是poller.php页面的默认刷新间隔)。
[root@sky ~]
# su - runct <==切换为数据采集账号
[runct@sky ~]
$ php /var/www/html/cacti/poller.php <==执行首次数据采集
...... //省略部分内容
05/11/2015 05:46:22 PM - SYSTEM STATS: Time:1.3257 Method:cmd.php Processes:1 Threads:N/A Hosts:2 HostsPerProcess:2 DataSources:13 RRDsProcessed:10
[runct@sky ~]
$
crontab
-e
*/5 * * * * /usr/bin/php /var/www/html/cacti/poller.php &> /dev/null <==设置计划任务,每5分钟采集一次
[runct@sky ~]$ exit
[root@sky ~]
# service crond start <==启动crond服务
4.查看监测结果
单击Cacti管理控制台左上方的"graphs"标签,然后展开左侧栏的Default Tree树,选择被控主机后即可看到各项监测图像,例如eth0网卡的流量统计,如图所示。
页面中默认显示的为最近一天的监测数据,若要查看指定日期及时间段的数据,可以选择起始时间后单击”Refresh“。或者单击其中某个监测项目,可以看到按日、周,月,年分别统计的监测图,如图所示。
2.2 添加Monitor、Thold插件
Cacti系统支持插件扩展,允许自定义图像模板和数据查询,从而能够灵活满足更加多样化的监测需求。下面通过安装及使用Monitor,hold插件介绍扩展Cacti监测系统功能的基本方法。
其中,Monitor插件用来直观地显示各主机的运行状态,状态异常时还能够发出声音报警;Thold插件可以对被监测的项目设置阈值,当达到阈值时及时发送告警邮件。在使用这些插件之前,应该先安装PA(Plugin Archtecture,插件结构)补丁包。
1.安装PA补丁及Monitor、Thold插件包
通过访问Cacti用户站点http://cactiusers.org/,可以下载PA补丁,Monitor和Thold插件包文件,以及Thold所依赖的Settings包文件。将下载好的补丁包上传到/home/目录中进行安装,具体安装过程如下所述。
(1)导入补丁表,安装补丁文件。
[root@sky home] # tar zxf cacti-plugin-0.8.7g-PA-v2.8.tar.gz [root@sky home] # mysql -u cactiuser -p cactidb < cacti-plugin-arch/pa.sql Enter password: <==输入前面设置好的cactiuser用户数据库密码 [root@sky home] # cd /var/www/html/cacti/ [root@sky cacti] # patch -p1 -N < /home/cacti-plugin-arch/cacti-plugin-0.8.7g-PA-v2.8.diff |
(2)安装Monitor,Thold插件。
[root@sky cacti] # cd /var/www/html/cacti/plugins [root@sky plugins] # tar zxf /home/monitor-0.8.2.tar.gz [root@sky plugins] # tar zxf /home/settings-0.5.tar.gz [root@sky plugins] # tar zxf /home/thold-0.4.3.tar.gz [root@sky plugins] # mysql -u cactiuser -p cactidb < monitor/monitor.sql [root@sky plugins] # mysql -u cactiuser -p cactidb < thold/thold.sql [root@sky home] # vim /var/www/html/cacti/include/plugins.php $plugin_hooks = array(); <==搜索到第九行的字段之后在下一行加入内容,保存退出 $plugins [] = 'monitor' ; $plugins [] = 'settings' ; $plugins [] = 'thold' ; |
(3)调整Cacti配置以识别插件。
在Cacti系统的Web控制台中,单击导航栏中【Utilities】下的【User Managewent】链接,修改管理员用户admin的属性,选中【Plugin Management】项,如图所示,然后单击”Save“按钮保存,以便通过Web控制台对插件进行管理。
刷新Cacti控制台页面,左侧导航栏中【Configuration】下将多出一个”Plugin Management"链接。单击此链接进入插件管理页面,通过"Actions"列的按钮可依次加载Monitor、Settings,Thold插件,并启用Thold插件,如图所示。安装成功后页面顶部将多出“thold”、“monitor”这两个选项卡。
若发现页面上方并未出现thold或monitor选项卡,请再次修改管理员用户admin的属性,确认选中”View Thresholds"、“View Monitoring“并保存即可。
2.使用状态监视插件一一Monitor
(1)调整状态监控样式。
单击导航栏中"Configuration”下的"Settings"链接,切换至”Misc”页面并选中“Show lcon Legend"以显示图例,将视图"View"设为“Tiles"如图所示,以便通过带摘要信息的方式查看被控主机状态,确定后单击"Save"按钮保存。
(2)集中监视被控主机状态
启用Monitor插件以后,默认恬情况下现有的被控主机将自动加入状态监测,若希望某个设备不被Molitor插件监测,则应修改被控主机属性,取消选中”Monitor Host“。单击Cacti控制台顶部的"monitor’”选项卡,就可以集中监视各主机的状态了,如图所示。
在状态监视页面中,若被控主机的图标为绿色表示运行正常,若为红色闪烁则表示网络中断或关机等异常,图标为蓝色时表示正在恢复过程中。除此以外,摘要信息中的Status栏也标出了被控主机的当前状态。
3.使用阀值告警插件一一Thold
(1)设置接收告警邮件的邮箱地址。
单击导航栏中”Configuration"下的"Settings"链接,切换至“Thresholds”页面,选中“Dead Hosts Notificaions"以便宕机或恢复时发送通知,同时应在"Dead Hosts Notifications Email"处指定告警邮箱地址,如图所示。
可将发信人地址(From Email Address)设为”yaxinnetwork@163.com,并可指定告警邮件内容;另外建议选中“Send alerts as text",表示以纯文本格式发送邮件,如图所示。最终确认无误后单击”Save“按钮保存。
(2)设管SMTP发信,DNS服务器等参数,
单击导航栏中”Configuration"下的"Settings”链接,切换至“Mai/DNS”页面,将“Mail Services”设为“SMTP”,并填写实际可用的发信地址,SMTP服务器、SMTP认证用户和密码以及DNS服务器地址等信息如图所示。确认无误后单击“Save”按钮保存。
此步骤中还可以对发信进行简单测试,只需在“Test Email"处指定一个收信邮箱,然后单击右上方的"Send a Test Email"即可。如果设置无误且邮件服务器正常,则弹出的窗口中将会出现”Success“的提示信息。
(3) 关联需要预警的监测项目
单击导航栏中"Templates"下的"Thresnold Templates”链接,切换至预警模板设置页面,单击“Add”可以添加预警项、数据模板应与被控设备使用的模板相匹配。例如,若要针对CPU使用率设管告警阈值,可选择“ucd/net - CPU Usage - User"模板,然后单击"Create”按钮在出现的页面中将上限阈值”high Threshold“设为85,如图所示;表示当CPU使用率超过85%时发送告警。最后在页面底部的”Alert E-mail”处设置告警邮箱地址(如yaxin@163.com),确定无误后单击“Save”按钮保存设置即可。
在关联各种监测模板时告警阈值的默认计量单位如下:CPU使用率为百分比值(不含%),网卡流量为Byte/s,硬盘空间为KB,内存占用为KB。根据服务器的性能和实际应用需要,可以参考上述过程关联多个预警项,例如当剩余内存低于50MB时,入站流量超过80MB/s时,出站流量超过50MB/s时,发送报警邮件。
(4)为被控主机启用阈值告警。
单击导航栏中“Create”下的”New Graphs"链接,选择指定的被控主机,然后单击右上方的“Auto-create thresnolds”(自动创建预警)链接,将会自动创建可用的阈值告警项目。
(5)查看闽值告警
单击导航栏中"Management"下的"Thresholds"链接,可以对已启用的阈值告警项进行管理(查看,添加,删除等);或者通过Cacti管理页面上方的"thold"选项卡,可以查看阈值告警情况,达到告警条件的监测项将以红色显示,如图所示。
除此以外,当满足阈值告警条件或者被控主机失去响应时,Thold插件系统将会发送告警邮件,查阅指定邮箱可以收到告警邮件。例如当被控主机Linux论坛服务器的CPU占用率超过85%时,邮箱yaxin@163.com中可收到如下告警邮件。当被控主机“Windows 文件服务器”网络中断或关机时,邮箱yaxin@163.com中可收到以下告警邮件。
[root@localhost ~] # less /var/spool/mail/alert …… F rom: Cacti_System <cactiuser@sky.com> To: alert@sky.com Date: Mon, 11 Jul 2011 10:55:10 +0800 X -Mailer : Cacti -Thold -v0.4.3 User -Agent : Cacti -Thold -v0.4.3 Subject: Linux论坛服务器 - CPU Usage - User [cpu_user] went above threshold of 85 with 96.0467 Content -Type : text/plain MIME -Version : 1.0 An alert has been issued that requires your attention. Host: Linux论坛服务器 (172.16.16.172) URL: http://192.168.4.254//graph.php ? local_graph_id=5&rra_id=1 Message: Linux论坛服务器 - CPU Usage - User [cpu_user] went above threshold of 85 with 96.0467 |