|
NAMEJMX::Jmx4Perl::Manual - Documentation for jmx4perlDESCRIPTIONJMX (Java Management Extensions) is the standard management solution in the Java world. Since JDK 1.5 it is available in every Java Virtual Machine and especially JEE application servers use this technology intensively for exposing managable entities. In fact, the popular JEE Server JBoss 4 is based on a JMX kernel.For the Perl world, it's not that easy to access JMX MBeans. MBean is the Java term for JMX managed entities. The existing solutions are mostly based on the Java standard JSR-160 (<http://jcp.org/en/jsr/detail?id=160>), which defines how JMX can be accessed remotely. The problem of JSR-160 with respect to Perl is, that the default communication protocols rely on exchanging serialized Java objects. Hence they require to start a Java Virtual Machine in the one way or other. This has quite some implications concerning installation requirements (you need a Java virtual machine with the proper version installed) and performance (firing up a JVM is not something you get for free) The ultimate goal of jmx4perl is to bridge both worlds in the most simplest way. This is done with the agent and proxy based approaches described below. In short, the building blocks of this bridge are based on standards well known and used in both worlds: HTTP and JSON. The agent part of jmx4perl can be found at www.jolokia.org. This site also contains all relevant documentation for setting up the agent for various platforms. I.e. the following starting points are of interest, when Jolokia is used with jmx4perl
The client part of Jmx4Perl is contained in this library and consist of a set of Perl modules for programatic access as well as a handful of command line tools. jmx4perl allows for simple access to JMX MBeans and much more from the command line and is a good starting point. MBean FeaturesJMX is a complex specification, which can not be completely revealed in this short documentation. Refer to <http://java.sun.com/docs/books/tutorial/jmx/index.html> for an introduction to JMX. But in short, one can distinguish three kinds of operational modes:
AGENT BASED APPROACHAn agent based approach requires you to install a small Java Webapplication within your JEE application server. It registers itself locally to the JMX MBeanServer, and listens to HTTP requests whose results are translated into a JSON representation. This reponse can be easily picked up by a Perl module, JMX::Jmx4Perl in our case. This kind of approach differs from the classical approach as suggested by the JMX specification itself.This approach works for the following environments:
Beside this restriction concerning the runtime environment, this agent based approach has also quite some advantages: Advantages
Disadvantages
PROXY MODEAlthough the agent based is the most simplest way to access JMX, there are circumstances which prevent the deployment of a dedicated agent servlet. This kind of restrictions are mostly politically motivated. For these situations, jmx4perl provides an operational mode known as the proxy mode with which the target platform can be monitored without installing the j4p agent servlet on it. This works by using j4p.war as a JMX Proxy, which translates our JSON/HTTP protocol on the frontside to JSR-160 JMX remote requests on the backend and vice versa.A dedicated proxy serlvet server is needed for hosting "j4p.war", which supports the agent mode as well as the proxy mode. A lightweight container like Tomcat or Jetty is a perfect choice for this mode. The setup is straight forward:
Said all this, the proxy mode has some limitations:
To summarize, the proxy mode should be used only when required. The agent servlet on its own is more powerful than the proxy mode since it eliminates an additional layer, which adds to the overall complexity and performance. Also, minor additional features like merging of MBeanServers are not available in the proxy mode. INSTALLATIONThe Perl part installs as any other module via Module::Build, which you need to have installed. Usingperl Build.PL ./Build ./Build test ./Build install will install the modules. In order to download the Jolokia WAR agent into the local directory as jolokia.war, use the following command jolokia This agent "jolokia.war" needs to be deployed on the JEE Server to monitor. Please consult http://www.jolokia.org/agent.html for more information how to install the agent. To test it, you can use jmx4perl with the URL of the deployed agent: jmx4perl http://<jeeserver>:<port>/jolokia Consult jmx4perl for further details. FEATURESReading and Writing AttributesJmx4Perl knows how to read any attribute and how to write to certain attributes for whose types are string-to-object conversions are known. Currently, writing of attributes of type String, int, long and boolean is supported. As a special features, Jmx4Perl has the notion of an inner path which is a XPath like expression for pointing into the object returned by a read or write operation.Execution of JMX operationsIt is easy to execute JMX operations, even with arguments. However, they same restrictions for the argument types apply as for writing attributes: There must be an easy way to deserialize an argument from a string representation. The same types as for writing attributes are supported.Autodetection and Product SupportJmx4Perl is able to autodectect various application servers. This is done by querying a certain MBean attribute which is unique for this specific product. Many application servers has been tested to work with Jolokia and hence with Jmx4Perl. In fact, Jmx4Perl comes with an integrastion test suite, which is used for integration testing the Jolokia agents. The testing environment is a 64bit Ubuntu 9.04 installation, running in a virtual machine. However, this should not make any difference for another platform, so I'm pretty confident that the application servers from the list above will work with jmx4perl on any OS. Please open a bug at <http://rt.cpan.org/Public/Bug/Report.html?Queue=jmx4perl> if you encounter any problems.Please note, that autodetection is not for free with respect to performance. It takes some considerable time to probe various servers. So, if you have the chance to provide the application server type in advance, you should do this. Said this, please note this is only relevant if you are going to use the aliasing feature described below. AliasingJMX::Jmx4Perl::Alias provides a thin abstraction layer about over the JMX naming scheme so that you can use a single alias value to access the combination (MBean name,attribute) or (MBean name,operation). It also maps the differing naming schemes of different application server to unique names, as far as this is possible. E.g. the alias "SERVER_VERSION" maps on JBoss to the attribute "VersionNumber" of MBean "jboss.system:type=Server", whereas for Jetty it's mapped to MBean "org.mortbay:jetty=default", Attribute "version".Remember, you can always use the the native JMX naming to access your MBeans without worrying about aliasing at all. History TrackingThe agent "jolokia" can be switched into a history tracking mode, where it records the values for "read", "write" and "exec" operations. You have to call a certain, jmx4perl specific, MBean to turn it on. If switched on each request contains an additional history entry containing the list of historical values along with their timestamps. The history is stored in a list with fixed length so that the oldest value gets removed from the list in case of an overflow.Full featured Nagios plugin "check_jmx4perl"A full functional Nagios plugin called "check_jmx4perl" is provided in the scripts directory. It can be used to monitor any JMX Mbean's attribute with a numeric value. Thresholds for warning and critical values can be provided in the formats as defined by Nagios::Plugin. You can use autodetection and aliasing here as well. "check_jmx4perl" can use relative critical and warning thresholds which refer to some base value taken from another MBean's attribute. An incremental mode can be used to measure the growth rate of certain value (like number of threads). Also, it can monitor the return value of JMX operations as well. "check_jmx4perl" can use a configuration file with a sophisticated syntax including inheritance, parameterizatiosn and multi-check definitions.Please refer to check_jmx4perl for a detailed documentation (which has a 30+ pages manual on its own). WHAT'S NEXT ?There are several entry points for jmx4perl. The easiest is to start to play around with jmx4perl. This is a full featured command line tool for exploring the MBeans on your JEE Server.If you want to use the Nagios Plugin check_jmx4perl start reading its documentation. A Nagios cookbook is on the roadmap. If you want to restrict access to your JMX MBeanServer read the next chapter in this manual which describes a way to build a custom agent containing a policy file. Next, JMX::Jmx4Perl is the entry module. Use this, if you need programmatical access to JMX. Don't forget to have a look into the examples directory which contains some usage examples for JMX::Jmx4Perl Of course, you are free to access the agent servlet directly without the usage of the provided module. Even in Java ;-) A description of the request and response format can be found in the protocol description JMX::Jmx4Perl::Agent::Protocol. Another resource is the jmx4perl Blog located at <http://labs.consol.de>. It contains various post about different jmx4perl use case and best practices. Don't forget to add <http://labs.consol.de/tags/jmx4perl/feed/rss/> to your RSS Feedreader if you want to keep in touch with the latest jmx4perl evolution (there is quite something in the pipeline). ACCESS POLICYThe deployed agent servlet is quite mighty in the default distribution as you can perform any operation exposed by a MBean via JMX. Of course, you should secure the agent via standard mechanism (e.g via Basic or Digest authentication) to allow only access to certain users. But even then, you might not want your monitoring guys to access the heart of the JEE Server. Therefore, you can restrict access to certain MBeans only by using a so called policy file. You have to repack the agent if you want to use this feature, though. To do this, here's the recipe (assuming the agent is stored as jolokia.war in the current directory):
LICENSECopyright (C) 2009 Roland HussJmx4perl is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. jmx4perl is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with jmx4perl. If not, see <http://www.gnu.org/licenses/>. A commercial license is available as well. You can either apply the GPL or obtain a commercial license for closed source development. Please contact roland@cpan.org for further information. PROFESSIONAL SERVICESJust in case you need professional support for jmx4perl (or Nagios or JMX in general), you might want to have a look at <http://www.consol.com/open-source-monitoring/>. Contact roland.huss@consol.de for further information (or use the contact form at <http://www.consol.com/contact/>)AUTHORroland@cpan.org
Visit the GSP FreeBSD Man Page Interface. |