日期:2014-05-20  浏览次数:20830 次

用SNMP4j取CPU使用率?
用SNMP4j取CPU使用率,已用内存,磁盘剩余空间、总空间,是否可行?MIB OID是什么?谢谢!

------解决方案--------------------
简单网络管理协议(SNMP-Simple Network Management Protocol)是一个与网络设备交互的简单方法。该规范是由IETF在1990年五月发布的RFC 1157中定义的。SNMP通常被认为相当难懂,并且过于复杂,其可用的API似乎在本来非常简单的东西外面封装了大量的东西。现在关于SNMP的书籍又往往只是把它更加复杂化了,而没有解释清楚。
SNMP对于任何程序设计人员来说是特别易于理解的。总体的简化能够很好地把这个系统简化。一个网络设备以守护进程的方式运行SNMP代理,该守护进程能够响应来自网络的各种请求信息。该SNMP代理提供大量的对象标识符(OID-Object Identifiers)。一个OID是一个唯一的键值对。该代理存放这些值并让它们可用。一个SNMP管理器(客户)可以向代理查询键值对中的特定信息。从程序员的角度看,这和导入大量的全局变量没有多少区别。SNMP的OID是可读或可写的。尽管向一个SNMP设备写入信息的情况非常少,但它是各种管理应用程序用来控制设备的方法(例如针对交换机的可管理GUI)。SNMP中有一个基本的认证框架,能够让管理员发送公共名来对OID读取或写入的认证。绝大多数的设备使用不安全的公共名 "public" 。 SNMP协议通过UDP端口161和162进行通信的。
注意,我还没有提到MIB!MIB的重要性被大大地夸大了。刚开始时,MIB显得非常复杂,但是它们其实非常简单。OID是数字的和全局的键值对。一个 OID看起来和一个IPv6的地址很象,并且不同的厂商有不同的前缀等信息。OID都非常长,使得人们难以记住,或者对他非常感冒。因此,人们就设计了一种将数字OID翻译为人们可读的格式。这种翻译映射被保存在一个被称为 “管理信息基础"(Management Infomation Base) 或MIB的、可传递的无格式文本文件里。使用SNMP或者向SNMP设备查询,你不需要使用MIB,但是,如果没有MIB,你就得猜测你正在查看的数据是什么。某些情况下,不使用MIB也非常简单,例如查看主机名、磁盘使用率数字,或者端口状态信息。其他情况下,就非常困难了,这个时候使用MIB就非常有帮助。对于准备编写的应用程序来说,为了让用户避免妥当安装MIB带来的麻烦,而严格使用数字OID是并不是很少见的。安装一个MIB的动作,只是将他放置到你的SNMP客户端应用软件能够搜索到并进行上述翻译映射工作的某个位置而已。
SNMP可以按照两种方式来使用:轮询和陷阱。轮询就是说你编写一个应用程序能够设置一个发送给一个SNMP代理查看某些值的SNMP GET请求。这种方法非常有用,因为如果该设备响应了请求,你就得到了你需要的信息,如果该设备没有响应请求,你就能够知道存在某些问题。轮询是网络监控的一种主动形式。另一方面,SNMP陷阱能够被用来进行被动形式的网络监控。SNMP陷阱是通过配置SNMP设备的代理,让他在某些动作发生时联系另一个 SNMP代理来实现的。
备,可以配置为在某些事件发生时发送SNMP陷阱。例如,你可以配置Cisco的IOS在某个独立事件(例如链路断开)发生时,或者在任何定义的陷阱事件发生时,发送SNMP陷阱。(IOS:snmp服务器开启了链路断开的snmp陷阱)。当陷阱事件发生时,设备中的snmp代理会发送该陷阱到一个预先配置好的通常成为陷阱主机的目标上。陷阱主机会运行有自己的SNMP代理,该代理能够接受并处理传入的陷阱。这些陷阱的处理由陷阱处理器来完成。陷阱处理器可以用任何语言编写,并且可以通过STDIN(标准输入)传入的来自发送陷阱的信息。该处理器之后可以根据陷阱进行任何想作的事情,例如发送邮件或者你想要的任何事情。
SNMP被广泛应用在NMS网络管理系统中(Network Management System)。知名的NMS包括BMC的Patrol、CA的Unicenter、Sun Mangegement控制台、IBM的Tivoli Netview、以及全球著名的HP Openview。NMS的目标是提供一个监控和管理所有开启SNMP功能的设备的单一入口。通过配置你的设备代理来接受写访问,你可以从一个应用程序中处理你的网络环境。如果你的整个环境围拢NMS解决方案架构你的环境,你就能无限制地控制、查看你的整个网络。尽管Net-SNMP提供了可用来构建你自己的NMS网管系统的所有工具,我们不会再进一步讨论关于NMS的话题。不过请记住,如果你认为你的SNMP设备厂商没有提供SNMP代理方面的详细信息,很可能是因为他们希望你购买他们的NMS网络管理系统,或者购买能够在另一个NMS平台上使用的插件。
------解决方案--------------------
up
------解决方案--------------------
下载一个mib浏览器,就能看到相关设备的oid了
------解决方案--------------------
有关oid的解释frilly已经解析的非常清楚了。
有关“snmp4j来取CPU使用率,已用内存,磁盘剩余空间、总空间,是否可行”的问题,我的回答如下,欢迎讨论:
第一,snmp4j是实现了snmp协议的java包。简单的说,对管理端编程来讲,就是它提供了通用的GET/GETNEXT/GETBULK/SET等API。所以如果问使用snmp4j能够取什么信息,其实应该问snmp协议中管理端能够取什么信息。
第二,根据snmp协议,管理端能够取什么信息,依赖于mib库,mib库是管理端和代理端的共同遵守的资源列表。mib库中规定了什么信息或者资源,代理端部分实现了,管理端就可以根据该信息该资源的oid去获取或者设置。
第三,回到楼主是否可行的问题,就是,如果你们所用到的或者自己设计的mib库中有有关cpu使用率、已用内存,磁盘剩余空间、总空间等的定义(本质上就是给它们定义了oid),而且代理端实现了这些项的获取或者设置,那么,恭喜你,在管理端,可以使用snmp4j获取这些信息。
------解决方案--------------------
理论上是可行的,但我需要的具体的oid(Solaris的oid),请各位帮忙,多谢了!
------解决方案--------------------
CPU使用率:1.3.6.1.4.1.9.2.1.58.0
已用内存 :1.3.6.1.4.1.9.9.48.1.1.1.5
空闲内存 :1.3.6.1.4.1.9.9.48.1.1.1.6
------解决方案--------------------
学习
------解决方案--------------------
1.3.6.1.4.1下的节点,都是私有节点,节点之下的实现是属于每个公司自己的规定了

楼上不要误人了,你留的节点是cisco自己的实现。

楼主,如果你要做,从你的被管理对象的snmp开发人员哪儿问吧,这问题没有通解的
------解决方案--------------------
看LZ的要求应该是要去查HOST-RESOURCE-MIB,
------解决方案--------------------
最近准备要用到snmp所以在学习中,不过顶一下楼主
------解决方案--------------------
用开源包:sigar.jar包可以做到这些:Hyperic HQ有这方面的资料