http://support.hyperic.com/display/DOC/JMX+Plugin+Tutorial
More modern (for 4.6.5):
http://support.hyperic.com/display/EVO/JMX+Plugin
java -Duser=weblogic -Dpass=weblogic1 -Dplugins.include=jmx -jar C:\pierre\hypericagent\agent-4.6.5-EE\bundles\agent-4.6.5\pdk\lib\hq-pdk-4.6.5.jar jmx MBeanDumper service:jmx:rmi:///jndi/rmi://myhost:8888/jmxrmi
(8888 is the remote jmx port)
java -Duser=weblogic -Dpass=weblogic1 -Dplugins.include=jmx -jar C:\pierre\hypericagent\agent-4.6.5-EE\bundles\agent-4.6.5\pdk\lib\hq-pdk-4.6.5.jar jmx MBeanDumper service:jmx:iiop://myhost:8001/jndi/weblogic.management.mbeanservers.runtime
(8001 is the listen port of the WLS)
you will get:
java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
so you will add -Djava.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
and a we have this:
java -cp C:\Oracle\Middleware\wlserver_10.3\server\lib\wlfullclient.jar -Duser=weblogic -Dpass=weblogic1 -Djava.naming.factory.initial=weblogic.jndi.WLInitialContextFactory -Dplugins.include=jmx -jar C:\pierre\hypericagent\agent-4.6.5-EE\bundles\agent-4.6.5\pdk\lib\hq-pdk-4.6.5.jar jmx MBeanDumper service:jmx:iiop://myhost:8001/jndi/weblogic.management.mbeanservers.runtime
but adding the wlfullclient.jar is not enough, because the classpath is set in the MANIFEST.MF of the hq-pdk-4.6.5.jar:
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache Maven Built-By: bob Build-Jdk: 1.6.0_29 Main-Class: org.hyperic.hq.product.util.PluginMain Class-Path: hq-common-4.6.5.jar hq-util-4.6.5.jar commons-logging-1.0. 4.jar httpclient-4.1.1.jar httpcore-4.1.jar commons-codec-1.4.jar com mons-validator-1.3.1.jar commons-beanutils-1.7.0.jar commons-digester -1.6.jar commons-collections-2.1.1.jar xml-apis-1.3.04.jar jsch-0.1.4 2.jar log4j-1.2.14.jar velocity-1.6.3.jar commons-lang-2.4.jar oro-2. 0.8.jar sigar-1.6.4.jar jdom-1.1.jar spring-beans-3.0.5.RELEASE.jar s pring-asm-3.0.5.RELEASE.jar spring-context-3.0.5.RELEASE.jar spring-a op-3.0.5.RELEASE.jar aopalliance-1.0.jar spring-expression-3.0.5.RELE ASE.jar org.springframework.roo.file.monitor-1.0.2.RELEASE.jar org.sp ringframework.roo.support-1.0.2.RELEASE.jar org.springframework.roo.f ile.monitor.polling-1.0.2.RELEASE.jar wrapper-3.5.6.jar xstream-1.3.1 .jar xpp3_min-1.1.4c.jar hibernate-3.2.6.ga.jar asm-attrs-1.5.3.jar d om4j-1.6.1.jar antlr-2.7.6.jar cglib-2.1_3.jar asm-1.5.3.jar spring-t x-3.0.5.RELEASE.jar jboss-remoting-2.2.2.SP8.jar jboss-common-logging -spi-2.0.4.GA.jar hq-lather-4.6.5.jar backport-util-concurrent-3.1.ja r getopt-1.0.13.jar geronimo-j2ee-management_1.0_spec-1.1.jar snmp4j- 1.11.jar xalan-2.7.1.jar serializer-2.7.1.jar cm-file-monitor-1.0.1.j ar cm-versioncontrol-1.0.1.jar slf4j-log4j12-1.6.1.jar slf4j-api-1.6. 1.jar jcl-over-slf4j-1.6.1.jar org.eclipse.jgit-1.0.0.201106090707-r. jar org.eclipse.jgit.junit-1.0.0.201106090707-r.jar spring-oxm-3.0.5. RELEASE.jar jpathwatch-0-94.jar jaxb-api-2.1.jar stax-api-1.0-2.jar a ctivation-1.1.jar jaxb-impl-2.1.3.jar
all those classes are in
C:\pierre\hypericagent\agent-4.6.5-EE\bundles\agent-4.6.5\pdk\lib
I copy there the wlfullclient.jar
and I run
java -cp "C:\pierre\hypericagent\agent-4.6.5-EE\bundles\agent-4.6.5\pdk\lib\*" -Duser=weblogic -Dpass=weblogic1 -Djava.naming.factory.initial=weblogic.jndi.WLInitialContextFactory -Dplugins.include=jmx org.hyperic.hq.product.util.PluginMain jmx MBeanDumper service:jmx:iiop://myhost:8001/jndi/weblogic.management.mbeanservers.runtime
and I get
java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root ex
ception is java.net.ConnectException: t3://localhost:7001: Destination unreachable; nested exception
is:
java.net.ConnectException: Connection refused: connect; No available router to destination]
at javax.management.remote.rmi.RMIConnector.connect(Unknown Source)
at javax.management.remote.JMXConnectorFactory.connect(Unknown Source)
at org.hyperic.hq.product.jmx.MxUtil.getMBeanConnector(MxUtil.java:538)
at org.hyperic.hq.product.jmx.MxUtil.connect(MxUtil.java:564)
at org.hyperic.hq.product.jmx.MxUtil.getMBeanServer(MxUtil.java:621)
at org.hyperic.hq.product.jmx.MBeanDumper.getMBeanServer(MBeanDumper.java:138)
at org.hyperic.hq.product.jmx.MBeanDumper.dump(MBeanDumper.java:164)
at org.hyperic.hq.product.jmx.MBeanDumper.dump(MBeanDumper.java:160)
at org.hyperic.hq.product.jmx.MBeanDumper.main(MBeanDumper.java:235)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hyperic.hq.product.util.PluginMain.runMain(PluginMain.java:218)
at org.hyperic.hq.product.util.PluginMain.main(PluginMain.java:317)
Were on earth is this "t3://localhost:7001" ? crap!!!
First, enable your Java process to be monitored by remote jmx (see help name="Java" at the end of the myfirstplugin.xml plugin below)
take this file myfirstplugin.xml and put it into $HQ_AGENT_HOME/pdk/plugins
(like /opt/hyperic/agent/agent-4.6.5-EE/bundles/agent-4.6.5/pdk/plugins)
and adjust the localhost:6969 bit:
<?xml version="1.0"?>
<!DOCTYPE plugin [<!ENTITY process-metrics SYSTEM "/pdk/plugins/process-metrics.xml">]>
<plugin package="org.hyperic.hq.plugin.java">
<classpath>
<include name="pdk/lib/mx4j"/>
</classpath>
<filter name="template" value="${OBJECT_NAME}:${alias}"/>
<metrics name="Class Loading Metrics">
<metric name="Loaded Class Count" indicator="false" category="THROUGHPUT"/>
<metric name="Total Loaded Class Count" indicator="false" category="THROUGHPUT"/>
<metric name="Unloaded Class Count" indicator="false" category="THROUGHPUT"/>
</metrics>
<metrics name="Compilation">
<metric name="Total Compilation Time" indicator="false" category="THROUGHPUT" collectionType="trendsup" units="ms"/>
</metrics>
<metrics name="Garbage Collector">
<metric name="Collection Count" indicator="false" category="THROUGHPUT" collectionType="trendsup"/>
<metric name="Collection Time" indicator="false" category="THROUGHPUT" collectionType="trendsup"/>
</metrics>
<metrics name="Memory">
<metric name="Object Pending Finalization Count" category="THROUGHPUT" indicator="false"/>
</metrics>
<metrics name="Threading">
<metric name="Thread Count" category="UTILIZATION" indicator="false"/>
<metric name="Daemon Thread Count" category="UTILIZATION" indicator="false"/>
</metrics>
<server name="Java" version="1.5.x">
<property name="HAS_BUILTIN_SERVICES" value="true"/>
<property name="VERSION_FILE" value="jre/lib/fontconfig.Sun.2003.bfc"/>
<property name="DEFAULT_PROGRAM" value="bin/java"/>
<property name="domain" value="Java"/>
<config>
<option name="jmx.url" description="JMX URL to MBeanServer" default="service:jmx:rmi:///jndi/rmi://localhost:6969/jmxrmi"/>
<option name="jmx.username" description="JMX username" optional="true" default=""/>
<option name="jmx.password" description="JMX password" optional="true" default="" type="secret"/>
<option name="process.query" description="PTQL for Java Process" default="State.Name.eq=java,Args.*.ct=proc.java.home"/>
</config>
<metric name="Availability" template="sigar:Type=ProcState,Arg=%process.query%:State" indicator="true"/>
&process-metrics;
<property name="OBJECT_NAME" value="java.lang:type=ClassLoading"/>
<metrics include="Class Loading Metrics"/>
<property name="OBJECT_NAME" value="java.lang:type=Compilation"/>
<metrics include="Compilation"/>
<property name="OBJECT_NAME" value="java.lang:type=Memory"/>
<plugin type="log_track" class="org.hyperic.hq.product.jmx.MxNotificationPlugin"/>
<property name="OBJECT_NAME" value="java.lang:type=Threading"/>
<metrics include="Threading"/>
<!-- derive installpath from JAVA_HOME env prop... -->
<property name="PROC_HOME_ENV" value="JAVA_HOME"/>
<!-- derive installpath from -Dproc.java.home=... -->
<property name="PROC_HOME_PROPERTY" value="proc.java.home"/>
<plugin type="autoinventory" class="org.hyperic.hq.product.jmx.MxServerDetector"/>
<plugin type="measurement" class="org.hyperic.hq.product.jmx.MxMeasurementPlugin"/>
<service name="Java GC">
<plugin type="autoinventory"/>
<property name="OBJECT_NAME" value="java.lang:type=GarbageCollector,name=*"/>
<metrics include="Garbage Collector"/>
</service>
</server>
<server name="Java" version="1.6.x" include="1.5.x">
<property name="VERSION_FILE" value="jre/lib/management-agent.jar"/>
</server>
<!--
==================== Plugin Help ===========================
-->
<help name="Java">
<![CDATA[
<p>
<h3>Configure HQ for monitoring Java</h3>
</p>
<p>
1) Add this line to the java options when executing the binary.
<br>
"-Dcom.sun.management.jmxremote \
<br>
-Dcom.sun.management.jmxremote.port=6969 \
<br>
-Dcom.sun.management.jmxremote.ssl=false \
<br>
-Dcom.sun.management.jmxremote.authenticate=false"
<br>
</p>
]]>
</help>
<help name="Java 1.5.x" include="Java"/>
<help name="Java 1.6.x" include="Java"/>
</plugin>
restart the agent:
./hq-agent.sh restart
No comments:
Post a Comment