Jmx4perl Configuration Files

When you have already used jmx4perl you probably have remarked that the
argument list can be quite lengthy, often due to the verbose JMX
URLs. This gets even worse with jmx4perl’s forthcoming proxy
mode. Luckily, since version 0.36 it knows about configuration files which are the topic of this post.

Configuration files can be used for the command line tool jmx4perl
and from within the module JMX::Jmx4Perl (it is not yet supported
for the Nagios Plugin check_jmx4perl. Please leave me a comment if
you think this would be a sensible addition). Within a configuration file various parameters can be specified,
mostly URLs (target, proxy) and credentials for connecting to those
URLs. The syntax is in Apache HTTP-server style (as described in
Config::General) and can contain multiple <Server>
sections. Each of such section has a unique symbolic name with which
it can be referenced. This name serves as a shortcut when used in
combination with jmx4perl or JMX::Jmx4Perl. The sample below
demonstrates such a server section:

<Server>
  Name  bhut_jboss_proxy
  Url   http://jmxproxy:8888/j4p
  <Target>
     Url       service:jmx:rmi:///jndi://bhut:9999/jmxrmi
     User      admin
     Password  jboss
  </Target>
  <Proxy>
     Url      http://httpproxy:8001
     User     roland
     Password bla
  </Proxy>
</Server>

Here, an application server running on host bhut is configured. It’s
given the name bhut_jboss_proxy and run jmx4perl in the proxy mode,
where the JMX-Proxy is running on the host jmxproxy. Additionally, a
HTTP proxy is used on host httpproxy along with the given
credentials. Note that this is already the new, consistent syntax for
specifying the proxy since 0.50_2. For older versions use the
following syntax for specifying the HTTP-Proxy

<Server>
  ....
  Proxy          http://httpproxy:8001
  Proxy_User     roland
  Proxy_Password bla
  ...
</Server>

Configuration for jmx4perl

For jmx4perl you can provide this config file via the --config
command line option. Alternatively, the configuration file ~/.j4p
will be used if existing. For each server configured, the symbolic
name can be used as replacement for the full URL.

So, instead of

jmx4perl \
   --target service:jmx:rmi:///jndi://bhut:9999/jmxrmi \
   --target-user admin \
   --target-password jboss \
   --proxy http://httpproxy:8801 \
   --proxy-user roland \
   --proxy-password bla \
   http://jmxproxy:8888/j4p \
   read MEMORY_HEAP_USED

the following shortcut can be used (assuming the configuration
as in the sample)

jmx4perl bhut_jboss_proxy read MEMORY_HEAP_USED

Programmatic configuration

Configuration files can be used on a perl module level as
well. Configuration is encapsulated in the module
JMX::Jmx4Perl::Config. Either an instance of this class or a
plain path to a configuration file can be given to the constructor of
JMX::Jmx4Perl

my $config =
 new JMX::Jmx4Perl::Config();   # uses ~/.j4p by default
my $jmx4perl_jboss =
 new JMX::Jmx4Perl(server => "bhut_jboss_proxy",
                   config => $config);

my $jmx4perl_wls =
 new JMX::Jmx4Perl(server => "habanero_wls",
                   config_file => $ENV{HOME} . "/.j4p");
Author: Roland Huß
Categories: jmx4perl
Monitoring-Workshop 2017 12./13.9. Düsseldorf