该程序是一个构建了 SNMP 请求消息的单个 JDMK 类。 该消息使用以下代码指定了四个对象:
// 对主机设备的描述
list.addVarBind("sysDescr.0");
// 接口 1 上的操作性语句
list.addVarBind("ifOperStatus.1");
// 接口 1 上传入的 octets 的数量
list.addVarBind("ifInOctets.1");
// 接口 1 的速度
list.addVarBind("ifSpeed.1");
四个请求对象被打包到一个 SNMP getRequest 消息中,并按如下方式发送给接收实体:
SnmpRequest request =
session.snmpGetRequest(null, list);
现在,我们两次收到了相同的对象集;使用以下代码计算两者的时间差:
// 计算消息间隔时间
long oldTime = date1.getTime();
long newTime = new Date().getTime();
long elapsed = (newTime - oldTime) / MS_DIVIDEND;
println("Elapsed time in seconds " + elapsed);
在本部分中,将获取一个最近的时间,并使之减去前一检索中记录的时间值。 这样便可以粗略地估计出数据样品间的时间消耗。
显示返回的值时,可以看到以下主要元素:
Value : 25625, Object ID : 1.3.6.1.2.1.2.2.1.5.1 (Syntax : Gauge32)
Value : 10000000
>> Press Enter to resend the request.
Elapsed time in seconds 16
Value : 26005, Object ID : 1.3.6.1.2.1.2.2.1.5.1 (Syntax : Gauge32)
Value : 10000000 三个粗体显示的项表示 ifInOctets 对象的两个值具有 16 秒的间隔时间。 选择的接口(支持速度为 10,000,000bps)在 T1 时间接收到 25625 octets (或字节),T2 时间接收到 26005 octets。 要确定传入链接的使用率,需要用到以下公式:
Incoming Link % Utilization =
((T2 octets - T1 octets) * 8 * 100) /
(ifSpeed * Sample speed)
计算出的使用率为 (26005 - 25625) * 8 * 100/(10,000,000 * 16) = 0.0019%。
显然,该接口在传入端的负载很轻。 可以在传出端进行类似的测量(使用 ifOutOctets 对象)。 然后,把两个值相加确定是否过载。 很明显,进行任何数值计算都需要特别的小心(瞬时数据的快照变化非常快),但还是可以利用它们在接口上的负载量作细微的观察。
对负载情况细心地进行一天的观察,也许会发现为什么离职的前任网管要提醒你注意 Link 1。不管是什么情况,这都意味着你正在开始了解网络的秘密。 将这个方法应用到网络的其他区域,定会帮助从中加强认识。
运行例子 要运行程序,需要安装 JDMK。 可以从 Sun Microsystems 下载免费评估版本,该版本将在 90 天后过期。 所以不要肆意运行这些代码! 再者,如果你中过几次彩票的话,可以试着购买 JDMK。
对于其他情况,按照 examples\current\Snmp\Manager\ReadMe 文件中的介绍操作,其中的例子应该可以顺利地编译和运行。 我使用 JDMK 5.1 版本。 另外,在我的 Network Management, MIBs & MPLS: Principles, Design & Implementation -- 不需要中彩票就买得起 -- 一书中还提到了一些更详细和深入的信息!
谨记:使用模式 强烈推荐使用适配器模式来隐藏 JDMK API 的复杂信息。 严格地说,JDMK 本身不是十分复杂,但它是专用的。 出于这个原因,不要让应用程序代码调用其 API 就变得重要起来。 适配器为完成这一设计目标提供了一个有用的模型。
适配器用于向应用程序代码说明 JDMK (或其他)技术的详细信息。 你的代码将调用适配器,而不是直接使用 JDMK 接口。 所以,如果你从 JDMK 转向使用别的技术,更改代码所需的时间也会被大大地缩短。
一些设计模式的书中介绍了有关适配器模式的详细信息以及其应用程序,例如 O'Reilly 的 Head First Design Patterns。
总结 对遗留系统及其设备的支持是一项困难而艰巨的任务,特别是 IT 预算和人员水平急剧压缩的情况下。 然而,具有冒险精神的 Java 开发者不会惧怕任何挑战! 利用网络管理和 SNMP 的一些简单概念,可以快速创建强大的基于 JDMK 的软件工具。 这些工具可以用于监视网络问题的方方面面,同时你也会获得更多有趣的任务。 它们还可能帮助你解决久而未决的疑问。
希望对捕获消息、创建自己的 agent 和 menager、使用浏览器访问管理界面等 JDMK 功能的介绍能够起到抛砖引玉的作用。需要提醒的是,我们一方面看到的是网络管理在概念上的简单性,另一方面是网络运行中潜在的无限复杂性。 JDMK 为促进这两个方面提供了一片肥沃的土壤。
查看本文来源