基于SuSE Linux系统的cacti系统_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3254 | 回复: 0   主题: 基于SuSE Linux系统的cacti系统        下一篇 
    本主题由 Administrator 于 2014-9-9 23:09:35 移动
huifang.dai
注册用户
等级:上校
经验:3551
发帖:91
精华:7
注册:2014-3-24
状态:离线
发送短消息息给huifang.dai 加好友    发送短消息息给huifang.dai 发消息
发表于: IP:您无权察看 2014-9-9 15:23:34 | [全部帖] [楼主帖] 楼主

基于SuSE Linux系统的cacti系统 了解服务器的运行状况是件非常重要的工作,尤其是一些关键数值的变化,不仅可以帮助我们解决一些隐患,而且还能分析服务器的瓶颈、性能等问题。在我维护的公司服务器群中,经常会遇到一些大大小小的问题,不是因为磁盘空间满,就是程序的BUG导致服务器负载过高而死机。所以,必须要有一套系统来维护、管理服务器群,但由于商业软件太昂贵,只能考虑一些免费的管理软件了,呵呵,我们的目标是零投入、高产出,是不是太……,唉,没办法啊,谁让商业软件太贵买不起。 本文通过SNMP、rrdtool、cacti等免费工具打造了一套带有简单报警功能的监控系统,尽管是免费的,但其价值丝毫不逊于商业软件。开始工作前,我们需要了解一些基本概念,这将有助于我们更加全面的掌握、使用监控系统,也使我们在后期的维护及优化中更加游刃有余。 一、SNMP简介 虽然TCP/IP的管理协议SNMP(Simple Network Management Protocol)称为简单网络管理协议,但实际上SNMP相当复杂。所以这里只能给大家简单的描述一下,如果读者想深入SNMP协议,可以参阅 http://www.faqs.org/rfcs/index.html 中有关SNMP协议的详细介绍。 SNMP主要由两部分组成:一部分是MIB(Management Information Base,管理信息结构)的定义,也就是我们访问的实体内容,如:系统信息、TCP信息等;另一部分是访问管理信息库的协议操作:get、get-next、set和trap,通过这些操作可以访问实体内容。 管理信息库是一个树状的结构,如图1所示,OID(object identifiers)对象标识符用数字表示,MIB则用文字描述。其实这两个概念和IP地址ó域名相对应的原理是一样的,通过查询OID和MIB都可以获取我们想要的信息,但是使用OID更为方便一些,就像我们更喜欢域名一样。本文中所有使用的OID都是1.3.6.1.4.1,即enterprises。 举个例子:查看系统正常运行时间的OID是1.3.6.1.2.1.1.3,也可以将这个OID写成iso.org.dod.internet.mgmt.mib-2.system.sysUpTime。 图1:OID树状结构图 SNMP目前有3个版本: SNMP Version 1: SNMP协议的首个版本,因为配置、使用很简单,所以也是最常用的。这个版本的安全策略使用的是限制IP访问和团体名的方式,而且数据传输也不加密,一旦被非法用户获取访问方法,服务器的所有信息将被一览无余。 SNMP Version 2: SNMP的第二版本, 也称为v2c。SNMPv2在前一版本的基础上扩展了错误代码数量和计数器的大小,并且在查询大量数据信息时能够保证较高的效率。 SNMP Version 3: 相对于前两个版本,v3提供了更为强大的安全机制和远程配置功能。它不再使用团体名和读写访问控制作为安全策略,而是加入了用户名和密码的机制。最重要的一点是v3版本支持SNMP数据传输和错误检测加密传输。并且可根据每个用户来单独设置访问OID值的权限。 NET-SNMP就是基于上述原理开发的免费SNMP工具,这款工具的实现原理与设计同SNMP协议完全一致。当今几乎所有的Linux系统和网络设备(路由器、防火墙等)都支持SNMP协议,所以通过SNMP能够轻松的获取监控设备的信息。 二、MRTG、RRDtool和cacti 由于NET-SNMP收集的数据都是数值形式,不利于分析系统。需要有工具将收集到的数据画成连续的图形便于直观的了解、监控系统,而MRTG(多路由器流量记录仪)和RRDtool可以实现这个功能。 MRTG是由crontab定时运行,负责从监控的主机采集数据,然后将这些实时数据保存并创建连续图形。MRTG有几项基本功能。首先,它保存着一个不需要维护大小的数据库:软件只保存实时的数据来创建图形,所以保存数据的文件大小一直不变,时间一长,就无法看到历史数据图形了;其次,虽然MRTG可以记录任何SNMP变量并绘制其图形,但很可惜,它的图形整合功能不强,如果想创建有多个数据源的监控,就得画多个图形,这样很不利于管理工作。为了解决上述问题,MRTG的作者编写了RRDtool。 RRDtool在概念上类似于MRTG,但它具有改进的数据合并和图形整合功能。和MRTG不同的是,RRDtool不提供它自己的任何数据收集方法,而是必须由一个单独的软件来收集、保存数据,另外,RRDtool可以将不同的数据源画在一张图表上。 因为RRDtool绘制图形极为复杂,且不易掌握,所以需要和Cacti的配合使用,Cacti是由PHP编写的功能强大的图形显示、配置工具。通过Cacti和这些软件的结合使用,将会展示给我们一个直观的结果。 Cacti作为前端程序,不仅可以方便的监控任何运行SNMP协议的设备,而且加上Shell程序,将可以完成一些简单的报警机制,这对我们自动化监控有很大帮助。我们的目的是使所有的工作简单化,最好什么都不做就实现目标,呵呵,痴人说梦。下面就跟我开始真正的工作吧。 1. 安装软件 我选用了SLES9平台,即SuSE Linux Enterprise Server 9,SuSE这名字是德文“Software und System Entwicklung”的缩写,意思是“软件及系统开发”,目前SUSE公司已被Novell所收购。之所有选择SuSE的操作系统,不仅是因为它是全球第二大Linux厂商,更重要的是它在自动化方面很强大,通过SuSE的YaST(Yet another Setup Tool)图形管理工具不仅可以方便的安装大量软件,而且在配置系统硬件、网络服务时也很容易上手,这项功能对Linux初学者来说很重要。 下面,我们就在已经安装好的系统环境中运行SuSE的强大工具YaST来安装以下繁多的软件吧。安装前有个小建议,请不要将时间浪费在安装软件上,也就是说,有了方便的RPM包,而且没有什么特殊需求,就不要从源代码直接编译安装了,呵呵,可不要像我当初一样,花了好几个小时安装软件,装完也没心情继续下面的工作了。 图2:SLES9界面 apache2-example-pages-2.0.49-27.29 apache2-2.0.49-27.38 apache2-prefork-2.0.49-27.38 apache2-doc-2.0.49-27.29 Mod_php4-apache2-4.3.4-43.8 apache2-mod_php4-4.3.4-43.46.3 mysql-shared-4.0.18-32.1 mysql-client-4.0.18-32.1 mysql-4.0.18-32.20 php4-mysql-4.3.4-43.46.3 php4-4.3.4-43.46.3 php4-snmp-4.3.4-43.8 php4-mysql-4.3.4-43.46.3 rrdtool-1.2.15 libpng-devel-1.2.5-182.4 libart_lgpl-devel-2.3.16-84.1 tcl-devel-8.4.6-26.3 python-devel-2.3.3-88.1 Freetype2-devel-2.1.7-53.5 zlib-devel-1.2.1-70.12 net-snmp-5.1.3.1-0.6 libxml-1.8.17 软件表 如果在安装软件时系统提示还需要别的软件,可根据提示来添加安装。 启动“YaST安装和卸载软件”模块来安装表中软件包: 【方法1】图形模式:单击工具栏“开始”->系统->YaST->系统->安装和卸载软件 【方法2】图形模式:在命令行输入“yast2”->系统->安装和卸载软件 【方法3】图形模式:在命令行输入“yast2 sw_single” 【方法4】文字模式:输入“yast”->Software->Install and Remove Software 【方法5】文字模式:输入“yast sw_single” 利用“YaST安装和卸载软件”模块的搜索功能,输入软件列表中的软件包名,出现如下所示的界面,勾选这些软件包。可以同时将所有软件搜索、选择后再点击“接受(A)”安装。 图3:YaST安装界面 按下“接受(A)”后,这时会出现提示插入光盘的信息,根据提示插入光盘后便可顺利安装。SuSE的RPM软件包不仅多、全,而且还可通过一些SuSE的安装源或 http://rpmfind.net 查找不同平台、不同版本的RPM包。 我也在其它版本的linux系统安装过这些软件,有时因为找不到相同版本的RPM包,导致包的依赖关系也不一样,所以安装很麻烦。包依赖关系的问题在SuSE系统中得到了比较好的解决。 2. 安装配置cacti 所有软件安装完毕后,接下来就来安装、配置本文的主角cacti。 linux:~ # useradd cactiuser # 添加cacti需要的用户 linux:~ # cd /srv/www/htdocs/ # SuSE的网页目录 linux:/srv/www/htdocs # wget http://www.cacti.net/downloads/cacti-0.8.6h.tar.gz linux:/srv/www/htdocs # tar zxvf cacti-0.8.6h.tar.gz # 解压cacti软件包 linux:/srv/www/htdocs # mv cacti-0.8.6h cacti linux:/srv/www/htdocs # chown –R wwwrun.www cacti linux:/srv/www/htdocs # cd cacti linux:/ # mysqladmin --user=root create cacti # 创建数据库cacti linux:/ # mysql cacti GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'somepassword'; # 创建cactiuser用户、设置密码“comepassword”并付予新创建的cacti数据库的所有权限 Mysql > flush privileges; # 更新权限表 编辑文件include/config.php,找到下列内容然后根据上面的信息进行修改。 $database_default = "cacti"; $database_hostname = "localhost"; $database_username = "cactiuser"; $database_password = "cacti"; 设置权限: linux: ~ # chown -R cactiuser rra/ log/ # 设置属主为cactiuser,这一步很重要,会影响cacti的正常运行 linux:/ # crontab –e # 设置定时任务 */5 * * * * php /srv/www/htdocs/cacti/poller.php > /dev/null 2>&1 # 每5分钟使用命令php执行一次poller.php轮循文件,这一步主要将收集到的信息绘制成图表 启动进程服务: linux:/ # insserv apache2 mysql snmpd # 设置开机时自动启动服务 # 启动下列服务 linux:~ # rcapache2 start Starting httpd2 (prefork) done linux:~ # rcmysql start Starting service MySQL done Cacti和系统环境配置完毕后,输入目标服务器IP访问Cacti。 http://your-server/cacti/ 图4:Cacti登陆界面 恭喜!看到上面的图片,说明cacti已经和mysql、apache结合成功并运行正常了。输入默认的用户名和密码“admin”后,系统将提示你设置新密码。 图5:修改密码界面 设置完新密码后,先别急着添加主机,因为SNMP还没配置好,即使进去了也看不到任何图形和数据,先进入下一环节,配置SNMP。 三. 配置SNMP 如果您在前面的基本概念环节还有模糊的地方,那么接下来的内容将使我们更加深入理解监控系统的工作原理。先来配置snmp。本文中cacti和snmp都配置在同一台主机环境中。 1. 配置snmp文件 linux:~ # cat /etc/snmpd.conf com2sec test 192.168.0.1 public group testgroup v1 test view all included .1 80 access testgroup "" any noauth exact all none none disk / 95% disk /home 1048576 includeAllDisks load 1 3 5 proc apache 10 1 swap 1048576 exec .1.3.6.1.4.1.2021.53 link.sh /bin/sh /root/link.sh linux:~ # (1) com2sec NAME SOURCE COMMUNITY 该指令定义了安全访问名、可访问监控主机的IP地址和团体字符串。安全访问名可任意取;第二个选项默认值是default,表示允许所有IP都可访问监控服务器,由于SNMPv1是明文传输数据,所以为了安全,需要将这项修改一下,192.168.0.1表示仅允许这个IP地址访问SNMP监控服务器,除了这种形式,还可将其设置为一个主机名或IP/MASK的形式;Public是系统设置的默认团体名,也得设置复杂些,安全第一嘛。 (2) group NAME MODEL SECURITY 定义一个组并映射com2sec设置的安全访问名,同时设定使用SNMPv1版本。 (3) view NAME TYPE SUBTREE [MASK] 本条指令用来创建可访问OID范围。NAME任取,TYPE包括“included”和“excluded”,表示监控内容包括或排除后边的SUBTREE;“SUBTREE”就是范围OID的范围了,“.1”表示最大权限,即从根部(ISO)访问的权限;“80”是掩码,用来起限制作用。 (4)access NAME CONTEXT MODEL LEVEL PREFX READ WRITE NOTIFY access用来定义访问OID的权限 (5) disk PATH [ MINSPACE | MINPERCENT% ] includeAllDisks MINPERCENT% 为了使大家更容易理解这两条语句及下面的配置,请先将上面的配置信息写入/etc/snmpd.conf并启动snmp进程服务。然后运行命令: linux:~ # snmpwalk -v 1 -c public localhost 1.3.6.1.4.1.2021.9 这个OID是查看磁盘信息的,disk指令表示监控一个分区,第二条则监控全部分区,如果设置了最小使用率,一旦磁盘容量超出最小设定值时,OID中的“dskErrorFlag”的标志位将会置为“1”。磁盘使用率可以用百分比和kb的方式来表示。所有磁盘信息都包含在这个OID中。如果您忘了具体OID号,可以使用下面介绍到的snmp命令snmptranslate获取OID号。 (6) load MAX1 [MAX5 [MAX15]] OID:1.3.6.1.4.1.2021.10 系统的1、5、15分钟的系统负载变化,超过最大值后也会将相关错误标志位设为“1” (7)proc NAME [MAX [MIN]] OID:1.3.6.1.4.1.2021.2 监控进程的数量。这里我设置监控apache的进程数,当进程多于10和少于1都将报错。 (8)swap MIN OID:1.3.6.1.4.1.2021.4 检测swap分区的状态。 (9)exec [MIBOID] NAME PROG ARGS OID:1.3.6.1.4.1.2021.53 该指令可以执行脚本程序,“MIBOID”是个自定义的OID,定义前先使用snmpwalk命令确定该OID不存在,NAME任取,“PROG”和“ARGS”表示执行的命令和脚本程序。 link.sh脚本内容: linux:~ # vi link.sh netstat –an | wc -l # 显示当前系统的所有连接数 w –h | wc –l # 当前登陆的用户数量。如果后半夜有人登陆系统,说明很有可能黑客光顾了 wc –l /sbin/fdisk -l Cannot open /dev/hda Cannot open /dev/sda sybase@linux:~> linux:~ # chmod 4755 /sbin/fdisk linux:~ # ls -l /sbin/fdisk -rwsr-xr-x 1 root root 73792 2005-06-28 18:20 /sbin/fdisk linux:~ # su - sybase sybase@linux:~> sybase@linux:~> /sbin/fdisk -l Disk /dev/hda: 81.9 GB, 81964302336 bytes 16 heads, 63 sectors/track, 158816 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Device Boot Start End Blocks Id System /dev/hda1 * 43693 60337 8389080 83 Linux /dev/hda2 41612 43692 1048824 82 Linux swap /dev/hda3 60338 158816 49633416 f W95 Ext'd (LBA) Partition table entries are not in disk order Disk /dev/sda: 18.2 GB, 18200739840 bytes 255 heads, 63 sectors/track, 2212 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 13 104391 83 Linux sybase@linux:~> 通过这个例子,我们了解到了SUID和SGID的优劣,所以最好不要用。为了系统运行在一个安全的环境中,监控这些权限位的文件数量的变化很重要,通过下面的方法实现。 linux:~ # vi findsuid #!/bin/bash find / -perm -4000 -type f -print > /root/suid 2>&1 find / -perm -2000 -type f -print > /root/sgid 2>&1 # 将suid和sgid的值保存在这两个文件中 chmod 755 /root/suid chmod 755 /root/sgid # 设置可执行权限,为SNMP做准备 linux:~ # chmod 755 findsuid linux:~ # crontab –e 30 2 * * * /bin/bash /root/findsuid # 根据服务器负载来设置脚本的执行时间 这段程序的结果存放在root目录的suid和sgid两个文件中,通过snmp读取这两个文件的统计结果便能实现监控目的。 注意:这个程序运行时间较长,所以要和cacti设置的定时任务时间不能太接近。 这些配置内容是我经过反复的测试、实践得来的,虽然很简单,但很实用,而且大部分的功能都实现了。还有一些高级的配置,可以参阅官方帮助文档或使用“man”命令查看手册。检测配置文件无误后,启动snmp服务: linux:~ # rcsnmpd start Starting snmpd done linux:~ # 测试: linux:~ # snmpwalk -v 1 -c public localhost 1.3.6.1.4.1.2021 UCD-SNMP-MIB::prIndex.1 = INTEGER: 1 UCD-SNMP-MIB::prNames.1 = STRING: httpd2-prefork UCD-SNMP-MIB::prMin.1 = INTEGER: 0 UCD-SNMP-MIB::prMax.1 = INTEGER: 0 UCD-SNMP-MIB::prCount.1 = INTEGER: 6 UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: 0 UCD-SNMP-MIB::prErrMessage.1 = STRING: UCD-SNMP-MIB::prErrFix.1 = INTEGER: 0 UCD-SNMP-MIB::prErrFixCmd.1 = STRING: …… linux:~ # 如果“哗啦哗啦”显示一大堆的数据,说明配置已经生效,可以顺利的进入下一环节了,如果没有显示信息,请检测配置文件正常性以及网络状态和系统是否设置了防火墙。 四、简单配置cacti 现在继续接着第2环节的Cacti配置。先登陆 http://your-server/cacti ,然后输入前面设置的用户名和密码,这时cacti将提示用户配置监控环境。 图6:Cacti安装向导(1) 点击“Next”继续 图7:Cacti安装向导(2) 选择安装模式,有全新安装和从cacti老版本升级安装两项,根据环境来选择。 图8:Cacti安装向导(3) 这些设置比较重要,如果命令的位置和版本填写有误,cacti在后面将无法正常工作。如果不是很清楚命令的位置,可以使用“which”命令查找一下。 linux:~ # which php /usr/bin/php linux:~ # (1)添加监控主机 登陆到配置界面后,系统已经将localhost本机加到监控主机列表中,可以先删除它。然后重新将配置好SNMP的主机也,就是本机添加进来。开始前,注意先确定已经启动snmp进程。 图9:Cacti配置主界面 选择图9红框处“Devices”,进入下一界面后,点击右上角的“Add”。 图10:添加监控服务器 参考下列信息填写: Descritpion 对服务器的描述信息,任意取一个容易记的名称 Hostname 监控主机的IP地址或主机名,如果使用主机名,别忘了设置/etc/hosts Host Template 根据监控主机的类型来选择,如果是Linux系统,通常选择“Local Linux Machine”和“ucd/net SNMP Host”。这里选择了“ucd/net SNMP Host”。 SNMP Community 要和snmpd.conf中的团体名一致 SNMP Version 如果选择Version 1,就不用设置SNMP Username和SNMP Password两项了,因为只有在Version 3中才会使用。 SNMP Port 默认使用161端口 SNMP Timeout 获取目标主机信息的超时时间 信息填写完整无误后,点击“Create”创建。 图11:监控服务器添加成功 如果出现图11左上角的信息后,表明cacti已经检测到了当前主机的snmp信息。首台服务器添加成功,接着为它创建图形,按照图10的提示,点击“Create Graphs for the Host”。 图12:创建监控图形 创建监控图形是根据前面选择的模板“ucd/net SNMP Host”来创建的,这个模板包含主机的CPU使用率、系统负载、内存信息及网卡数据流量。选择好要创建的图形后,点击“Create”。 图13:创建监控图形成功 当我们看到图13红框框的信息时,说明第一台服务器已经成功添加。写到这里,监控系统的基本框架算是完成了,通过上面的步骤我们可以反复添加多台服务器。接下来,我们需要做一些完善工作。 图14:创建显示图形 为了使创建的图形让我们更容易监控、查看,可以将每台服务器的信息单独分类显示。根据图14依次点击“Graph Trees”->“Add”。 图15:图形名称 输入提示信息,“Name”是图形显示的名称。 图16:选择服务器监控图形 创建完毕后,点击“Graph Management”,Cacti会显示所有创建的图形,在“Filter by host”的下拉菜单中选择刚才我们填加的服务器。 图17:选择服务器 勾选所有图形信息,然后添加到刚才创建的“Graph Trees”中的名称。 图18:确认添加 单击“yes”添加。 图19:显示监控图形 点击“Graph”查看监控图形。 图20:显示服务器监控图形 不出意外的话,将会显示监控图片的信息。配置到这步,添加的主机应该可以正常工作了,如果觉得图形数据更新有些慢,可以手动执行前面crontab中定义的内容 linux:~ # php /srv/www/htdocs/cacti/poller.php 08/05/2006 12:36:27 PM - SYSTEM STATS: Time:1.3777 Method:cmd.php Processes:1 Threads:N/A Hosts:2 HostsPerProcess:2 DataSources:11 RRDsProcessed:10 OK u:0.00 s:0.03 r:0.06 OK u:0.00 s:0.03 r:0.07 OK u:0.00 s:0.03 r:0.07 OK u:0.00 s:0.03 r:0.07 OK u:0.00 s:0.03 r:0.07 OK u:0.00 s:0.03 r:0.07 OK u:0.00 s:0.03 r:0.07 OK u:0.00 s:0.03 r:0.08 OK u:0.00 s:0.03 r:0.08 OK u:0.00 s:0.04 r:0.08 linux:~ # 五、监控远程局域网 我们的服务器分布在全国各地,而且有的机房中是一台服务器带多台后台服务器,由于只有一个公网IP,所以远程内网的机器信息是无法直接获取的,如果想实现真正的全网监控,前面的配置无法满足要求。不过不用担心,强大的NET-SNMP已经考虑到这一点了,通过snmp v3的代理功能可以完成这项工作。 代理的涵义很简单,如下图所示。 图21:获取远程局域网信息 实现代理功能需要对代理服务器和内网服务器分别配置。我们先来配置代理服务器。 (1)创建用户 创建一个名为snmpuser的用户,设置验证密码为“TESTADMIN”,并设置为只读模式。密码不能少于8位字符。添加用户前,要关闭snmp服务进程服务。 linux:~ # net-snmp-config --create-snmpv3-user -ro -a " TESTADMIN " snmpuser adding the following line to /var/lib/net-snmp/snmpd.conf: createUser snmpuser MD5 "TESTADMIN" DES adding the following line to /usr/share/snmp/snmpd.conf: rouser snmpuser linux:~ # (2)配置文件 添加完用户后,就可以配置snmpd.conf了。 linux:~ # cat /etc/snmpd.conf rouser snmpuser auth # 设置snmpuser为只读用户,并设置认证 proxy -Cn 100.hatest01 -v3 -u snmpuser -l authNoPriv -a MD5 -A TESTADMIN 172.16.0.100 .1.3 # 100.hatest01为自定义名称,172.16.0.100是监控的内网服务器的IP,如果有多台机器,可依次添加。“.1.3”代表可访问内网服务器的OID范围 view all included .1 80 # 设置访问代理服务器OID的权限 其它的一些配置可以参考前面SNMPv1的内容,如:磁盘空间,执行脚本等。配置无误后,启动snmp进程服务。 linux:~ # rcsnmpd start Starting snmpd done linux:~ # 配置内网服务器: (1)添加用户(关闭snmp服务) 必须和代理服务器用户信息内容一致。 linux:~ # net-snmp-config --create-snmpv3-user -ro -a " TESTADMIN " snmpuser adding the following line to /var/lib/net-snmp/snmpd.conf: createUser snmpuser MD5 " TESTADMIN " DES adding the following line to /usr/share/snmp/snmpd.conf: rouser snmpuser linux:~ # (2)配置文件 rouser snmpuser auth view all included .1 80 启动snmp: linux:~ # rcsnmpd start Starting snmpd done linux:~ # 测试方法: 访问代理服务器: linux:~# snmpwalk -v3 -u snmpuser -l authNoPriv -a MD5 -A TESTADMIN 172.16.0.210 .1.3.6.1.4.1.2021 上述参数请参阅相关帮助文档。 访问后台监控机器: linux:~# snmpwalk -n 100.hatest01 -v3 -u snmpuser -l authNoPriv -a MD5 -A TESTADMIN 172.16.0.210 .1.3.6.1.4.1.2021 访问内网的服务器只要多增加一个参数“-n”即可,100.hatest01是前面代理服务器snmp配置文件中设定的内网服务器名。如果有多台,可依次添加。 通过命令行我们已经成功的获取远程局域网服务器的信息了,下面就通过Cacti来创建监控图形。先来添加代理服务器。步骤和上面添加设备的一样。 图22:添加代理服务器 根据配置文件输入图22的信息,然后点击“Create”。 图23:添加成功 创建图形以及图形分类的操作和前面的配置方法一样。接着添加远程局域网的服务器。 图24:添加远程内网服务器 刚开始我使用Cacti添加远程局域网服务器时,始终无法成功,因为不知道如何填写“Hostname”,还有就是多了一个参数“-n”。但是经过我不懈的努力、尝试,还分析了Cacti的源代码,终于让我找到了解决方法。 通过这个方法,彻底实现了全网的服务器监控。图中“SNMP username”的信息非常重要,只有这种形式才能正常的获取远程局域网服务器信息。还有“Hostname”要填写代理服务器的IP地址。 六、Cacti高级配置 snmp配置环节中,我们自定义了一些OID值,但在Cacti的模板中不存在这些图形,所以需要我们自己来制作模板,这项操作不仅可以把所有数据源画在一张图表上,而且便于管理。 现在我们就以前面snmpd.conf配置文件中的指令“exec”新创建的OID 1.3.6.1.4.1.2021.53作为实例,将该OID作为模板的数据源。 图25:创建数据模板(1) 首先,点击图25“Data Templates” 图26:创建数据模板(2) 参考如下内容来填写,其它值保持默认。 Name 第一个Name是模板的名称,可自定义设置 Name 第二个Name,“host_description”用来显示主机的IP地址,Test是新创建的模板名 Data Input Method 获取数据的方法,选择“Get SNMP Data” Internal Data Source Name 数据源值的名称“Test” Minimum和Maximum这两个值如果不填写表示使用数据源的最大和最小值作为图形的上、下限值 Data Source Type 选择“COUNTER” 图27:设置OID 输入OID值,这一步是定义数据源最关键的一个环节,不仅要确认OID真实存在而且保证是一个数值才行。点击“save”保存数据源。 图28:创建图形模板 为新的数据源创建图形模板。这部分仅设置两个值,其它默认不变。点击“create” 图29:添加数据源 当图形模板创建完毕后。下面就需要用前面定义的数据源创建我们需要显示的图形了。一个数据源至少需要定义四个数据值,分别是“区域图”、“当前值”、“平均值”和“最大值”,这些值分别显示了系统不同时段的图形状态。点击“Add”添加。 图30:创建数据区域 参考下列信息填写: Data Source 选择定义的数据源模板 Color 只有“Graph Item Type”图形类型选择的是AREA, STACK, LINE1, LINE2, LINE3其中之一,才能够为数据源选择颜色。 Graph Item Type 定义图形的模板类型,因为是首个图形模板,所以要选择“AREA”。 Text Format 定义一个显示名称 其它的数值保持默认,点击“create”。 图31:当前值图形 再次点击“Add”,创建当前运行值。 Data Source 选择“Test” Graph Item Type 选择“GPRINT”图形类型,只有这个类型才能定义当前、平均和最大值,具体可查看图35。 Consolidation Function 选择“LAST”,表示当前运行的值 Text Format 定义图表中显示的名称 图32:平均值图形 创建平均值时,只需修改“Consolidation Function”和“Text Format”的内容即可。 图33:最大值图形 创建最大值,也是修改“Consolidation Function”和“Text Format”的内容,不过多了一项“Insert Hard Return”,表示插入一个硬回车,这是为了和其它新创建的图形不要重叠显示在一起。 图34:第二数据源 选择插入硬回车后,说明一个图形模板定义完成,可以继续在新图形模板中加入数据源。创建方法同上,只是注意要修改第一个图形类型为“STACK”,如图34,只有这样才能将所有数据源画在一张图表上。 图35:已创建的图形模板 图35中将两个数据源画在一张图表上。接下来可将新创建的图形模板添加到存在的模板中,这些工作很简单,我就不再多说。到目前为止,基于Cacti的监控、显示全部配置完成,但是还不具备报警功能,所以,下面就跟我来用一些简单的Shell程序实现报警功能吧。 七、监控报警Shell程序 虽然监控系统已经正常工作,但我们不可能时时刻刻都盯着这些图表,为了使监控工作自动化,我们可以通过下面的脚本程序来完成一些简单的报警工作。编写脚本前,先要启动mail服务器进程,因为报警是通过邮件的。SuSE系统的默认安装的是Postfix,直接启动即可,无须修改配置文件。 linux:~ # rcpostfix start Starting postfix done linux:~ # 创建脚本: linux:~ # mkdir -p /etc/shell # 创建目录 linux:~ # touch /etc/shell/snmp-disk.sh # 生成文件 linux:~ # chmod 755 /etc/shell/snmp-disk.sh # 设置权限 linux:~ # cat /etc/shell/snmp-disk.sh #!/bin/sh disk=5 # 监控的磁盘空间数量 up=95 # 设置的阀值,超过将报警 ip="168.168.20.221 168.168.20.220 xxx.xxx.xxx.xxx" # 监控的所有目标服务器IP地址 for k in $ip do { dir=`snmpwalk -v 1 -c fqofviqasdfasdfqer984rlks $k 1.3.6.1.4.1.2021.9.1.2|awk '{print $4}'` # 获取远程主机磁盘目录名 n=1 while [ $n -lt $disk ] do { for i in $dir do { num=`snmpwalk -v 1 -c fqofviqasdfasdfqer984rlks $k 1.3.6.1.4.1.2021.9.1.9.$n|awk '{print $4}'`; # 获取远程主机磁盘空间容量 if [ $num -gt $up ] then echo "服务器 $k 的 \"$i\" 磁盘分区已达$num%,请检查!" | mail -s $k服务器磁盘$i空间已达$num% alex.li@haoxi.com # 当磁盘空间容量超过设定的阀值时,系统将给指定地址发送电子邮件报警 fi n=`echo $n+1|bc`; # 累加操作,然后循环再判断其它分区 } done } done } done 程序编写无误后,接下来设定crontab定时任务,配置程序的执行时间。 linux:~ # crontab -e 30 0 * * * /bin/bash /etc/mrtg/snmp-disk.sh # 每天凌晨0点30分执行这个脚本,注意:bash命令要使用绝对地址才能正常运行 如果需要增加监控的次数,可修改crontab设置。虽然这个脚本可以实现邮件报警,但如果我们在“梦中”(睡觉)或看不到邮件就无法收到服务器的报警信息了,一直想通过WAP来实现短信报警的功能,但是没有时间做,而且现在又找到了新工作,呵呵!希望哪位WAP高手有兴趣来试试。通过snmp协议还可以监控到更多的信息,这段小程序仅仅起到一个抛砖引玉的作用,希望大家多多研究,打造出安全、高效的监控、报警系统。因为只有想不到的,而没有做不到的。 八、排错 Cacti在使用过程中有时会遇到一些大大小小的问题,我总结了一下,希望对您有所帮助。 (1)如果无法收到邮件,请检查linux系统上的邮件服务是否启动; (2)远程机器的snmp数据无法取到时,请先检查snmp服务是否开启,然后查看防火墙配置是否有限制; (3)当发现无法更新Cacti数据时,查看一下磁盘空间是否已满 这套监控系统我已经安装、配置无数遍了,其中走了不少弯路,如果您是跟着本文中的配置一步步来的,那么,一遍就足够了,除非您想多练习几遍。当您决定要将这些内容配置在真正的应用环境时,我建议按照如下的步骤来做: 确定监控主机数量。监控广域网的服务器是件比较麻烦的事,尤其是在服务器数量庞大、监控信息多、地理位置不同的环境中。如果一台监控服务器不够,可以配置多台来分担负载。 确定要监控的信息。如果将每个信息画成一个图,那么看一遍,估计也头晕眼花了,更别说分析了,确定监控信息的数量主要是考虑到制作成模板,然后将这些数据源整合在一张图表中。 确定snmpd.conf的内容。snmp的配置内容要经过反复测试后,再去修改所有服务器,最好几个系统管理员加上老总开个会,呵呵,这可不是开玩笑,如果有上百台服务器,全部改一遍是很麻烦的,别忘了还有snmp中运行脚本的内容。 如果由一个系统管理员监控所有服务器,肯定是不切合实际的,毕竟一个人的能力有限。通过Cacti的安全配置可以将这些监控工作分配给每一个普通用户,至于如何设置,就由您自己在Cacti配置界面上找找吧。 最后一点就是实施了,因为每个人的习惯不同,所以最好由一个人去修改,虽然累了些,但在后期的维护中将会避免很多麻烦 附录: SNMP的相关命令使用方法: snmpdelta 一直监视SNMP变量中的变化 linux:~ # snmpdelta -c public -v 1 -Cs -CT localhost IF-MIB:ifInUcastPkts.3 IF-MIB:ifOutcastPkts.3 localhost ifInUcastPkts.3 ifOutUcastPkts.3 [20:15:59 6/14] 184.00 184.00 [20:16:00 6/14] 158.00 158.00 [20:16:01 6/14] 184.00 184.00 [20:16:02 6/14] 184.00 184.00 [20:16:03 6/14] 158.00 158.00 [20:16:04 6/14] 184.00 184.00 [20:16:05 6/14] 184.00 184.00 [20:16:06 6/14] 158.00 158.00 snmpdf 通过SNMP监视远程主机的磁盘空间 linux:~ # snmpdf -v 1 -c public localhost Description size (kB) Used Available Used% 0 0 0 0% Real Memory 0 0 0 0% Swap Space 0 0 0 0% / 5734988 2462884 3272104 42% /dev/shm 138472 8 138464 0% /media/cdrecorder 0 0 0 0% /media/floppy 0 0 0 0% /proc/bus/usb 0 0 0 0% linux:~ # snmpget 从一个代理得到一个SNMP变量的值 linux:~ # snmpget -v 1 -c public localhost 1.3.6.1.4.1.2021.2.1.5.1 UCD-SNMP-MIB::prCount.1 = INTEGER: 6 linux:~ # snmpgetnext 从序列中获得下一个变量 linux:~ # snmpgetnext -v 1 -c public localhost 1.3.6.1.4.1.2021.2.1.5.1 UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: 0 linux:~ # snmpset 设置代理上的一个SNMP变量 linux:~ # snmpset -c private -v 1 test-hub system.sysContact.0 s dpz@noc.rutgers.edu ip.ipforwarding.0 = 2 snmptable 得到一个SNMP变量表 linux:~ # snmptable -c public -v 1 localhost 1.3.6.1.2.1.1.1 Was that a table SNMPv2-MIB::system linux:~ # snmptranslate 搜索并说明MIB结构中的OID linux:~ # snmptranslate -On -IR sysDescr .1.3.6.1.2.1.1.1 linux:~ # snmptrap 生成一次trap告警 linux:~ # snmptrap -v 1 -c public manager enterprises.spider test-hub 3 0 '' interfaces.iftable.ifentry.ifindex.1 i 1 snmpwalk 从某个特定的OID开始遍历MIB linux:~ # snmpwalk -v 1 -c public localhost 1.3.6.1.4.1.2021.2 UCD-SNMP-MIB::prIndex.1 = INTEGER: 1 UCD-SNMP-MIB::prNames.1 = STRING: httpd2-prefork UCD-SNMP-MIB::prMin.1 = INTEGER: 0 UCD-SNMP-MIB::prMax.1 = INTEGER: 0 UCD-SNMP-MIB::prCount.1 = INTEGER: 6 UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: 0 UCD-SNMP-MIB::prErrMessage.1 = STRING: UCD-SNMP-MIB::prErrFix.1 = INTEGER: 0 UCD-SNMP-MIB::prErrFixCmd.1 = STRING: linux:~ # 本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/42200/showart_328263.html

    kernel 报错l701.exel[16922]: segfault at ... | 

    C语言 如何在一个整型左边补0 | 

    python无法爬取阿里巴巴的数据,www.1688.cm ... | 

    linux-2.6.28 和linux-2.6.32.11 关于dma做 ... | 

该贴由system转至本版2014-9-9 23:09:35




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论