Package org.apache.ignite.spi.metric.jmx

## Class JmxMetricExporterSpi

- java.lang.Object
- - org.apache.ignite.spi.IgniteSpiAdapter
  - - org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi

- All Implemented Interfaces:
    `IgniteSpi`, `MetricExporterSpi`

      public class JmxMetricExporterSpi
      extends IgniteSpiAdapter
      implements MetricExporterSpi

  ## Overview

  Ignite provides this default built-in implementation of `MetricExporterSpi` it exports metrics as JMX beans. This implementation works by `pull` architecture which means that after the Ignite node start it should respond to incoming user request.

  ## Java Example

  See the example below of how the internal metrics can be obtained through your application by constructing MBean names.

       Ignite ignite = Ignition.start(new IgniteConfiguration()
            .setDataStorageConfiguration(new DataStorageConfiguration()
                .setDefaultDataRegionConfiguration(
                    new DataRegionConfiguration()
                        .setMaxSize(12_000_000)))
            .setIgniteInstanceName("jmxExampleInstanceName"));

        String igniteInstanceName = ignite.name();
        String metricGroup = "io";

        // NOTE: The special characters of metric name must be escaped.
        String metricName = "\"dataregion.default\"";

        SB sb = new SB("org.apache:");

        if (IgniteSystemProperties.getBoolean("IGNITE_MBEAN_APPEND_CLASS_LOADER_ID", true))
            sb.a("clsLdr=").a(Integer.toHexString(Ignite.class.getClassLoader().hashCode())).a(',');

        if (IgniteSystemProperties.getBoolean("IGNITE_MBEAN_APPEND_JVM_ID"))
            sb.a("jvmId=").a(ManagementFactory.getRuntimeMXBean().getName()).a(',');

        sb.a("igniteInstanceName=").a(igniteInstanceName).a(',')
            .a("group=").a(metricGroup).a(',')
            .a("name=").a(metricName);

        DynamicMBean dataRegionMBean = MBeanServerInvocationHandler.newProxyInstance(
            ignite.configuration().getMBeanServer(),
            new ObjectName(sb.toString()),
            DynamicMBean.class,
            false);

        Set listOfMetrics = Arrays.stream(dataRegionMBean.getMBeanInfo().getAttributes())
            .map(MBeanFeatureInfo::getName)
            .collect(toSet());

        System.out.println("The list of available data region metrics: " + listOfMetrics);
        System.out.println("The 'default' data region MaxSize: " + dataRegionMBean.getAttribute("MaxSize"));

  See Also:
    `ReadOnlyMetricManager`, `ReadOnlyMetricRegistry`, `IgniteSystemProperties.IGNITE_MBEANS_DISABLED`

- - ### Field Summary

    - ### Fields inherited from class org.apache.ignite.spi.IgniteSpiAdapter

      `ignite, igniteInstanceName, log`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `JmxMetricExporterSpi()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `setExportFilter​(Predicate<ReadOnlyMetricRegistry> filter)` | Sets export filter.
    `void` | `setMetricRegistry​(ReadOnlyMetricManager reg)` | Sets metrics registry that SPI should export.
    `void` | `spiStart​(@Nullable String igniteInstanceName)` | This method is called to start SPI.
    `void` | `spiStop()` | This method is called to stop SPI.

    - ### Methods inherited from class org.apache.ignite.spi.IgniteSpiAdapter

      `addTimeoutObject, assertParameter, checkConfigurationConsistency0, clientFailureDetectionTimeout, configInfo, createSpiAttributeName, failureDetectionTimeout, failureDetectionTimeoutEnabled, failureDetectionTimeoutEnabled, getConsistentAttributeNames, getExceptionRegistry, getLocalNode, getName, getNodeAttributes, getSpiContext, ignite, initFailureDetectionTimeout, injectables, injectResources, isNodeStopping, onBeforeStart, onClientDisconnected, onClientReconnected, onContextDestroyed, onContextDestroyed0, onContextInitialized, onContextInitialized0, registerMBean, removeTimeoutObject, setName, started, startInfo, startStopwatch, stopInfo, unregisterMBean`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.apache.ignite.spi.IgniteSpi

      `getName, getNodeAttributes, onClientDisconnected, onClientReconnected, onContextDestroyed, onContextInitialized`

- - ### Constructor Detail

    - #### JmxMetricExporterSpi

          public JmxMetricExporterSpi()

  - ### Method Detail

    - #### spiStart

          public void spiStart​(@Nullable
                               @Nullable String igniteInstanceName)
                        throws IgniteSpiException

      This method is called to start SPI. After this method returns successfully kernel assumes that SPI is fully operational.
      Specified by:
        `spiStart` in interface `IgniteSpi`
      Parameters:
        `igniteInstanceName` - Name of Ignite instance this SPI is being started for (`null` for default Ignite instance).
      Throws:
        `IgniteSpiException` - Throws in case of any error during SPI start.

    - #### spiStop

          public void spiStop()
                       throws IgniteSpiException

      This method is called to stop SPI. After this method returns kernel assumes that this SPI is finished and all resources acquired by it are released.

      Note that this method can be called at any point including during recovery of failed start. It should make no assumptions on what state SPI will be in when this method is called.

      Specified by:
        `spiStop` in interface `IgniteSpi`
      Throws:
        `IgniteSpiException` - Thrown in case of any error during SPI stop.

    - #### setMetricRegistry

          public void setMetricRegistry​(ReadOnlyMetricManager reg)

      Sets metrics registry that SPI should export. This method called before `IgniteSpi.spiStart(String)`.
      Specified by:
        `setMetricRegistry` in interface `MetricExporterSpi`
      Parameters:
        `reg` - Metric registry.

    - #### setExportFilter

          public void setExportFilter​(Predicate<ReadOnlyMetricRegistry> filter)

      Sets export filter. Metric registry that not satisfy `filter` shouldn't be exported.
      Specified by:
        `setExportFilter` in interface `MetricExporterSpi`
      Parameters:
        `filter` - Filter.
      See Also:
        `RegexpMetricFilter`