我想在运行多个java进程的Linux机器上通过SNMP监视JVM 每个java进程当然是独立的,并且有不同的SNMP计数器(活动线程数,可用内存等...),文档中的配置示例假设机器上只有一个java进程。 我正在寻找一个简单的解决方案,我的监控工具会询问该主机上的SNMP管理器,而不需要知道每个java进程的端口(如果它会从远程机器询问OID - 哪个java进程会回答它??他怎么能知道吗?)
感谢!!!
答案 0 :(得分:4)
下载Java MIB文件: Java MIB File 并将其放入:/usr/share/snmp/mibs/JVM-MANAGEMENT-MIB.txt
因为我们想远程询问SNMP,我们还需要设置网络接口:
-Dcom.sun.management.snmp.port = 8161 -Dcom.sun.management.snmp.interface = 0.0.0.0
因为没有默认社区,我们需要在snmpd.conf中添加(在上面):
rocommunity public
因为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
因为我们想在同一台机器上询问相同的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
重新启动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客户端为每个端口监控它们。
我不是很确定,但它应该有用。