使用Cacti 监控JVM

以下操作在CentOS 6.4 X64, net-snmp-5.5-44, JDK 1.6.43, Tomcat 7.0.39 环境下验证通过.

1.为JRE创建SNMP ACL规则, $JAVA_HOME 为JDK安装路径,在managment 目录下有 现成template的模板文件,也可以直接修改。

vim $JAVA_HOME/jre/lib/management/snmp.acl

内容如下

#The communities public and private are allowed access from the local host.
acl = {
        {
           communities = public, private
           access = read-only
           managers = localhost
        }
}

# Traps are sent to localhost only
trap = {
         {
            trap-community = public
            hosts = localhost
         }
}

2.重命名password 文件,JRE启动时会检测此文件,因前面的规则指定了Trap为本机,所以不需要单独做安全配置. mv jmxremote.password.template jmxremote.password

3.修改文件权限,避免运行时无法读取配置

chmod 400 snmp.acl 
chmod 400 jmxremote.password

(如果tomcat使用jsvc守护进程,或其它JVM应用,以非root用户运行,这里的 snmp.acl 需要给予该用户访问权限)

4.修改tomcat 启动参数 vim $TOMCAT_HOME/bin/catalina.sh

在脚本文件开头部分注释结束后添加一行参数,用来启动JRE的SNMP,并使用端口162 默认读取 $JAVA_HOME/jre/lib/management/ 下的配置,无需额外添加其它配置.

JAVA_OPTS=”-Dcom.sun.management.snmp.port=162″

5.为SNMP添加代理

vim /etc/snmpd/snmpd.conf 在文件尾部添加 proxy -v 2c -c public localhost:162 .1.3.6.1.4.1.42

并重启snmp服务

6.测试和验证 启动Tomcat 并验证 162端口是否正常开启,如果不正常,需检查日志,一般都是 snmp.acl 文件权限错误导致。

验证JVM SNMP信息是否正常输出,这里的SNMP版本,用户名密码都同Cacti

snmpwalk -v 3 -u SNMP用户名 -a MD5 -A “SNMP密码” -l authNoPriv 127.0.0.1 .1.3.6.1.4.1.42

7.导入JVM监控模板。
官方下载 http://forums.cacti.net/post-112268.html
本地下载:jvm_templates

8.修改数据模板端口号 因导入的模板单独定义了端口号,需要修改为Cacti正常使用的SNMP端口号,默认为161 (非JRE的SNMP端口号) 否则无法采集到数据

在Cacti > Templates > Data Templates 中找到jvm开头的数据模板,进去后在 Custom Data 中将指定的SNMP Port 去掉保存即可

9.为监控的服务器设备添加关联的JVM图形模板,或直接选择 JVM HOST 即可,下面是示例。

jvm_mon