关于本系列
典型的UNIX®管理员经常使用一系列重要的实用程序,技巧和系统,以协助管理过程。 有一些关键实用程序,命令行链和脚本可用于简化不同的过程。 这些工具中的一部分随操作系统一起提供,但是大多数技巧来自多年的经验以及减轻系统管理员生活的渴望。 本系列的重点是从各种不同UNIX环境中的可用工具中获取最大收益,包括简化异构环境中管理的方法。
SNMP基础
您可以通过多种方式监视UNIX服务器。 请参阅相关主题监视可用的类型的一些例子。 监视单个服务器不是问题,但是跨多个服务器监视相同信息可能会带来问题。 如果您所管理的其中一台服务器磁盘空间不足,您希望在它开始影响用户和客户端之前先了解一下。
以这种方式监视多个服务器,尤其是如果它们使用各种不同的操作系统时,可能是一个问题。 命令行工具,输出格式,值和其他信息的差异使原本应该是简单的过程变得复杂。 所需要的是一个解决方案,该解决方案可以为工作信息提供通用接口,而与您使用的UNIX变体无关。
简单网络管理协议(SNMP)提供了一种用于管理有关不同系统的信息的方法。 代理在每个系统上运行,并使用SNMP向不同的管理系统报告信息。
SNMP通常是路由器和交换机等网络设备的内置组件,并且是可用于远程检索统计信息和状态信息(无需登录某种界面)的唯一方法。 在大多数主机上,您将需要显式运行SNMP软件以通过SNMP协议公开有关主机的信息。
可以通过使用GET请求请求信息从代理中明确检索信息,或者代理可以使用TRAP或INFORM消息向管理系统广播信息。 另外,管理系统可以在代理上设置信息和参数,但这通常仅用于更改网络配置。
可以共享的信息类型可以多种多样。 它可以是所有内容,从网络设置,统计信息和网络接口的度量数据到监视CPU负载和磁盘空间。
SNMP标准未定义代理返回的信息。 而是,可用信息由管理信息库(MIB)定义。 MIB定义了返回的信息的结构,并使用对象标识符(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'来读取值。
您读取的值也属于特定类型。 您可以读取全部定义为“标量”对象的整数,浮点数和字符串值。 在这些对象中是具有特定重要性的类型。 例如,时间间隔值被报告为“时间间隔”或百分之一秒。 这些值在显示之前需要转换为更具可读性的人类形式。 也有MIB对象返回表格数据。 这是通过返回可以组合在一起以构成SNMP表的其他OID实例来处理的。
从安全角度来看,SNMP代理可以与特定社区关联,并且可以通过使用社区作为验证其对代理访问权限的方法来管理系统访问信息。 在SNMP标准的版本1中,团体字符串是保护或限制访问的唯一方法。 使用SNMP标准的版本2,可以提高安全性,但处理起来可能很复杂。 对于第3版(自2004年以来为最新版本),该标准通过显式身份验证和访问控制系统进行了改进。
获取SNMP统计信息
从SNMP系统获取信息的方式有很多,包括使用专业的管理工具,编程接口和命令行工具。
在后者中,最有名和最容易使用的是snmpwalk命令,它是较大的SNMP工具套件的一部分,该套件允许您直接从命令行从SNMP代理获取信息。 此命令将遍历给定管理值的整个子树,并返回有关该子树中包含的系统的所有信息。
例如,清单2显示了查询本地系统以获取“系统”树中所有信息时的输出。
清单2.“行走” SNMP树
$ snmpwalk -Os -c MCSLP -v 1