JMX自动监控Java应用 解决well-known file is not secure
前言
最近在做一个监控的Agent组件开发工作,主要就是收集各种系统Metrics信息,然后上报给监控系统,以便进行监控和告警。目标就是要做到自动化:自动发现服务,动态探测服务,监控自动运维化,插件化等等。
在Java应用监控这一块,主要就是监控Java应用的JMX信息。为了能够自动发现Java应用,自动连接JMX,做了不少尝试。本文就是分享,其中的一个问题的解决,把问题的解决思想记录下来。
什么是well-known file is not secure
当我们要连接VM的时候,如JMX,jmap,jstack时,VM会检查/tmp/hsperfdata_$USER/$PID
这样的一个文件,它会检查执行该命令的用户,是否和hsperfdata_$USER
这个文件所属的用户一致,如果不一致,就会出现well-known file is not secure
这个异常,并拒绝连接
怎样通过JMX连接Java应用并监控
JMX连接都是通过一个连接字符串,调用JMXConnectorFactory.connect()
方法建立连接。一般而言,JMX的连接字符串有两种获取方法:
- 第一种是手动指定形如
service:jmx:rmi:///jndi/rmi://host:ip/jmxrmi
的JMX Remote URL。 - 第二种则是先使用
VirtualMachine.list()
方法得到本地的所有JMX信息,然后通过Attach得到相关Pid的com.sun.management.jmxremote.localCo