位置:海鸟网 > IT > linux/Unix >

基于Linux的性能监测比拼和实现攻略

性能监测的基本概念:

  当今企业对关键服务效能和稳定性方面的要求不断提高,所以如何科学以及准确地获得服务运行方面的综合信息显得越来越重要。于是企业在部署服务的同时也都会通过各种各样的方式和手段来部署对服务以及其外围环境资源的监测。监测的对象除服务本身之外还包括服务所运行的基本环境,如CPU、内存、I/O、存储空间、网络吞吐量等使用情况。通过对这种长期监测所收集到的数据来使用不同的图形化分析软件进行整理和分析,我们不难判断出服务在当前以及长期所运行的情况,并为以后的性能调优以及系统排错建立参考的依据。

  基于Linux上性能监测的基本原理以及种类:

  在Linux系统上的性能监测所采用的方式基本上有两种:

  第一种,通过snmp + 数据采集软件来实现:

  通过在Linux服务器上启动snmp简单网络管理协议来动态采集服务器在软件甚至硬件各方面的运行参数,这样服务器就成为了一个被监测的节点。然后在其它的网管工作站上一部分的客户端软件能够采集snmp数据并动态生成可以通过Web页面访问的HTML信息,而另外一部分的客户端软件本身集成了更强大的数据采集以及绘图功能,结合到一起可以生成更加直观和具体的web页面。这种类型的监测所获得的数据格式标准而且全面,配置简单,所以从综合监测的角度看是一个不错的方案。

  第二种,通过性能监测命令编写script + 数据采集软件来实现:

  在某些情况下snmp协议的配置相对比较麻烦,但是系统本身提供了很多诸如sar,iostat以及free等不同的可以周期和规律性执行的性能监测命令,这就给监测提供了相当的便利。因为可以将这些命令嵌入到脚本中以周期性生成性能监测软件所需要的数据,最终一样可以通过这些数据绘制出直观的统计图。这种类型的监测所获得的信息更加灵活和精确,对于一些熟悉scripts编程的用户来说,使用起来相当得心应手。

  除此之外,利用命令监测可以无限制扩展,用户可以通过各种管道来获得和定制自己的监测脚本。所以综上所述,这两种监测的方案各有其优势。因此我们会在下文中针对两种方案各提供一部分案例由简单到复杂,一步步对各种方案的操作方法予以说明和讲解。

  在更多的情况下很多企业都倾向于选择通过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中的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结构树。