`
avery_leo
  • 浏览: 387919 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

snmp4j获取数据实例(一,Linux SNMP OID’s for CPU,Memory a)

    博客分类:
  • JAVA
阅读更多

常用SNMP OID

 

Linux SNMP OID’s for CPU,Memory and Disk Statistics

 

SNMP stands for Simple Network Management Protocol and consists of three key components: managed devices, agents, and network-management systems (NMSs). A managed device is a node that has an SNMP agent and resides on a managed network. These devices can be routers and access server, switches and bridges, hubs, computer hosts, or printers. An agent is a software module residing within a device. This agent translates information into a compatible format with SNMP. An NMS runs monitoring applications. They provide the bulk of processing and memory resources required for network management.

SNMP MIBs, OIDs Overview

MIB stands for Management Information Base and is a collection of information organized hierarchically. These are accessed using a protocol such as SNMP. There are two types of MIBs: scalar and tabular. Scalar objects define a single object instance whereas tabular objects define multiple related object instances grouped in MIB tables.

MIB files for specific devices or systems can be downloaded from here

OIDs or Object Identifiers uniquely identify manged objects in a MIB hierarchy. This can be depicted as a tree, the levels of which are assigned by different organizations. Top level MIB object IDs (OIDs) belong to different standard organizations. Vendors define private branches including managed objects for their own products.

Here is a sample structure of an OID

Iso (1).org(3).dod(6).internet(1).private(4).transition(868).products(2).chassis(4).card(1).slotCps(2)­
.­cpsSlotSummary(1).cpsModuleTable(1).cpsModuleEntry(1).cpsModuleModel(3).3562.3

Most of the people may be looking for OID’s for Linux OID’s for CPU,Memory and Disk Statistics for this first you need to install SNMP server and clients. If you want to install SNMP server and client installation in linux学习 check here

CPU Statistics

Load
1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1
5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2
15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3

CPU
percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0
percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0
percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0
raw idle cpu time: .1.3.6.1.4.1.2021.11.53.0
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0

Memory Statistics

Total Swap Size: .1.3.6.1.4.1.2021.4.3.0
Available Swap Space: .1.3.6.1.4.1.2021.4.4.0
Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0
Total RAM used: .1.3.6.1.4.1.2021.4.6.0
Total RAM Free: .1.3.6.1.4.1.2021.4.11.0
Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0
Total RAM Buffered: .1.3.6.1.4.1.2021.4.14.0
Total Cached Memory: .1.3.6.1.4.1.2021.4.15.0

Disk Statistics

The snmpd.conf needs to be edited. Add the following (assuming a machine with a single ‘/’ partition):

disk / 100000 (or)

includeAllDisks 10% for all partitions and disks

The OIDs are as follows

Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1
Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1
Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1
Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1
Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1
Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1
Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1

System Uptime: .1.3.6.1.2.1.1.3.0

Examples

These Commands you need to run on the SNMP server

Get available disk space for / on the target host

#snmpget -v 1 -c “community” target_name_or_ip .1.3.6.1.4.1.2021.9.1.7.1

this will return available disk space for the first entry in the ‘disk’ section of snmpd.conf; replace 1 with n for the nth entry

Get the 1-minute system load on the target host

#snmpget -v 1 -c “community” target_name_or_ip .1.3.6.1.4.1.2021.10.1.3.1

Get the 5-minute system load on the target host

#snmpget -v 1 -c “community” target_name_or_ip .1.3.6.1.4.1.2021.10.1.3.2

Get the 15-minute system load on the target host

#snmpget -v 1 -c “community” target_name_or_ip .1.3.6.1.4.1.2021.10.1.3.3

Get amount of available swap space on the target host

#snmpget -v 1 -c “community” target_name_or_ip .1.3.6.1.4.1.2021.4.4.0

 

import java.io.IOException;
import java.net.InetAddress;
import java.util.Vector;
import org.snmp4j.AbstractTarget;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;

public class SNMP_oper
...{
    
    public static void main(String[] args)
    ...{
        try
        ...{
            Address targetAddress = GenericAddress.parse("udp:127.0.0.1/161");
            TransportMapping transport = new DefaultUdpTransportMapping();
            Snmp snmp = new Snmp(transport);
            transport.listen();//监听
            
            
            CommunityTarget target = new CommunityTarget();
            target.setCommunity(new OctetString("public"));//设置共同体名
            target.setAddress(targetAddress);//设置目标Agent地址
            target.setRetries(2);//重试次数
            target.setTimeout(5000);//超时设置
            target.setVersion(1);//版本
            
            PDU request = new PDU();
            request.setType(PDU.GET);//操作类型GET
            request.add(new VariableBinding(new OID(".1.3.6.1.2.1.1.1.0")));//OID_sysDescr
            request.add(new VariableBinding(new OID(".1.3.6.1.2.1.1.2.0")));//OID_sysObjectID
            request.add(new VariableBinding(new OID(".1.3.6.1.2.1.1.3.0")));//OID_sysUpTime

            System.out.println("Request UDP:" + request);
            
            ResponseEvent respEvt = snmp.send(request, target);
            
            //读取得到的绑定变量
            if (respEvt != null && respEvt.getResponse()!=null)
            ...{
                Vector <VariableBinding> revBindings = respEvt.getResponse().getVariableBindings();
                for (int i=0; i<revBindings.size();i++)
                ...{
                    VariableBinding vbs = revBindings.elementAt(i);
                    System.out.println(vbs.getOid()+":"+vbs.getVariable());
                }
            }

        }
        catch (IOException e)
        ...{
            e.printStackTrace();
        }
    }
}

 

更详细是资料 http://blog.chinaunix.net/u/10921/showart_202809.html

分享到:
评论
6 楼 zhang0135 2009-07-22  
您好,我在学习snmp,想请教您一下:
使用您的这段代码试了一下,能读取到本机的一些信息,然后我把IP改成远程主机的就读取不到信息了,但是我用MG-SOFT MIB Browser能读取到那台的信息,比如已运行时间什么的,这是为什么?
是不是OID的格式有问题,最前面的那个点代表什么?
谢谢
5 楼 avery_leo 2009-05-11  
银翼魔术师 写道

你好又有个问题要问你,table型的数据要怎么全部读出来。例如网络流入数据包这个信息,它的oid是1.3.6.1.2.1.2.2.1.10.0,这个oid对应着是一个表格。如果按照上面讲的方法去做,那么只能读出table的第一个数据。如果想全部读出来要怎么做呢?网上搜来一段程序,如下......OID[] columns = new OID[1];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; columns[0] =&nbsp; new VariableBinding(new OID ("1.3.6.1.2.1.2.2.1.10.0")).getOid();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list = tu.getTable(target, columns, null, null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(list.size());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;list.size();i++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; System.out.println("aaaaaa");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; System.out.println(list);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TableEvent te = (TableEvent)list.get(i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("bbbb");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VariableBinding [] vbs = te.getColumns();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(vbs[0]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j=0;j&lt;vbs.length;j++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(vbs[j]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }..............但是运行会出错误,不知道该怎么办,能指导下吗,谢谢


上面的例子,返回的是个ResponseEvent,如果返回的是个Table,我觉得应该用TableEvent,这个我没有用到过,你可以试试看。

The TableEvent class reports events in a table retrieval operation.
4 楼 银翼魔术师 2009-05-10  
你好又有个问题要问你,table型的数据要怎么全部读出来。例如网络流入数据包这个信息,它的oid是1.3.6.1.2.1.2.2.1.10.0,这个oid对应着是一个表格。如果按照上面讲的方法去做,那么只能读出table的第一个数据。如果想全部读出来要怎么做呢?

网上搜来一段程序,如下

......

OID[] columns = new OID[1];
            
             columns[0] =  new VariableBinding(new OID ("1.3.6.1.2.1.2.2.1.10.0")).getOid();
             List list = tu.getTable(target, columns, null, null);
             System.out.println(list.size());
             for(int i=0;i<list.size();i++){
              System.out.println("aaaaaa");
              System.out.println(list);
                 TableEvent te = (TableEvent)list.get(i);
                 System.out.println("bbbb");
                 VariableBinding [] vbs = te.getColumns();
                
                 System.out.println(vbs[0]);
                 for(int j=0;j<vbs.length;j++){
                     System.out.println(vbs[j]);
                 }
             }
..............

但是运行会出错误,不知道该怎么办,能指导下吗,谢谢
3 楼 银翼魔术师 2009-04-27  
avery_leo 写道


不同硬件设备的OID是不一样的,与设备的制造商有关,通过一些开源的监控设备可以检测到这些OID的值,或者咨询设备生产商。

如果开发通用的监控程序,必须知道你所检测设备中各项功能的OID值,如果只是自己公司内部用的,可以自己实现这些功能,比如监测CPU等信息。

谢谢!明白了
2 楼 avery_leo 2009-04-27  
银翼魔术师 写道

你好,我最近也在做一个snmp4j的开发项目,类似于网络监测系统。要显示服务器的cpu和内存以及磁盘的使用情况。看了你的关于snmp的资料,收获很多。这里有个问题想请教下:服务器的cpu、内存的oid,不同的机器是一样的吗?还是说不同的机器的cpu和内存有不同的oid?我写了一个target的程序,能够读出public的oid,例如系统的名字和运行时间等。那如果要读取cpu的相关信息的话,直接按照你给的oid去读取如:CPUpercentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0raw user cpu time: .1.3.6.1.4.1.2021.11.50.0percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0raw system cpu time: .1.3.6.1.4.1.2021.11.52.0percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0raw idle cpu time: .1.3.6.1.4.1.2021.11.53.0raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0还是要查找针对相应机器的cpu的oid。还有就是如果我想查看我的目标服务器的cpu和内存以及磁盘的oid的话,要怎么做,谢谢!


不同硬件设备的OID是不一样的,与设备的制造商有关,通过一些开源的监控设备可以检测到这些OID的值,或者咨询设备生产商。

如果开发通用的监控程序,必须知道你所检测设备中各项功能的OID值,如果只是自己公司内部用的,可以自己实现这些功能,比如监测CPU等信息。
1 楼 银翼魔术师 2009-04-25  

你好,我最近也在做一个snmp4j的开发项目,类似于网络监测系统。要显示服务器的cpu和内存以及磁盘的使用情况。看了你的关于snmp的资料,收获很多。这里有个问题想请教下:服务器的cpu、内存的oid,不同的机器是一样的吗?还是说不同的机器的cpu和内存有不同的oid?我写了一个target的程序,能够读出public的oid,例如系统的名字和运行时间等。

那如果要读取cpu的相关信息的话,直接按照你给的oid去读取
如:
CPU
percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0
percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0
percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0
raw idle cpu time: .1.3.6.1.4.1.2021.11.53.0
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0

还是要查找针对相应机器的cpu的oid。

还有就是如果我想查看我的目标服务器的cpu和内存以及磁盘的oid的话,要怎么做,谢谢!

相关推荐

    用snmp4j获取本地所有oid

    本篇文章将详细介绍如何在Windows环境下配置SNMP服务,并利用Snmp4j获取本地所有OID(对象标识符)。 首先,我们需要了解SNMP服务的安装与配置。在Windows系统中,SNMP服务通常不默认安装,因此我们需要手动进行...

    snmp4j获取数据实例.chm

    一个用SNMP4J编的读取OID值的源码 SNMP4J开发trap监听实例 snmp4j获取数据实例

    使用Java进行SNMP编程-SNMP4J-代码实例

    通过这些基础知识点的学习,网络管理员可以利用Java语言和SNMP4J库完成服务器监控的工作,比如监控服务器的CPU负载、内存使用情况、磁盘空间以及各种网络接口的状态等。这对于维护服务器的稳定运行和及时发现网络...

    snmp4j包来读取snmp协议数据

    在Java环境中,SNMP4J库为开发者提供了便利,可以用来读取和操作SNMP协议的数据。本文将深入探讨如何利用SNMP4j包来读取SNMP协议数据。 首先,理解SNMP4j的基本概念至关重要。SNMP4j是一个开源的Java库,完全实现了...

    java利用snmp4j包来读取snmp协议数据

    SNMP4j库为Java开发者提供了一个完整的SNMP解决方案,包括PDU(协议数据单元)的构建、编码、解码以及错误处理等功能。使用SNMP4j,你可以轻松地创建SNMPv1、SNMPv2c或SNMPv3的请求,并处理来自目标设备的响应。 ...

    通过snmp的OID获取对方主机的内存利用率及CPU的使用率

    总结来说,通过SNMP获取远程主机的内存利用率和CPU使用率涉及SNMP协议的理解、OID的选择、以及使用像SNMP4J这样的库来构建SNMP请求和解析响应。在Java程序中,这通常包括建立SNMP会话、构造PDU、发送GET请求以及解析...

    snmp4j 文档 实例

    在“snmp4j获取数据实例.doc”文档中,我们将探讨如何利用 SNMP4J 库来获取网络设备的数据。这个实例将涵盖以下几个关键知识点: 1. **SNMP 协议基础** SNMP 由三个主要组件构成:管理站(Manager)、代理(Agent...

    SNMP4J远程获取设备信息案例

    在这个"SNMP4J远程获取设备信息案例"中,我们将深入探讨如何使用SNMP4J库来从远程设备获取数据。 首先,我们需要理解SNMP的基本概念。SNMP由三个主要组件构成:管理站(Manager)、代理(Agent)和管理信息库(MIB...

    snmp_Java进行SNMP通信_SNMP协议_snmp配置_常用OID_snmp.jar_snmp4j_.jar

    基于java的Oid获取软件.rar Java进行SNMP通信的指南SnmpProgrammingGuideViaJava.doc Java实现snmp的get和walk代码示例.doc snmp4j.chm snmp.chm SnmpMain.java snmp配置说明.doc snmp协议详细讲解.doc ...

    SNMP实例大全--snmp4j(get ,trap,set,取mib)

    本文将详细介绍SNMP实例,特别是通过Java库snmp4j实现的GET、GETNEXT、SET操作以及TRAP发送和MIB获取。 1. **SNMP基本概念** SNMP由三个主要组件构成:管理站(Manager)、代理(Agent)和管理信息库(MIB)。管理...

    Java实现SNMP获得OId值

    在Java中,利用`Snmp4j`库可以方便地实现SNMP的GET操作,用于获取网络设备上特定OID的值。以下是对代码示例的详细解析: 1. **初始化环境** - 定义了版本号、协议类型、端口号等基础参数。 - 引入必要的包,包括`...

    snmp4j.rar_SNMP_SNMP4J.jar_snmp4j的jar包_网络设备监控

    SNMP4J是一个Java实现的SNMP协议库,使得Java开发者能够轻松地在应用程序中集成SNMP功能,从而对网络设备进行监控和管理。 SNMP4J.jar是这个库的核心组件,包含了SNMP协议的各种操作所需的类和方法。这个压缩包中的...

    SNMP_WALK获取SNMP协议oid的非常好用的工具

    "SNMP_WALK"是利用SNMP协议进行数据查询的一个功能,它能够遍历设备的MIB(Management Information Base)树,获取指定OID(Object Identifier,对象标识符)的所有子节点信息。 SNMP_WALK工具通常是一个命令行实用...

    基于SNMP4J的SNMP操作实现代码

    在SNMP4J中,你需要创建一个GetNextRequest PDU,同样指定一个OID。这个操作通常用于遍历MIB树,获取连续的对象信息。 5. SET操作: SET操作允许你修改MIB中的对象值。通过创建SetRequest PDU,指定要修改的OID...

    snmp4j get walk

    SNMP(简单网络管理协议)是用于网络设备管理的标准协议,而SNMP4J是一个Java实现的SNMP库,它提供了在Java应用程序中与SNMP兼容设备交互的能力。"SNMP get walk" 是一个关键的操作,它允许从网络设备中批量获取MIB...

    snmp4j.zip_java使用snmp4j_snmp4j_snmp4j java

    SNMP4J是一个Java库,专门用于实现简单网络管理协议(SNMP)的应用程序。SNMP是一种广泛应用于网络设备管理的标准协议,它允许系统管理员远程监控和管理网络设备,如路由器、交换机、服务器等。在Java环境中,SNMP4J...

    如何利用snmp4j-agent在PC端模拟snmp服务

    SNMP4J-Agent是SNMP4J项目的一部分,是一个开源的Java库,用于实现SNMP代理功能。它提供了丰富的API,可以方便地构建自定义的SNMP代理。通过模拟SNMP服务,开发者可以在没有实际网络设备的情况下测试SNMP客户端应用...

    snmp4j-1.9.3d.zip_snmp4j-1.9.3d_snmp管理工具

    标题中的"snmp4j-1.9.3d.zip_snmp4j-1.9.3d_snmp管理工具"表明这是一个版本为1.9.3d的SNMP4J库的压缩包,它包含了对SNMP协议的支持和一些管理功能。 SNMP,全称Simple Network Management Protocol,是一种应用层...

Global site tag (gtag.js) - Google Analytics