`
征途2010
  • 浏览: 243281 次
  • 性别: 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脚本,通过snmp方式获取远程服务器的CPU内存和硬盘的使用率,需要支持snmpget和snmpwalk命令,并且为了支持小数运算,需要安装bc命令。

    基于SNMP网络设备MIB信息采集 的设计

    设计了一个针对TCP/IP网络的基于SNMP网络设备的MIB信息采集系统。这个系统采用三层模型进行设计,最底层负责SNMP中基本对象编码、定义,与设备连接通信等;中间层在底层的基础上定义了MIB对象,负责OID与MIB对象间的...

    Zabbix5.0 安装部署

    zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。 Zabbix服务器...

    迅饶OPC服务器OPCServer Usermanual-En.pdf

    实现远程通过WEB,IPAD,智能手机查看数据; 功能: -绿色免安装,支持中英文; -将各种协议转为OPC服务器,目前支持的协议有BACnetIP/BACnet MSTP,Modbus RTU/TCP/ASCLL,SNMP,DLT6451997/2007等; -支持1024个点...

    迅饶OPC服务器OPCServer使用说明中文版

    实现远程通过WEB,IPAD,智能手机查看数据; 功能: -绿色免安装,支持中英文; -将各种协议转为OPC服务器,目前支持的协议有BACnetIP/BACnet MSTP,Modbus RTU/TCP/ASCLL,SNMP,DLT6451997/2007等; -支持1024个点...

    迅饶OPC服务器OPCServer通讯手册中文版

    实现远程通过WEB,IPAD,智能手机查看数据; 功能: -绿色免安装,支持中英文; -将各种协议转为OPC服务器,目前支持的协议有BACnetIP/BACnet MSTP,Modbus RTU/TCP/ASCLL,SNMP,DLT6451997/2007等; -支持1024个点...

    HomeInflux:从Hue Sensors,FritzBox,SNMP等收集数据,并将其发送到influxdb

    Afterburner插件:从MSI Afterburner远程服务器收集CPU / GPU温度和许多其他统计信息 色相传感器插件:从色相传感器中读取可用数据(温度,光线,状态) Fritz.Box插件:从Fritz Box(TR064)读取上游和下游历史...

    citrix 中文管理操作手册

    为服务器配置远程控制台连接设置 172 配置自动客户端重新连接 172 为场配置默认的自动客户端重新连接设置 173 为服务器配置“Auto Client Reconnect”(自动客户端重新连接)设置 173 按计划的时间重新启动服务器 ...

    服务器安全加固操作的指南.doc

    20 1.8.1修改远程桌面端口 20 1.8.2关闭高危的数据库端口 21 1.8.3优化服务 22 1.8.4修改SNMP服务 23 1.9启动项 24 1.10关闭自动播放功能 25 1.11关闭共享 26 1.12使用NTFS 26 1.13网络访问 27 1.14会话超时设置 28 ...

    上海迅饶协议网关使用手册

    实现远程通过WEB,IPAD,智能手机查看数据; 功能: -绿色免安装,支持中英文; -将各种协议转为OPC服务器,目前支持的协议有BACnetIP/BACnet MSTP,Modbus RTU/TCP/ASCLL,SNMP,DLT6451997/2007等; -支持1024个点...

    MySQL MTOP数据管理最新官方版

    系统由Python实现多进程数据采集和告警,PHP实现WEB展示和管理。MySQL服务器无需安装任何Agent,只需在监控WEB界面配置相关数据库信息,启动监控进程后...等信息,根据相关性能指标可以对服务器核心参数进行调整优化。

    基于 Zabbix 实现对日志的收集、监控、报警、触发脚本

    基于 Zabbix 实现对日志的收集、监控、报警、触发...zabbix server 可以通过 SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在 Linux,Solaris,HP-UX,AIX

    PCAuto 5.0

     石油版:安全容错的体系是国产软件中最适合流程行业的解决方案,具备油井的远程监控示功图专用组件,为三次采油助力;  机房版:基于SNMP代理的解决方案,在铁路、银行、电信广泛应用;  楼宇版:楼宇IBMS集成...

    McAfee 8.0 简体中文

    Orchestrator 服务器部署代理时,就是将代理安装程序推送到工 作站的管理共享资源上并运行该程序。在部署之前,请确保为每个规 则选择正确的模式(关闭、警告或阻挡)。 McAfee Installation Designer 可以...

Global site tag (gtag.js) - Google Analytics