通过SNMP监控同一主机上的多个java进程
我想通过 SNMP 在运行多个 java 进程的 Linux 机器上监视 JVM, 当然,每个 java 进程都是独立的,并且具有不同的 SNMP 计数器(活动线程数、可用内存等),文档中的配置示例假设机器上只有一个 java 进程。 我正在寻找一个简单的解决方案,我的监控工具将询问该主机上的 SNMP 管理器,而无需知道每个 java 进程的端口(如果它会询问远程计算机的 OID - 哪个 java 进程会回答它......?他怎么能知道...?)
谢谢!!!
I want to monitor JVM's via SNMP on Linux machine that run multiple java processes,
each java process of course is independent and has different SNMP counters (num of active threads, free memory etc...),the configuration sample inside documentation assume that there is only one java process on the machine.
I am searching a simple solution that my monitoring tool will ask the SNMP manager on that host without need to know port for each java process (if it will ask OID from remote machine - which java process will answer it...? how can he know...?)
Thanks!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
下载 Java MIB 文件: Java MIB 文件 < /a> 并将其放入:/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:
<块引用>
社区公众
因为Java进程监听特定的端口,而我们想要消除外部的机器网络拓扑 - 我们需要通过配置snmpd.conf将特定的OID前缀转发到代理路由:
<块引用>
代理-m /usr/share/snmp/mibs/JVM-MANAGEMENT-MIB.txt -v 2c -c 公共本地主机:8161 .1.3.6.1.4.1.42.2.145
因为我们想在 上请求相同的 OID同一台机器,并且该机器运行守护程序的多个实例 - 我们需要将每个实例的虚构 OID 映射到 snmpd.conf 中的 Java 进程 OID:
<块引用>
代理-m /usr/share/snmp/mibs/JVM-MANAGEMENT-MIB.txt -v 2c -c 公共本地主机:8161 .1.3.6.1.4.1.42.2.99 .1.3.6.1.4.1.42.2。 145
代理-m /usr/share/snmp/mibs/JVM-MANAGEMENT-MIB.txt -v 2c -c 公共本地主机:8162 .1.3.6.1.4.1.42.2.999 .1.3.6.1.4.1.42.2。 145
因为
重新启动 snmpd 并使用以下命令进行测试:
<块引用>
snmpwalk -v 2c -c 公共本地主机.1.3.6.1.4.1.42.2.99
snmpwalk -v 2c -c 公共本地主机.1.3.6.1.4.1.42.2.999
download Java MIB file: Java MIB File and put it in: /usr/share/snmp/mibs/JVM-MANAGEMENT-MIB.txt
Because we want to ask the SNMP remotely, we need to set the network interface as well:
Because there is no default community we need to add (on top) to snmpd.conf:
Because Java process listen to specific port and we want to eliminate the machine network topology outside - we need to forward specific OID prefix to proxy routing by configure the snmpd.conf:
Because we want to ask the same OID on the same machine, and that machine run multiple instances of the daemon - we need to map fictive OID for each instance to Java process OID in snmpd.conf:
restart snmpd and test it with:
注意:此解决方案仅适用于您已知并管理远程 JVM 进程(例如启动和停止)的情况。
要在 JVM 中启用 SNMP 代理,您需要定义以下系统变量,例如在 JVM 上命令行:
现在,尝试在某个已知范围内(例如 5000 到 5100)使用不同的 snmp 端口运行所有 JVM 进程。所以,您知道删除运行的 JVM 进程可以通过 SNMP 在您指定的范围内进行管理。尝试对每个端口使用不同的 SNMP 客户端来监视它们。
我不太确定,但它应该有效。
NOTE: This solution is only applicable if remote JVM processes are known and managed by you(like start and stop).
To enable SNMP agent in JVM you need to define following system variables, for example on the JVM command line:
Now, try running all JVM processes with different snmp port within some known range(say 5000 to 5100). So, you knows that remove JVM processes running can be managed via SNMP within your specified range. Try monitoring them using different SNMP client for every port.
I am not damn sure but it should work.