系统监测的基本概念及分类:
a.系统监测的概述:
相关厂商内容
JBoss研究员张建峰确认参加QCon北京,分享如何应用JBoss AS7构建企业私有云
国内最大的Python应用——Sohu邮箱之经验分享,尽在QCon北京企业开发专题
如何对现有IT架构的整体以及细节运行情况进行科学、系统和高效地监测是目前各企业运维和管理部门一项非常重要的工作内容。随着当前企业IT环境中服务器、应用数量和类型的不断地增加,运维部门需要通过科学和高效的手段尽可能详细、实时和准确地获取整个架构中具体到每个服务器、每个系统甚至每个应用程序工作的细节,并且会对所获取到的原始数据进行分析、绘图和统计,以便为后续的性能调优、建构调整以及各类型排错建立参考依据。
常见的监测对象基本上涵盖了IT运行环境的方方面面,包括机房环境、硬件、网络等,而每一个方面所涉及的监测项目则种类繁多。例如对硬件环境的监测中,所涵盖内容就会包括服务器的工作温度、风扇转速等指标;针对系统环境的监测,将包括基本的操作系统运行环境,如CPU、内存、I/O、存储空间使用状况、网络吞吐量、进程数量和状态等情况;针对具体的应用情况,涉及监测的内容可能会更多,而且也会有很多专门针对应用的指标。
除了监测的内容需要尽量全面之外,同时我们还希望所使用的监测解决方案能够灵活和具备更多扩展功能。例如有效地支持IT架构的变化和扩展,在监测量增加的情况下能够尽可能少地占用资源,拥有强大的事件通知机制等等。
今天本文所涉及的内容,主要是针对操作系统以及软件环境的监测,而且尤其是针对Linux操作系统的运行情况监测。尽管目前有很多的商用软件以及解决方案来实现相关的功能,但是实际上我们也有很多开源的解决方案可以起到相同的作用,而且效果也非常不错。下面的内容中,我们将会对这些解决方案的实现方法进行详细描述。
b.基于Linux上系统监测的基本原理以及种类:
在Linux系统上的系统监测所采用的方式基本上有两种:
第一种,通过SNMP协议结合数据采集软件来实现:
这种方法所涉及的架构一般包括两部分,其中一部分是被监测服务器,另外一部分则是网管工作站。至于实现方法具体来说就是在Linux服务器上启动SNMP简单网络管理协议的进程snpmd来动态提供服务器在软件甚至硬件各方面的运行参数,这样服务器就成为了一个被监测的节点。然后在其他的网管工作站上的客户端软件应该具备两个功能:采集SNMP数据以及汇总统计信息。在绝大多数情况下,网管工作站上的监测软件都会基于Web页面方式提供系统运行状态图,而且涵盖了各种运行指标。同时新的状态信息能够动态更新到Web页面。
这种类型的监测所获得的数据格式标准而且全面,配置简单,所以从综合监测的角度看是一个不错的方案。
第二种,通过编写脚本调用系统状态监测的命令,并结合数据采集软件来实现:
在某些情况下SNMP协议的配置会相对比较麻烦,而且获取SNMP信息往往需要考虑选择不同的监测软件。从另外一个角度讲,其实Linux操作系统本身就提供了很多非常好用的状态获取工具,如sar(可实现多个指标的监测),iostat(专用于I/O使用率监测),vmstat(专用于cpu和内存使用情况监测)以及free命令等工具。这些工具都可以通过结合系统任务计划以及自编脚本进行周期性调用,这就给监测提供了相当的便利。因为可以将这些命令嵌入到脚本中以周期性生成系统监测软件所需要的数据,最终一样可以通过这些数据结合绘图软件绘制出直观的统计图。这种类型的监测所获得的信息更加灵活和精确,对于一些熟悉脚本编程的用户来说,使用起来更是得心应手。
另外采用这种方式的情况下,利用命令监测可以无限制扩展,用户可以通过各种管道来获得和定制自己的监测脚本。
所以综上所述,这两种监测方案各有优势。因此我们会在下文中针对两种方案各提供一些案例和操作方法由易到难分别进行说明和演示。
各种系统监测手段在企业中部署和实现方法:
a.snmp协议的配置以及在Linux下和Windows上的测试方法:
首先我们来介绍一下第一种方法,即通过SNMP协议和数据采集软件来实现的系统运行监测方案。因为在相当多的情况下绝大多数企业都倾向于选择通过SNMP来获取服务器运行的各种信息,毕竟因为SNMP协议是业界实现监测的重要标准。
因此我们花点时间来介绍一下SNMP协议的基本概念以及工作原理。
简单网络管理协议SNMP是一种广泛用于监测网络设备(计算机、路由器)甚至其他设备(例如UPS)的网络协议,也是专门设计用于在IP网络管理网络节点(包括服务器、工作站、路由器、交换机及 HUBS 等)的一种标准,属于应用层协议。SNMP使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP 接收随机消息(及事件报告),网络管理系统将获知网络出现的各种问题。
SNMP 管理的网络有三个主要组成部分:被管理的设备(Managed Device)、代理(Agent)和网络管理系统(Network Management Station即NMS)。
被管理的设备是一个网络节点,包含ANMP代理并处在管理网络之中,有时也称为网络单元,用于收集并存储网络信息,通过SNMP、NMS能得到这些信息。被管理的设备可能是路由器、访问服务器,交换机和网桥、HUBS、主机或打印机等。
SNMP代理是被管理设备上的一个网络管理软件模块。SNMP代理拥有本地的相关管理信息,并将他们转换成与SNMP兼容的格式。
NMS运行应用程序以实现监测被管理设备。此外,NMS还为网络管理提供了大量的处理程序及必须的储存资源。任何受管理的网络至少需要一个或多个NMS。
目前,SNMP有3种不同的版本:SNMPv1、SNMPv2和SNMPv3。第1版和第2版没有太大差距,但SNMPv2是增强版本,包含了其他协议操作。前两种snmp协议主要使用基于团体名称(community)的方式来实现网管工作站对代理的访问认证,与前两种相比SNMPv3则包含更多安全机制和远程配置手段,在认证方面可以使用基于某种对称和非对称加密协议来加密的用户名和密码来实现网管工作站对代理的访问认证。而且为解决不同SNMP版本间的不兼容问题,RFC3584定义了三者共存策略。
另外SNMP协议包括了四种基本的动作:
Get:
如果网络管理系统需要获得被监测的设备信息,则会执行get动作。
GetNext:
如果要获得的某个项目信息是一个项目列表中多个项目之一,网络管理系统会执行getnext获得相关所有项目信息。
Set:
网络管理系统使用set命令来改变被管理项目的某个值。
Trap:
如果被管理设备需要通知网络管理系统某些信息,需要执行trap命令。
最后需要说明的一点是在Red Hat Enterprise Linux中已经提供了SNMP相关的所有软件包,在这些软件包中提供了全部的MIB信息,信息文件存储于/usr/share/snmp/mibs。所谓MIB是关于某个设备层次化的数据库(Management Information Base)。而且对于这个设备的每个值都采用唯一的Object Identifier即OID表示,OID格式包括可用名称,前缀或者数字。
如果在系统中安装了net-snmp-utils包,则snmp中的MIB和OID信息可以通过snmptranslate命令来显示出整个MIB树以及其上OID的信息(如图所示)
snmptranslate主要用于转换以文字名称或者数字ID显示的OID信息以及列出snmp的MIB结构树。
刚才我们已经用不少的篇幅介绍了SNMP简单网络管理协议的基本原理和组成。现在我们即将以红帽最新 的企业版操作系统Red Hat Enterprise Linux 5 Update 8(简称RHEL 5u8)为例来演示如何配置和实现SNMP服务。
在RHEL 5u8中提供了一个叫做net-snmp的rpm包,net-snmp是在IPv4和IPv6上执行SNMP的v1,v2和v3版本协议的一组程序。
需要特意说明一下的是,由于在大多数环境下针对企业应用都会使用稳定版本的Red Hat Enterprise Linux操作系统,所以后面所有操作所使用的Linux平台也都是RHEL,但是那些对技术体验感兴趣的用户也可以使用Fedora 或者其他类型的Linux发行版来实现上述所有的操作。
在该例子中,假设服务器192.168.1.10是被监测的系统,我们将在其上分别配置和启用基于v1和v3版本的snmp服务,而另外一台主机192.168.1.100权充当管理工作站,并且用snmp命令来获得被监测系统的详细信息。
在服务器192.168.1.10上,基本信息如下图所示(如图所示)
首先配置v1版本的SNMP协议:
挂载DVD安装光盘,并从光盘中安装snmp相关的软件包:lm_sensor,net-snmp,snmp-utils。关于net-snmp包的作用刚才已介绍,而至于net-snmp-utils主要提供了使用snmp协议管理网络的一系列工具 (如图所示)。
装完所需要的软件包之后,我们可以直接修改snmp的主配置文件/etc/snmp/snmpd.conf并重启服务来直接启用SNMPv1。所做的修改如图所示:(如图所示)。
采用SNMPv1版本的重要标志之一就是使网络管备访问代理时需要使用基于Community的团体的验证方式。这里的Community使用默认的public,当然也可以根据自己的需求去修改为任意一个字符串。完成之后保存该档并运行命令重启服务:
# service snmpd start [ Enter ]
# chkconfig snmpd on [ Enter ]
为了监测是否能够正确获得整个系统中每个MIB的OID值,可以运行snmpwalk命令以获得响应的结果(Screenshot07.png),snmpwalk命令可通过snmp的GETNEXT动作自动获得MIB树上的管理信息。例如,在这种情况下执行如下信息,表示获取全部mib和oid信息:
# snmpwalk –v1 –cpublic 192.168.1.10 [ Enter ]
至此为止,被监测对象上的snmp就算配置完成了。为了说明结果,我找了一个运行于Windows的操作系统上的利用snmp协议的监测软件来看看效果。在Windows平台上能够实现该功能的软件有很多,例如Whatsup,Solawins等等。这里以Whatsup为例,我的监测主机上操作系统选用的是Windows Server 2003 Enterprise Edition。IP地址是192.168.1.100。按照图示的步骤安装Whatsup软件,方法很简单,只要秉承Windows软件的安装风格——一路回车即可搞定(如图所示)。
由于我安装的是一个30天的免费试用版本,所以需要在启动产品的时候选择“Activate Later”(如图所示)
并且在“Device Discovery Method”中选择“IP Range Scan”(如图所示)。
之后起始地址都填入被监测设备的地址192.168.1.10(如图所示)
按照在/etc/snmp/snmpd.conf档中的内容输入团体名称“public”按照下图确定扫描内容并开始扫描,扫描时间需要根据设备的数量决定(如图所示)。
在“Action Policy Selection”中选择“Do Not Apply an Action Policy”并结束扫描(如图所示)。
最后通过“Report View”标签选择“Device Reports”并最终获得所有设备的Health状况(如图所示)。
在众多的系统监测软件中Whatsup的功能相对比较强大,而且设置方便,界面友好。在很多企业的服务监测中是一个不错的选择,而且Whatsup的其他视图模式和功能也比较多。至于其他的例如Solawins等类似的软件,在配置方面的步骤基本大同小异,所以这里就不花时间详述了。
在使用v1版本的SNMP协议之后,下面我们将介绍如何配置和使用v3版本的SNMP协议来实现相同的效果: 与v1版本的SNMP协议不一样,v3版本最重要的特征是更强的安全性。实际上v1版本的SNMP在安全性方面是有一些欠缺的,因为v1版本的团体信息在网络上是以明文形式传送的。因此v3版本不再使用明文的团体信息来实现认证,而是采用对称或者非对称加密方式加密用户名和密码实现认证。所以安全方面自然要比v1版本的高很多,不过在配置方面也显然会比v1版本的更加麻烦。所幸的是系统自带的net-snmp-utils工具包为我们准备了另外一个强有力的SNMP配置工具——net-snmp-config,因此一般用户仍然可以通过他非常方便地实现v3版本的SNMP配置。下面是配置方法:
我们先切换到光盘,由于net-snmp-config工具由net-snmp-devel包提供,所以在安装一系列依赖包包括beecrypt,elfutils-devel,elfutils-devel-static后,最后还是要安装net-snmp-devel包。之后将snmpd服务停止并备份其主配置文件,然后运行命令:
# net-snmp-config --create-snmpv3-user -A 12345678 -X 12345678 -a MD5 -x DES admin [ Enter ]
关于这条命令使用的参数说明如下:
--create-snmpv3-user [-A authpass] [-X privpass] [-a MD5SHA] [-x DESAES] [username]
该命令执行之后将自动建立新的配置文件snmpd.conf,而内容也十分简单。只有用户名和权限,而关于认证方式的信息则会存储在系统/var/net-snmp/snmpd.conf文件中(如图所示)。
最后重启snmpd服务,并再次用snmpwalk指明通过v3的认证方式获取MIB上的OID信息(如图所示)。
命令是:
# snmpwalk -v3 -u admin -l auth -a MD5 -x DES -A 12345678 -X 12345678 192.168.1.10 [ Enter ]
如果要验证配置的信息是否OK,还是可以通过Windows下的Whatsup来监测信息,步骤基本上和上例一样,只不过更改一下SNMP版本并填入相应的认证信息即可。这里不再赘述。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。