JMX Monitoring

The JMX monitoring feature exposes query metrics via the JMX API.

Note

JMX monitoring is an enterprise feature.

Table of Contents

Setup

Enable the Enterprise License

You can enable the Enterprise License via the CrateDB configuration file.

Enable Collecting Stats

By default, Collecting Stats is enabled. You can disable collecting stats via the CrateDB configuration file or by running this statement:

cr> SET GLOBAL "stats.enabled" = FALSE;

Enable the JMX API

To monitor CrateDB using the JMX API, you must set the following system properties before you start CrateDB:

com.sun.management.jmxremote
com.sun.management.jmxremote.port=<JMX_PORT>
com.sun.management.jmxremote.ssl=false
com.sun.management.jmxremote.authenticate=false

Here, <JMX_PORT> sets the port number of your JMX server. JMX SSL and authentication are currently not supported.

More information about the JMX monitoring properties can be found in the JMX documentation.

You can set the Java system properties with the -D option:

sh$ ./bin/crate -Dcom.sun.management.jmxremote \
...             -Dcom.sun.management.jmxremote.port=7979 \
...             -Dcom.sun.management.jmxremote.ssl=false \
...             -Dcom.sun.management.jmxremote.authenticate=false

However, the recommended way to set system properties is via the CRATE_JAVA_OPTS environment variable, like so:

sh$ export CRATE_JAVA_OPTS="$CRATE_JAVA_OPTS \
      -Dcom.sun.management.jmxremote \
      -Dcom.sun.management.jmxremote.port=7979 \
      -Dcom.sun.management.jmxremote.ssl=false \
      -Dcom.sun.management.jmxremote.authenticate=false"
sh$ ./bin/crate

If you’re using the CrateDB Debian or RPM packages, you can set this environment variable via the /etc/default/crate configuration file.

Using Docker

To enable JMX monitoring when running CrateDB in a Docker container you have to set the following additional Java system properties:

-Djava.rmi.server.hostname=<RMI_PORT>
-Dcom.sun.management.jmxremote.rmi.port=<RMI_HOSTNAME>

Here, <RMI_HOSTNAME> is the IP address or hostname of the Docker host and <RMI_PORT> is the statically assigned port of the RMI server. For convenience, <RMI_PORT> can be set to the same port the JMX server listens on.

The <RMI_HOSTNAME> and <RMI_PORT> can be used by JMX clients (e.g. JConsole or VisualVM) to connect to the JMX server.

Here’s an example Docker command:

sh> docker run -d -e CRATE_JAVA_OPTS='\
      -Dcom.sun.management.jmxremote
      -Dcom.sun.management.jmxremote.port=7979 \
      -Dcom.sun.management.jmxremote.ssl=false \
      -Dcom.sun.management.jmxremote.authenticate=false \
      -Dcom.sun.management.jmxremote.rmi.port=<RMI_HOSTNAME> \
      -Djava.rmi.server.hostname=7979' \
      -p 7979:7979 crate \
      crate -Cnetwork.host=_site_

Here, again, <RMI_HOSTNAME> is the IP address or hostname of the Docker host.

JMX Beans

QueryStats MBean

The QueryStats JMX MBean exposes query frequency and average duration in milliseconds for SELECT, UPDATE, DELETE, and INSERT queries.

Metrics can be accessed using the JMX MBean object name io.crate.monitoring:type=QueryStats and the following attributes:

Frequency:

  • SelectQueryFrequency
  • InsertQueryFrequency
  • UpdateQueryFrequency
  • DeleteQueryFrequency
  • OverallQueryFrequency

Average duration:

  • SelectQueryAverageDuration
  • InsertQueryAverageDuration
  • UpdateQueryAverageDuration
  • DeleteQueryAverageDuration
  • OverallQueryAverageDuration

NodeStatus MBean

The NodeStatus JMX MBean exposes the status of the current node as boolean values.

Metrics can be accessed using the JMX MBean object name io.crate.monitoring:type=NodeStatus and the following attributes:

  • Ready

    Defines if the node is able to process SQL statements.

Exposing JMX via HTTP

The JMX metrics and a readiness endpoint can be exposed via HTTP by using the Crate JMX HTTP Exporter Java agent. See the README in the Crate JMX HTTP Exporter repository for more information.