通过SNMP监控同一主机上的多个java进程

时间:2011-06-21 16:59:09

标签: java snmp

我想在运行多个java进程的Linux机器上通过SNMP监视JVM 每个java进程当然是独立的,并且有不同的SNMP计数器(活动线程数,可用内存等...),文档中的配置示例假设机器上只有一个java进程。 我正在寻找一个简单的解决方案,我的监控工具会询问该主机上的SNMP管理器,而不需要知道每个java进程的端口(如果它会从远程机器询问OID - 哪个java进程会回答它??他怎么能知道吗?)

感谢!!!

2 个答案:

答案 0 :(得分:4)

下载Java MIB文件: Java MIB File 并将其放入:/usr/share/snmp/mibs/JVM-MANAGEMENT-MIB.txt

  1. 因为我们想远程询问SNMP,我们还需要设置网络接口:

      

    -Dcom.sun.management.snmp.port = 8161   -Dcom.sun.management.snmp.interface = 0.0.0.0

  2. 因为没有默认社区,我们需要在snmpd.conf中添加(在上面):

      

    rocommunity public

  3. 因为Java进程侦听特定端口并且我们想要消除外部的机器网络拓扑 - 我们需要通过配置snmpd.conf来转发特定的OID前缀到代理路由:

      

    proxy -m /usr/share/snmp/mibs/JVM-MANAGEMENT-MIB.txt -v 2c -c public localhost:8161 .1.3.6.1.4.1.42.2.145

  4. 因为我们想在同一台机器上询问相同的OID,并且该机器运行守护程序的多个实例 - 我们需要将每个实例的虚构OID映射到snmpd.conf中的Java进程OID:

      

    proxy -m /usr/share/snmp/mibs/JVM-MANAGEMENT-MIB.txt -v 2c -c public localhost:8161 .1.3.6.1.4.1.42.2.99 .1.3.6.1.4.1.42.2。 145

         

    proxy -m /usr/share/snmp/mibs/JVM-MANAGEMENT-MIB.txt -v 2c -c public localhost:8162 .1.3.6.1.4.1.42.2.999 .1.3.6.1.4.1.42.2。 145

  5. 重新启动snmpd并使用以下命令进行测试:

      

    snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.42.2.99

         

    snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.42.2.999

答案 1 :(得分:2)

注意:此解决方案仅适用于您知道和管理远程JVM进程(如启动和停止)。

要在JVM中启用SNMP代理,您需要定义以下系统变量,例如在JVM命令行上:

-Dcom.sun.management.snmp.interface=127.0.0.1
-Dcom.sun.management.snmp.port=16666
-Dcom.sun.management.snmp.acl=true
-Dcom.sun.management.snmp.acl.file=/path/to/your/snmp.acl  

现在,尝试在一些已知范围内(例如5000到5100)运行具有不同snmp端口的所有JVM进程。因此,您知道删除运行的JVM进程可以通过指定范围内的SNMP进行管理。尝试使用不同的SNMP客户端为每个端口监控它们。

我不是很确定,但它应该有用。