Chinaunix首页 | 论坛 | 博客
  • 博客访问: 482957
  • 博文数量: 46
  • 博客积分: 2044
  • 博客等级: 上尉
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-11 15:50
文章分类

全部博文(46)

文章存档

2012年(1)

2011年(19)

2010年(26)

我的朋友

分类: LINUX

2011-04-02 18:57:48

SNMP 基础
存在许多可以监视 UNIX 服务器的方法。有关一些可用的监视类型的示例,请参见
参考资料
。监视简单的服务器并不是个问题,但是跨许多服务器监视相同信息可能带来问题。如果您负责的其中一个服务器的磁盘空间耗尽,您希望在该情况影响用户和客户端之前了解该情况。
以这种方式监视多个服务器,尤其是在那些服务器使用各种不同操作系统的情况下,可能是个问题。命令行工具、输出格式、值和其他信息之间的差异全都会使原本应该简单的过程变得复杂化。在这种情况下,所需要的是一个提供通用接口的解决方案,并且无论您在使用什么 UNIX 变体,该解决方案都应该有效。
简单网络管理协议 (SNMP) 提供了一种管理不同系统的信息的方法。代理运行在每个系统上,并使用 SNMP 向不同的管理系统报告信息。
SNMP 通常是诸如路由器和交换机等网络设备的内置组件,并且是可用于远程检索统计信息和状态信息的唯一方法。在大多数主机上,您需要显式运行 SNMP 软件,以通过 SNMP 协议公开有关该主机的信息。
可以通过使用 GET 请求来请求信息,从而显式地从代理检索信息,或者代理可以使用 TRAP 或 INFORM 消息将信息广播到管理系统。此外,管理系统可以设置代理上的信息和参数,但是这通常仅用于更改网络配置。
可共享的信息类型可能千差万别。这些信息可以是从网络接口的网络设置、统计信息和度量数据到监视 CPU 负载和磁盘空间的所有内容。
SNMP 标准没有定义代理返回什么信息;相反,可用的信息由管理信息库(Management Information Base,MIB)定义。MIB 定义了返回信息的结构,并使用对象标识符(object identifier,OID)组织为层次结构。可以通过使用 MIB 结构中的特定位置来请求数据,从而访问代理中的信息。
例如,清单 1 显示了一些较常见的 ID。
清单 1. SNMP 对象 ID

sysDescr.0 1.3.6.1.2.1.1.1.0
sysObjectId.0 1.3.6.1.2.1.1.2.0
sysUpTime.0 1.3.6.1.2.1.1.3.0
sysContact.0 1.3.6.1.2.1.1.4.0
sysName.0 1.3.6.1.2.1.1.5.0
sysLocation.0 1.3.6.1.2.1.1.6.0
sysServices.0 1.3.6.1.2.1.1.7.0
ifNumber.0 1.3.6.1.2.1.2.1.0
从此列表中可以看到,MIB 是用数字表示的,并且实际上是顺次排列的。在获得信息时,您可以使用 GET 请求来获得某个特定值,或者使用 GETNEXT 来获得上次读取的属性的下一个属性。还可以使用名称。上面显示的名称全都是系统树的一部分,因此可以使用 OID“system.sysUpTime.0”来通过 GET 请求读取值。
所读取的值还具有特定的类型。您可以读取被定义为“标量”的整型、浮点型和字符串值。这些对象中的内容是使用特定有效位来标识的类型。例如,时间间隔值以“时间单位数”(或百分之一秒数)的形式来报告。在显示这些值之前,需要将其转换为更便于阅读的形式。还存在返回表型数据的 MIB 对象。这是通过返回附加的 OID 实例来处理的,可以将这些实例分组在一起以形成 SNMP 表格。
从安全的角度看,可以将 SNMP 代理与特定社区相关联,并且管理系统使用社区作为验证其代理访问权限的方法来访问信息。在 SNMP 标准的版本 1 中,社区字符串是保护或限制访问的唯一方法。对于 SNMP 标准的版本 2,安全性得到了改进,但是处理起来可能非常复杂。对于版本 3(自从 2004 年以来的最新版本),该标准已通过显式身份验证和访问控制系统进行了改进。
获取 SNMP 统计数据
存在着许多从 SNMP 系统获得信息的方法,包括使用专业的管理工具、编程接口和命令行工具。
对于其中的最后一种方法,也许最著名和最容易的是使用 snmpwalk 命令,此命令是 SNMP 工具套件的一部分,该套工具允许您直接从命令行获得 SNMP 代理中的信息。此命令将遍历某个给定的管理值的整个子树,并返回在该子树中获得的有关系统的所有信息。
例如,清单 2 显示了在查询某个本地系统中的“system”树中的所有信息时的输出。
清单 2. “遍历” SNMP 树

$ snmpwalk -Os -c MCSLP -v 1 localhost system
sysDescr.0 = STRING: Linux tweedledum 2.6.23-gentoo-r8
#1 SMP Tue Feb 12 16:32:14 GMT 2008 x86_64
sysObjectID.0 = OID: netSnmpAgentOIDs.10
sysUpTimeInstance = Timeticks: (34145553) 3 days, 22:50:55.53
sysContact.0 = STRING: root@Unknown
sysName.0 = STRING: tweedledum
sysLocation.0 = STRING: serverroom
sysORLastChange.0 = Timeticks: (0) 0:00:00.00
sysORID.1 = OID: snmpFrameworkMIBCompliance
sysORID.2 = OID: snmpMPDCompliance
sysORID.3 = OID: usmMIBCompliance
sysORID.4 = OID: snmpMIB
sysORID.5 = OID: tcpMIB
sysORID.6 = OID: ip
sysORID.7 = OID: udpMIB
sysORID.8 = OID: vacmBasicGroup
sysORDescr.1 = STRING: The SNMP Management Architecture MIB.
sysORDescr.2 = STRING: The MIB for Message Processing and Dispatching.
sysORDescr.3 = STRING: The management information definitions for
the SNMP User-based Security Model.
sysORDescr.4 = STRING: The MIB module for SNMPv2 entities
sysORDescr.5 = STRING: The MIB module for managing TCP implementations
sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations
sysORDescr.7 = STRING: The MIB module for managing UDP implementations
sysORDescr.8 = STRING: View-based Access Control Model for SNMP.
sysORUpTime.1 = Timeticks: (0) 0:00:00.00
sysORUpTime.2 = Timeticks: (0) 0:00:00.00
sysORUpTime.3 = Timeticks: (0) 0:00:00.00
sysORUpTime.4 = Timeticks: (0) 0:00:00.00
sysORUpTime.5 = Timeticks: (0) 0:00:00.00
sysORUpTime.6 = Timeticks: (0) 0:00:00.00
sysORUpTime.7 = Timeticks: (0) 0:00:00.00
sysORUpTime.8 = Timeticks: (0) 0:00:00.00
从这里可以看到一系列有关该主机的信息,包括操作系统(在 sysDescr.0 中)、系统已正常运行的时间(sysUpTimeInstance),以及该计算机的位置。这里同时以原始值 (Timeticks) 和转换后的可读值“小时:分钟:秒”的形式显示了间隔时间。
阅读(2818) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

vickemble2011-04-03 14:16:32

GFW用这个?

riribi2011-04-03 11:47:18