| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package rocks.zipcode.io.config;
-
- import io.github.jhipster.config.JHipsterProperties;
-
- import com.codahale.metrics.JmxReporter;
- import com.codahale.metrics.JvmAttributeGaugeSet;
- import com.codahale.metrics.MetricRegistry;
- import com.codahale.metrics.Slf4jReporter;
- import com.codahale.metrics.health.HealthCheckRegistry;
- import com.codahale.metrics.jvm.*;
- import com.ryantenney.metrics.spring.config.annotation.EnableMetrics;
- import com.ryantenney.metrics.spring.config.annotation.MetricsConfigurerAdapter;
- import com.zaxxer.hikari.HikariDataSource;
- import io.prometheus.client.CollectorRegistry;
- import io.prometheus.client.dropwizard.DropwizardExports;
- import io.prometheus.client.exporter.MetricsServlet;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.slf4j.Marker;
- import org.slf4j.MarkerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.web.servlet.ServletContextInitializer;
- import org.springframework.context.annotation.*;
-
- import javax.annotation.PostConstruct;
- import javax.servlet.ServletContext;
- import java.lang.management.ManagementFactory;
- import java.util.concurrent.TimeUnit;
-
- @Configuration
- @EnableMetrics(proxyTargetClass = true)
- public class MetricsConfiguration extends MetricsConfigurerAdapter implements ServletContextInitializer {
-
- private static final String PROP_METRIC_REG_JVM_MEMORY = "jvm.memory";
- private static final String PROP_METRIC_REG_JVM_GARBAGE = "jvm.garbage";
- private static final String PROP_METRIC_REG_JVM_THREADS = "jvm.threads";
- private static final String PROP_METRIC_REG_JVM_FILES = "jvm.files";
- private static final String PROP_METRIC_REG_JVM_BUFFERS = "jvm.buffers";
- private static final String PROP_METRIC_REG_JVM_ATTRIBUTE_SET = "jvm.attributes";
-
- private final Logger log = LoggerFactory.getLogger(MetricsConfiguration.class);
-
- private MetricRegistry metricRegistry = new MetricRegistry();
-
- private HealthCheckRegistry healthCheckRegistry = new HealthCheckRegistry();
-
- private final JHipsterProperties jHipsterProperties;
-
- private HikariDataSource hikariDataSource;
-
- public MetricsConfiguration(JHipsterProperties jHipsterProperties) {
- this.jHipsterProperties = jHipsterProperties;
- }
-
- @Autowired(required = false)
- public void setHikariDataSource(HikariDataSource hikariDataSource) {
- this.hikariDataSource = hikariDataSource;
- }
-
- @Override
- @Bean
- public MetricRegistry getMetricRegistry() {
- return metricRegistry;
- }
-
- @Override
- @Bean
- public HealthCheckRegistry getHealthCheckRegistry() {
- return healthCheckRegistry;
- }
-
- @PostConstruct
- public void init() {
- log.debug("Registering JVM gauges");
- metricRegistry.register(PROP_METRIC_REG_JVM_MEMORY, new MemoryUsageGaugeSet());
- metricRegistry.register(PROP_METRIC_REG_JVM_GARBAGE, new GarbageCollectorMetricSet());
- metricRegistry.register(PROP_METRIC_REG_JVM_THREADS, new ThreadStatesGaugeSet());
- metricRegistry.register(PROP_METRIC_REG_JVM_FILES, new FileDescriptorRatioGauge());
- metricRegistry.register(PROP_METRIC_REG_JVM_BUFFERS, new BufferPoolMetricSet(ManagementFactory.getPlatformMBeanServer()));
- metricRegistry.register(PROP_METRIC_REG_JVM_ATTRIBUTE_SET, new JvmAttributeGaugeSet());
- if (hikariDataSource != null) {
- log.debug("Monitoring the datasource");
- // remove the factory created by HikariDataSourceMetricsPostProcessor until JHipster migrate to Micrometer
- hikariDataSource.setMetricsTrackerFactory(null);
- hikariDataSource.setMetricRegistry(metricRegistry);
- }
- if (jHipsterProperties.getMetrics().getJmx().isEnabled()) {
- log.debug("Initializing Metrics JMX reporting");
- JmxReporter jmxReporter = JmxReporter.forRegistry(metricRegistry).build();
- jmxReporter.start();
- }
- if (jHipsterProperties.getMetrics().getLogs().isEnabled()) {
- log.info("Initializing Metrics Log reporting");
- Marker metricsMarker = MarkerFactory.getMarker("metrics");
- final Slf4jReporter reporter = Slf4jReporter.forRegistry(metricRegistry)
- .outputTo(LoggerFactory.getLogger("metrics"))
- .markWith(metricsMarker)
- .convertRatesTo(TimeUnit.SECONDS)
- .convertDurationsTo(TimeUnit.MILLISECONDS)
- .build();
- reporter.start(jHipsterProperties.getMetrics().getLogs().getReportFrequency(), TimeUnit.SECONDS);
- }
- }
-
- @Override
- public void onStartup(ServletContext servletContext) {
-
- if (jHipsterProperties.getMetrics().getPrometheus().isEnabled()) {
- String endpoint = jHipsterProperties.getMetrics().getPrometheus().getEndpoint();
-
- log.debug("Initializing prometheus metrics exporting via {}", endpoint);
-
- CollectorRegistry.defaultRegistry.register(new DropwizardExports(metricRegistry));
- servletContext
- .addServlet("prometheusMetrics", new MetricsServlet(CollectorRegistry.defaultRegistry))
- .addMapping(endpoint);
- }
- }
- }
|