All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.opentelemetry.instrumentation.jmx.engine.JmxMetricInsight Maven / Gradle / Ivy

/*
 * Copyright The OpenTelemetry Authors
 * SPDX-License-Identifier: Apache-2.0
 */

package io.opentelemetry.instrumentation.jmx.engine;

import static java.util.logging.Level.FINE;

import io.opentelemetry.api.OpenTelemetry;
import java.util.List;
import java.util.function.Supplier;
import java.util.logging.Logger;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerFactory;

/** Collecting and exporting JMX metrics. */
public class JmxMetricInsight {

  private static final Logger logger = Logger.getLogger(JmxMetricInsight.class.getName());

  private static final String INSTRUMENTATION_SCOPE = "io.opentelemetry.jmx";

  private final OpenTelemetry openTelemetry;
  private final long discoveryDelay;

  public static JmxMetricInsight createService(OpenTelemetry ot, long discoveryDelay) {
    return new JmxMetricInsight(ot, discoveryDelay);
  }

  public static Logger getLogger() {
    return logger;
  }

  private JmxMetricInsight(OpenTelemetry openTelemetry, long discoveryDelay) {
    this.openTelemetry = openTelemetry;
    this.discoveryDelay = discoveryDelay;
  }

  /**
   * Starts metric registration for local JVM
   *
   * @param conf metric configuration
   */
  public void startLocal(MetricConfiguration conf) {
    start(conf, () -> MBeanServerFactory.findMBeanServer(null));
  }

  /**
   * Starts metric registration for a remote JVM connection
   *
   * @param conf metric configuration
   * @param connections supplier for list of remote connections
   */
  public void startRemote(
      MetricConfiguration conf, Supplier> connections) {
    start(conf, connections);
  }

  private void start(
      MetricConfiguration conf, Supplier> connections) {
    if (conf.isEmpty()) {
      logger.log(
          FINE,
          "Empty JMX configuration, no metrics will be collected for InstrumentationScope "
              + INSTRUMENTATION_SCOPE);
    } else {
      MetricRegistrar registrar = new MetricRegistrar(openTelemetry, INSTRUMENTATION_SCOPE);
      BeanFinder finder = new BeanFinder(registrar, discoveryDelay);
      finder.discoverBeans(conf, connections);
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy