`
征途2010
  • 浏览: 248563 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

远程采集服务器指标信息(三)通过snmp

阅读更多

有时候需要监控不同操作系统的服务器性能指标,这时可以使用SNMP简单网络管理协议来获取某个网络设备上一些信息,达到数据监控的目的。snmp就不介绍了,网上有说明,现在就介绍下使用开源框架snmp4j,监控设备数据的方法。这里需要说明的是,被监控服务器上必须开启snmp服务。

/**
 * SNMP远程会话
 * 
 * @author lipeng
 * @since 1.0
 * @version 2012-11-25 lipeng
 */
public class SNMPSession extends Snmp4JSession implements IRemoteSession {
    
    /** 节点信息 */
    private NodeInfoVO nodeInfoVO;
    
    /**
     * @return 获取 nodeInfoVO属性值
     */
    public NodeInfoVO getNodeInfoVO() {
        return nodeInfoVO;
    }
    
    /**
     * 构造函数
     * 
     * @param target
     * @throws IOException
     * @throws IOException
     */
    public SNMPSession(NodeInfoVO nodeInfoVO) throws IOException {
        super(new Snmp4JTarget(nodeInfoVO.getServerIp(), 161));
        this.nodeInfoVO = nodeInfoVO;
    }
    
    /**
     * @see com.comtop.numen.monitor.collection.appservice.device.remote.IRemoteSession#execCommand(java.lang.String)
     */
    @Override
    public String execCommand(String cmd) {
        return null;
    }
    
    /**
     * @see com.comtop.numen.monitor.collection.appservice.device.remote.IRemoteSession#execCommand(java.lang.String)
     */
    @Override
    public void close() {
        try {
            super.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

/**
 * FIXME 类注释信息(此标记自动生成,注释填写完成后请删除)
 * 
 * @author lipeng
 * @since 1.0
 * @version 2012-11-25 lipeng
 */
public class SNMPDeviceAdapter extends DeviceAdapter {
    
    private SNMPSession snmpSession = null;
    
    /**
     * 构造函数
     */
    public SNMPDeviceAdapter(IRemoteSession remoteSession) {
        this.snmpSession = (SNMPSession) remoteSession;
    }
    
    /**
     * 获取CPU信息
     * 
     * @see com.comtop.numen.monitor.collection.appservice.device.adapter.DeviceAdapter#getCpuInfo()
     */
    @Override
    public CPUInformationVO getCpuInfo() {
        CPUInformationVO objCPUInfo = null;
        try {
            objCPUInfo = new CPUInformationVO();
            objCPUInfo.setId(CommonUtils.getUUID());
            objCPUInfo.setIpAddress(snmpSession.getNodeInfoVO().getServerIp());
            objCPUInfo.setCollectTime(CommonUtils.getCurrentDate(new Date()));
            objCPUInfo.setNodeId(snmpSession.getNodeInfoVO().getNodeInfoId());
            List<HrProcessorEntry> lstProcessorMIB = snmpSession.getTable(HrProcessorEntry.class);
            double dCpuRate = 0;
            for (HrProcessorEntry hrStorageEntry : lstProcessorMIB) {
                dCpuRate += hrStorageEntry.getHrProcessorLoad();
            }
            objCPUInfo.setCpuUsedrate(String.valueOf(CommonUtils.getDoubleToPattern(dCpuRate / lstProcessorMIB.size(),
                2)));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return objCPUInfo;
    }
    
    /**
     * 获取磁盘信息
     * 
     * @see com.comtop.numen.monitor.collection.appservice.device.adapter.DeviceAdapter#getDiskInfo()
     */
    @Override
    public DiskInformationVO getDiskInfo() {
        DiskInformationVO objDiskInfo = null;
        try {
            objDiskInfo = new DiskInformationVO();
            objDiskInfo.setId(CommonUtils.getUUID());
            objDiskInfo.setIpAddress(snmpSession.getNodeInfoVO().getServerIp());
            objDiskInfo.setCollectTime(CommonUtils.getCurrentDate(new Date()));
            objDiskInfo.setNodeId(snmpSession.getNodeInfoVO().getNodeInfoId());
            List<HrStorageEntry> lstHrStorage = snmpSession.getTable(HrStorageEntry.class);
            List<DiskDetailVO> lstDeskDetails = new ArrayList<DiskDetailVO>(lstHrStorage.size());
            DiskDetailVO objDetail = null;
            for (HrStorageEntry hrStorageEntry : lstHrStorage) {
                if (hrStorageEntry.getHrStorageDescr().contains("/")
                    || hrStorageEntry.getHrStorageDescr().contains(":")) {
                    objDetail = new DiskDetailVO();
                    objDetail.setId(CommonUtils.getUUID());
                    objDetail.setDiskLetter(hrStorageEntry.getHrStorageDescr());
                    int iStorSize = hrStorageEntry.getHrStorageSize() * hrStorageEntry.getHrStorageAllocationUnits();
                    int iStorUsedSize =
                        hrStorageEntry.getHrStorageUsed() * hrStorageEntry.getHrStorageAllocationUnits();
                    objDetail.setDiskLetterSize(String.valueOf(iStorSize));
                    objDetail.setDiskLetterUsedSize(String.valueOf(iStorUsedSize));
                    objDetail.setDiskLetterFreeSize(String.valueOf(iStorSize - iStorUsedSize));
                    lstDeskDetails.add(objDetail);
                }
            }
            objDiskInfo.setDetail(lstDeskDetails);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return objDiskInfo;
    }
    
    /**
     * 获取内存信息
     * 
     * @see com.comtop.numen.monitor.collection.appservice.device.adapter.DeviceAdapter#getMemoryInfo()
     */
    @Override
    public MemoryInformationVO getMemoryInfo() {
        MemoryInformationVO objMemoryInfo = null;
        try {
            objMemoryInfo = new MemoryInformationVO();
            objMemoryInfo.setId(CommonUtils.getUUID());
            objMemoryInfo.setIpAddress(snmpSession.getNodeInfoVO().getServerIp());
            objMemoryInfo.setCollectTime(CommonUtils.getCurrentDate(new Date()));
            objMemoryInfo.setNodeId(snmpSession.getNodeInfoVO().getNodeInfoId());
            List<HrStorageEntry> lstHrStorage = snmpSession.getTable(HrStorageEntry.class);
            for (HrStorageEntry hrStorageEntry : lstHrStorage) {
                if (hrStorageEntry.getHrStorageDescr().contains("System RAM")
                    || hrStorageEntry.getHrStorageDescr().contains("Physical Memory")) {
                    int iStorSize = hrStorageEntry.getHrStorageSize() * hrStorageEntry.getHrStorageAllocationUnits();
                    int iStorUsedSize =
                        hrStorageEntry.getHrStorageUsed() * hrStorageEntry.getHrStorageAllocationUnits();
                    objMemoryInfo.setMemorySize(String.valueOf(iStorSize));
                    objMemoryInfo.setMemoryUsedSize(String.valueOf(iStorUsedSize));
                    objMemoryInfo.setMemoryFreeSize(String.valueOf(iStorSize - iStorUsedSize));
                    objMemoryInfo.setMemoryUsedRate(String.valueOf(CommonUtils.getDoubleToPattern(iStorUsedSize
                        / iStorSize, 2)));
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return objMemoryInfo;
    }
    
    /**
     * @see com.comtop.numen.monitor.collection.appservice.device.adapter.DeviceAdapter#getNetworkInfo()
     */
    @Override
    public RealNetworkInformationVO getNetworkInfo() {
        return null;
    }
    
    /**
     * 获取操作系统信息
     * 
     * @see com.comtop.numen.monitor.collection.appservice.device.adapter.DeviceAdapter#getOsInfo()
     */
    @Override
    public OsInformationVO getOsInfo() {
        OsInformationVO objOsInfo = null;
        System sysMIB = null;
        try {
            sysMIB = snmpSession.get(System.class);
            objOsInfo = new OsInformationVO();
            objOsInfo.setId(CommonUtils.getUUID());
            objOsInfo.setIpAddress(snmpSession.getNodeInfoVO().getServerIp());
            objOsInfo.setCollectTime(CommonUtils.getCurrentDate(new Date()));
            objOsInfo.setClassPath(null);
            objOsInfo.setNodeId(snmpSession.getNodeInfoVO().getNodeInfoId());
            objOsInfo.setOsName(sysMIB.getSysName());
            objOsInfo.setOsVersion(sysMIB.getSysDesc());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return objOsInfo;
    }
    
    /**
     * 获取进程信息
     * 
     * @see com.comtop.numen.monitor.collection.appservice.device.adapter.DeviceAdapter#getProcessInfo()
     */
    @Override
    public ProcessInformationVO getProcessInfo() {
        ProcessInformationVO objProcessInfo = null;
        try {
            objProcessInfo = new ProcessInformationVO();
            String strProcessId = CommonUtils.getUUID();
            objProcessInfo.setId(strProcessId);
            objProcessInfo.setIpAddress(snmpSession.getNodeInfoVO().getServerIp());
            objProcessInfo.setCollectTime(CommonUtils.getCurrentDate(new Date()));
            objProcessInfo.setNodeId(snmpSession.getNodeInfoVO().getNodeInfoId());
            List<HrSWRunEntry> lstHrSWRun = snmpSession.getTable(HrSWRunEntry.class);
            List<ProcessDetailVO> lstProcessDetails = new ArrayList<ProcessDetailVO>(lstHrSWRun.size());
            ProcessDetailVO objDetail = null;
            List<HrSWRunPerfEntry> lstHrSWRunPerf = snmpSession.getTable(HrSWRunPerfEntry.class);
            Map<Integer, HrSWRunPerfEntry> objMap = new HashMap<Integer, HrSWRunPerfEntry>();
            for (HrSWRunPerfEntry hrSWRunPerfEntry : lstHrSWRunPerf) {
                objMap.put(hrSWRunPerfEntry.getHrSWRunIndex(), hrSWRunPerfEntry);
            }
            for (HrSWRunEntry objRun : lstHrSWRun) {
                HrSWRunPerfEntry hrSWRunPerfEntry = objMap.get(objRun.getHrSWRunIndex());
                objDetail = new ProcessDetailVO();
                objDetail.setId(CommonUtils.getUUID());
                objDetail.setCpuPercentage("");
                objDetail.setMemPercentage(String.valueOf(hrSWRunPerfEntry.getHrSWRunPerfMem()));
                objDetail.setProcessId(strProcessId);
                objDetail.setProcessCommand(objRun.getHrSWRunName());
                objDetail.setProcessCpuTime(String.valueOf(hrSWRunPerfEntry.getHrSWRunPerfCPU()));
                objDetail.setProcessPID(String.valueOf(objRun.getHrSWRunIndex()));
                objDetail.setProcessUserName("");
                lstProcessDetails.add(objDetail);
            }
            objProcessInfo.setDetail(lstProcessDetails);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return objProcessInfo;
    }
    
}

 

分享到:
评论

相关推荐

    shell脚本,通过snmp方式获取远程服务器的CPU内存和硬盘的使用率

    总的来说,通过学习和实践这样的Shell脚本,你可以有效地自动化监控远程服务器的关键性能指标,从而提高IT运维的效率和响应速度。这个过程不仅涉及到了Shell脚本编程,还涉及到对SNMP协议的理解和应用,对于提升IT...

    JAVA基于SNMP网络设备MIB信息采集设计与实现.doc

    【基于SNMP网络设备MIB信息采集设计与实现】 SNMP(简单网络管理协议)是TCP/IP网络中广泛使用的管理协议,它允许网络管理员远程监控和管理网络设备。MIB(Management Information Base)是SNMP中的核心概念,包含...

    Snmp采集设备信息

    SNMP(Simple Network Management Protocol)是一种网络管理协议,用于在网络设备上收集和设置信息,如路由器、交换机、服务器等。它允许管理员远程监控网络性能,排查故障,并进行配置管理。SNMP工作在应用层,是...

    java通过SNMP协议获取交换机设备信息(如:交换机下的PC机MAC、IP、连接端口号等信息)

    本篇文章将深入探讨如何利用Java编程语言通过SNMP协议来获取交换机设备上的详细信息,包括PC机的MAC地址、IP地址以及连接的端口号。 首先,SNMP是一种应用层协议,它允许网络管理员远程收集和配置网络设备的数据。...

    snmp协议采集windows和linux服务器cpu/内存/磁盘信息。

    本项目利用SNMP协议来采集Windows和Linux服务器的CPU、内存以及磁盘信息,通过Java开发,采用SpringBoot框架构建一个完整的示例。 1. SNMP基础: SNMP由三部分组成:管理信息库(MIB)、管理站(Manager)和代理...

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

    SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备监控的协议,它允许网络管理员远程收集和配置网络设备的状态信息。在本场景中,我们的目标是利用SNMP来获取远程主机的内存...

    毕业论文设计-IT计算机-JAVA基于SNMP网络设备MIB信息采集(论文+源代码).zip

    SNMP是一种广泛使用的网络管理协议,允许网络管理员远程监控和管理网络设备,如路由器、交换机和服务器。SNMP通过查询设备的MIB来获取设备状态、性能数据和配置信息。MIB是设备管理信息的结构化存储,包含了设备的...

    SNMP查看CPU及内存使用率

    SNMP允许网络管理员从远程位置监控和控制网络设备,如路由器、交换机、服务器和打印机。本文将详细探讨如何通过SNMP协议读取远程计算机的实时性能参数,特别是CPU利用率和内存使用情况。 #### SNMP基础知识 SNMP的...

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

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

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

    它允许网络管理员远程收集和配置网络设备的信息,如路由器、交换机、服务器等。"SNMP_WALK"是利用SNMP协议进行数据查询的一个功能,它能够遍历设备的MIB(Management Information Base)树,获取指定OID(Object ...

    基于SNMP的远程服务管理模型研究

    本文探讨了一种基于SNMP的Web方式服务系统管理模型,该模型利用代理通过外部脚本程序收集系统服务管理信息,并通过对应用服务系统进行实时监控和统一管理,实现了以Web方式进行远程管理的目标,从而增强了管理工作的...

    SNMP测试扫描工具

    SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备管理的标准协议,它允许网络管理员远程监控和管理网络设备,如交换机、路由器、服务器等。SNMP工具通常用于配置、监控和诊断...

    SNMP测试工具,snmp tester

    SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备管理的标准协议,它允许网络管理员远程监控和管理网络设备,如路由器、交换机、服务器等。SNMP测试工具,如Paessler SNMP ...

    JAVA基于SNMP网络设备MIB信息采集.zip

    SNMP是一种广泛使用的网络管理协议,它允许网络管理员远程监控和控制网络设备,如路由器、交换机、服务器等。SNMP协议定义了通信的结构和规则,使得网络设备可以报告它们的状态信息。MIB则是SNMP中的一个重要概念,...

    JAVA基于SNMP网络设备MIB信息采集(源代码)

    **Java SNMP 网络设备MIB信息采集详解** SNMP(简单网络管理协议)是一种广泛用于网络设备管理的标准协议,它允许系统管理员监控和管理网络中的设备,如路由器、交换机、服务器等。在Java中,我们可以使用SNMP库来...

    snmp采集培训资料_内部资料

    它允许网络管理员远程收集和设置网络设备的状态信息,如路由器、交换机、服务器和其他支持SNMP的设备。这份“snmp采集培训资料_内部资料”显然是一份深入讲解SNMP采集技术的内部培训文档,旨在帮助读者理解和掌握...

    snmptester SNMP测试连通性工具

    SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备管理的标准协议,它允许网络管理员远程监控和管理网络设备,如路由器、交换机、服务器等。SNMP测试连通性工具,如...

    JAVA基于SNMP网络设备MIB信息采集(论文+源代码).zip

    管理站通过发送SNMP请求到网络上的代理,代理则从其本地MIB中检索信息或执行操作,并将结果返回给管理站。 MIB是一个层次化的数据库,包含了网络设备的配置信息、统计信息和状态信息。这些信息被组织成对象标识符...

    JAVA基于SNMP网络设备MIB信息采集(论文+源代码)

    SNMP是一种广泛应用于网络管理的标准协议,它允许管理员远程监控和管理网络设备,如路由器、交换机、服务器等。SNMP工作在应用层,基于UDP传输协议,提供了简单但有效的数据查询和设置机制。MIB则是SNMP中的一个重要...

    JAVA基于SNMP网络设备MIB信息采集(论文+源代码).rar

    标题中的“JAVA基于SNMP网络设备MIB信息采集(论文+源代码)”表明这是一个关于使用Java编程语言实现SNMP(简单网络管理协议)来采集网络设备MIB(管理信息库)信息的项目。这个项目可能包含一篇详细论述该主题的论文...

Global site tag (gtag.js) - Google Analytics