SNMP学习一

 

SNMP是英文“Simple Network Management Protocol”的缩写,中文意思是“简单网络管理协议”。SNMP是目前最常用的环境管理协议。SNMP被设计成与协议无关,所以它可以在IP,IPX,AppleTalk,OSI以及其他用到的传输协议上被使用。SNMP是一系列协议组和规范,它们提供了一种从网络上的设备中收集网络管理信息的方法。SNMP也为设备向网络管理工作站报告问题和错误提供了一种方法。
    目前,几乎所有的网络设备生产厂家都实现了对SNMP的支持。领导潮流的SNMP是一个从网络上的设备收集管理信息的公用通信协议。设备的管理者收集这些信息并记录在管理信息库(MIB)中。这些信息报告设备的特性、数据吞吐量、通信超载和错误等。MIB有公共的格式,所以来自多个厂商的SNMP管理工具可以收集MIB信息,在管理控制台上呈现给系统管理员。
    SNMP提供了一种统一的、跨平台的设备管理办法。

 

 先做个例子吧,看了好多协议还是一头雾水:-)

 

 我的pc是winxp,首先安装Window组件的管理监视工具(具体安装包xpsp2,在我附件里,其它的自己找吧),我的ip是192.168.10.191

 

 现在做一个最简单的snmp操作,获取我的pcname。

 

 接下来准本snmp的通信工具,我用的是snmputil.exe,下载地址http://www.patching.net/abu/tools/win/snmputil.exe

 

snmputil的命令规则是:
snmputil [get|getnext|walk] agent community oid [oid ...]
[get|getnext|walk]为消息类型,我们此次进行的操作是get
agent指Snmp代理即你想进行操作的网络设备的ip或名称,即192.168.10.191
community:分区域,即密码,默认是public
oid:想要操作的MIB数据对象号,设备名称对应的MIB对象号是.1.3.6.1.2.1.1.5.0

 

打开命令行窗口,进入snmputil所在路径,键入
snmputil get 192.168.10.191 public .1.3.6.1.2.1.1.5.0
如果参数都正确,控制台就会显示出机器名。

 

自己总结一下,为了实现上面的需求,按照javafound 的指点;

先解决cpu和内存的问题
2.CPU 记录cpu使用情况/Memory 记录内存使用情况/Disk 记录硬盘使用情况
:试下JDK中的jconsole.exe这个工具,可编程的,java中使用RunningTime API,File API。

下面是在wanlh的专栏,作者:万浪辉ID:wanlh 得总结,现载录到此,对作者表示感谢

Windows环境可以用JNI通过API函数 getProcessCPUTime()来得到。
思路如下:
Linux系统中可以用top命令查看进程使用CPU和内存情况,通过Runtime类的exec()方法系统命令"top”,获取"top"的输出,从而得到CPU和内存的使用情况。对本程序稍加改动,还可以得到内存的使用情况。

Java代码 复制代码
  1.   
  2. import java.io.*;   
  3. public class CpuUsage {   
  4.  public double getCpuUsage() throws Exception {   
  5.   double cpuUsed = 0;   
  6.   Runtime rt = Runtime.getRuntime();   
  7.   Process p = rt.exec("top -b -n 1");// 调用系统的“top"命令   
  8.   BufferedReader in = null;   
  9.   try {   
  10.    in = new BufferedReader(new InputStreamReader(p.getInputStream()));   
  11.    String str = null;   
  12.    String[] strArray = null;   
  13.    while ((str = in.readLine()) != null) {   
  14.     int m = 0;   
  15.     if (str.indexOf(" R ") != -1 && str.indexOf("top") == -1) {// 只分析正在运行的进程,top进程本身除外   
  16.      strArray = str.split(" ");   
  17.      for (String tmp : strArray) {   
  18.       if (tmp.trim().length() == 0)   
  19.        continue;   
  20.       if (++m == 9) {// 第9列为CPU的使用百分比(RedHat 9)   
  21.        cpuUsed += Double.parseDouble(tmp);   
  22.       }   
  23.      }   
  24.      // System.out.println(str);   
  25.     }   
  26.    }   
  27.   } catch (Exception e) {   
  28.    e.printStackTrace();   
  29.   } finally {   
  30.    in.close();   
  31.   }   
  32.   return cpuUsed;   
  33.  }   
  34.   
  35.  public static void main(String[] args) throws Exception {   
  36.   CpuUsage cpu = new CpuUsage();   
  37.   System.out.println("cpu used:" + cpu.getCpuUsage() + "%");   
  38.  }   
  39. }  
javafound 2008-06-20
不好意思,你那个服务器监控需求的贴子被隐藏了。我只好发到这里:
你的需求是:
引用
以WEB方式监控平台运行情况
监控对象包括:
监控对象 说明
ApplicationProgram 记录应用程序运行状态
CPU 记录cpu使用情况
Database 记录数据库运行状态
Disk 记录硬盘使用情况
Memory 记录内存使用情况
Network 记录网络运行状态
Service 记录服务运行状态
TableSpace 记录表空间使用情况

leader说要用到了SNMP,这方面以前没接触过,最近开始猛啃,但还是没有好的思路,各位兄弟多多指点,先谢过了。


我认为这里是没必要用SNMP的,它是监控网络设备的,不是服务器状态的。要监控4这些东东,我的建议是你自己编程实现,即自己编写一个日志模块,给web上调用::

1.pplicationProgram 记录应用程序运行状态:
用log4J设定统一的日志记录器,生成统一规则的日志文件

2.CPU 记录cpu使用情况/Memory 记录内存使用情况/Disk 记录硬盘使用情况
: 试下JDK中的jconsole.exe这个工具,可编程的,java中使用RunningTime API,File API。

3.Database 记录数据库运行状态/TableSpace 记录表空间使用情况:
定时执行探测sql就是,查询数据字典,数据库的哈东东都出来了。

4.Network 记录网络运行状态 :
如只是监控通断情况,自己编程调用ping来测链路,调用Telnet测试端口是否打开,如果要分析数据包,另当别论

5.Service 记录服务运行状态 :
可理解为监控进程,如果是你的java服务,内置日志吧,或调用jps(jdk6中的工具),

服务器系统的监视和网络监视不是一回事,如是在liunx上,可调用的系统命令较多,winx上,有些要自己编程。
建议你写一个独立的日志模块,规范各应用程序的日志规则对其进行分析(保存到DB最方便)就可做到了,SNMP与这无关。
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值