Configuring the JMX Monitoring Service
There are two ways to configure the JMX Monitoring Service:
-
Using the
set-monitoring-configuration
asadmin command -
Editing the
domain.xml
file directly.
Examples on how to use the service to monitor the HeapMemoryUsage
attribute using both methods are shown below, but it is first worth
noting the default configuration values for the service:
-
enabled:
false
, valid type:Boolean
-
amx:
false
, valid type:Boolean
, optional -
logfrequency:
15
, valid type:Long
, optional -
logfrequencyunit:
SECONDS
, valid type:TimeUnit
, optional
Monitoring attributes are added to the service as properties of the configuration and contain the following values:
-
name: the MBean attribute name
-
value: the MBean domain name
-
description: displayed in the
get-monitoring-configuration
asadmin command, optional
Using the asadmin command
Adding the monitoring attribute
To add the HeapMemoryUsage
attribute to the list of MBean attributes to
monitor using the service the following command can be used:
asadmin> set-monitoring-configuration --addproperty 'name=HeapMemoryUsage value=java.lang:type=Memory' --enabled false
Breaking this command down, two options have been used:
-
--addproperty
-
--enabled
Passing --addproperty
to set-monitoring-configuration
provides a way
to add a new MBean attribute to monitor using the service. The option
takes in a string of space-delimited key-value pairs corresponding to
the values listed earlier. The name
and value
fields are required,
but description
is not. Providing name=HeapMemoryUsage
denotes that
the name of the MBean attribute to log is HeapMemoryUsage
, while
value=java.lang:type=Memory
denotes the ObjectName
of the MBean to
look for the attribute on is java.lang:type=Memory
.
The second option passed, --enabled
, is the only required option for
the asadmin
command. The only valid values to give this option are
true
or false
. Passing false
to the option will disable the
logging service on next startup if it is currently enabled, but will
otherwise do nothing. Under this scenario the monitoring service has not
been configured yet so false
was passed to the option.
Dealing with composite MBean attributes
The MBean attribute added, HeapMemoryUsage
, is a composite attribute.
It has metrics for the commited
, init
, max
and used
attributes. The
monitoring service will by default monitor each metric and log it as
{$metric}{$attribute_name}:{$attribute_value}
.
If this is not the desired result, it is possible to monitor a single
metric for a composite MBean attribute. To monitor a single metric for
the attribute the value of name
passed to the --addproperty
option
should be modified like so:
name=HeapMemoryUsage.metric
So to log only the used heap memory the asadmin command would be:
asadmin> set-monitoring-configuration --addproperty 'name=HeapMemoryUsage.used value=java.lang:type=Memory' --enabled false
Setting logging frequency
There are two configuration attributes related to the frequency at which
log messages are written: logfrequency
and logfrequencyunit
. The
first is a numerical value used for the rate, while the second
is the unit for the rate. The default configuration is set to have
a message logged every 15 seconds.
If the value of logfrequencyunit
is the default of SECONDS
then to
have the monitoring service log messages every one minute execute the following
command:
asadmin> set-monitoring-configuration --logfrequency 60 --enabled false
Enabling the monitoring service
After configuring the monitoring service, there are two options to enable it. The service can either be enabled for next startup or the service can be dynamically enabled on a running instance of Payara (provided a non-empty configuration exists at server startup). To enable the service dynamically on the default running instance of Payara the command to run is:
asadmin> set-monitoring-configuration --dynamic true --enabled true
To enable the service for next startup the --dynamic
option would need
to be dropped from the command.
Editing the domain.xml
file
To configure the monitoring service by editing the domain.xml
file, it’s useful to know about the structure of the <monitoring-service-configuration>
tag first:
<monitoring-service-configuration enabled="true" logfrequency="60">
<property name="Attribute1" value="MBean1"></property>
<property name="Attribute2" value="MBean2"></property>
</monitoring-service-configuration>
The <monitoring-service-configuration>
tag houses the configuration
values in its attributes. Omitted values take the respective default
value. If the configuration is edited while the server is running the
service must be restarted for the configuration changes to be considered.
If the service has not yet run on the instance then the configuration
tag will not have been created. To manually create it, the tag needs to
be added to the domain.xml
in the respective config
section.
<configs>
<config name="server-config">
...
<monitoring-service-configuration>
</monitoring-service-configuration>
...
</config>
</configs>
Adding the monitoring attribute
MBean attributes to monitor are added to the configuration section as
<property>
tags. Each property tag can take values for name
, value
and description
. To add an MBean attribute to monitor a <property>
tag should be added as shown:
<monitoring-service-configuration>
<property name="HeapMemoryUsage" value="java.lang:type=Memory"></property>
</monitoring-service-configuration>
Here all of the necessary attributes have been given to the tag, name
and value
. The value given to name
should be the name of the MBean
attribute to monitor, while the value given to value
should be the
ObjectName
of the MBean to look for the MBean attribute on. Here the
MBean attribute added is HeapMemoryUsage
which resides in the MBean
with the ObjectName
of java.lang:type=Memory
.
Dealing with composite MBean attributes
The MBean attribute added, HeapMemoryUsage
, is a composite attribute.
It has metrics for commited
, init
, max
and used
. The monitoring
service will by default monitor each metric and log it as
{$metric}{$attribute_name}:{$attribute_value}
.
If this is not the desired result, it is possible to monitor a single
metric for a composite MBean attribute. To monitor a single metric for
the attribute the attribute of name
for the property should be changed
to:
name="HeapMemoryUsage.metric"
The configuration to log only the used heap memory the configuration would look like this:
<monitoring-service-configuration>
<property name="HeapMemoryUsage.used" value="java.lang:type=Memory"></property>
</monitoring-service-configuration>
Setting logging frequency
There are two configuration attributes related to the frequency at which
log messages are written: logfrequency
and logfrequencyunit
. The
first is a numerical value used for the rate, while the second
value is the unit for the rate. The default configuration is set to have
a message logged every 15 seconds.
To have the monitoring service log messages every one minute change the tag as shown:
<monitoring-service-configuration logfrequency="60">
<property name="HeapMemoryUsage" value="java.lang:type=Memory"></property>
</monitoring-service-configuration>
Enabling the monitoring service
Now that the service is configured, it can be enabled simply by adding
enabled="true"
to the configuration tag:
<monitoring-service-configuration enabled="true" logfrequency="60">
<property name="HeapMemoryUsage" value="java.lang:type=Memory"></property>
</monitoring-service-configuration>