有时候需要监控不同操作系统的服务器性能指标,这时可以使用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脚本,你可以有效地自动化监控远程服务器的关键性能指标,从而提高IT运维的效率和响应速度。这个过程不仅涉及到了Shell脚本编程,还涉及到对SNMP协议的理解和应用,对于提升IT...
【基于SNMP网络设备MIB信息采集设计与实现】 SNMP(简单网络管理协议)是TCP/IP网络中广泛使用的管理协议,它允许网络管理员远程监控和管理网络设备。MIB(Management Information Base)是SNMP中的核心概念,包含...
SNMP(Simple Network Management Protocol)是一种网络管理协议,用于在网络设备上收集和设置信息,如路由器、交换机、服务器等。它允许管理员远程监控网络性能,排查故障,并进行配置管理。SNMP工作在应用层,是...
本篇文章将深入探讨如何利用Java编程语言通过SNMP协议来获取交换机设备上的详细信息,包括PC机的MAC地址、IP地址以及连接的端口号。 首先,SNMP是一种应用层协议,它允许网络管理员远程收集和配置网络设备的数据。...
SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备监控的协议,它允许网络管理员远程收集和配置网络设备的状态信息。在本场景中,我们的目标是利用SNMP来获取远程主机的内存...
本项目利用SNMP协议来采集Windows和Linux服务器的CPU、内存以及磁盘信息,通过Java开发,采用SpringBoot框架构建一个完整的示例。 1. SNMP基础: SNMP由三部分组成:管理信息库(MIB)、管理站(Manager)和代理...
SNMP是一种广泛使用的网络管理协议,允许网络管理员远程监控和管理网络设备,如路由器、交换机和服务器。SNMP通过查询设备的MIB来获取设备状态、性能数据和配置信息。MIB是设备管理信息的结构化存储,包含了设备的...
SNMP允许网络管理员从远程位置监控和控制网络设备,如路由器、交换机、服务器和打印机。本文将详细探讨如何通过SNMP协议读取远程计算机的实时性能参数,特别是CPU利用率和内存使用情况。 #### SNMP基础知识 SNMP的...
通过这些基础知识点的学习,网络管理员可以利用Java语言和SNMP4J库完成服务器监控的工作,比如监控服务器的CPU负载、内存使用情况、磁盘空间以及各种网络接口的状态等。这对于维护服务器的稳定运行和及时发现网络...
它允许网络管理员远程收集和配置网络设备的信息,如路由器、交换机、服务器等。"SNMP_WALK"是利用SNMP协议进行数据查询的一个功能,它能够遍历设备的MIB(Management Information Base)树,获取指定OID(Object ...
本文探讨了一种基于SNMP的Web方式服务系统管理模型,该模型利用代理通过外部脚本程序收集系统服务管理信息,并通过对应用服务系统进行实时监控和统一管理,实现了以Web方式进行远程管理的目标,从而增强了管理工作的...
SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备管理的标准协议,它允许网络管理员远程监控和管理网络设备,如交换机、路由器、服务器等。SNMP工具通常用于配置、监控和诊断...
SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备管理的标准协议,它允许网络管理员远程监控和管理网络设备,如路由器、交换机、服务器等。SNMP测试工具,如Paessler SNMP ...
SNMP是一种广泛使用的网络管理协议,它允许网络管理员远程监控和控制网络设备,如路由器、交换机、服务器等。SNMP协议定义了通信的结构和规则,使得网络设备可以报告它们的状态信息。MIB则是SNMP中的一个重要概念,...
SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备管理的标准协议,它允许网络管理员远程监控和管理网络设备,如路由器、交换机、服务器等。SNMP测试连通性工具,如...
**Java SNMP 网络设备MIB信息采集详解** SNMP(简单网络管理协议)是一种广泛用于网络设备管理的标准协议,它允许系统管理员监控和管理网络中的设备,如路由器、交换机、服务器等。在Java中,我们可以使用SNMP库来...
它允许网络管理员远程收集和设置网络设备的状态信息,如路由器、交换机、服务器和其他支持SNMP的设备。这份“snmp采集培训资料_内部资料”显然是一份深入讲解SNMP采集技术的内部培训文档,旨在帮助读者理解和掌握...
管理站通过发送SNMP请求到网络上的代理,代理则从其本地MIB中检索信息或执行操作,并将结果返回给管理站。 MIB是一个层次化的数据库,包含了网络设备的配置信息、统计信息和状态信息。这些信息被组织成对象标识符...
SNMP是一种广泛应用于网络管理的标准协议,它允许管理员远程监控和管理网络设备,如路由器、交换机、服务器等。SNMP工作在应用层,基于UDP传输协议,提供了简单但有效的数据查询和设置机制。MIB则是SNMP中的一个重要...
- **邮件方式:**安全设备将符合特定条件的日志信息通过电子邮件发送给管理员,这种方式适用于少量日志信息的采集。 - **FTP方式:**需要开发特定的程序定期从设备下载完整的日志文件。这种方式适用于需要完整日志...