Add below dependency in your pom.xml:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.2.0</version> </dependency>
Here is a simple test class :
import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.DistributionSummary; import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.Tags; import io.micrometer.prometheus.PrometheusConfig; import io.micrometer.prometheus.PrometheusMeterRegistry; import org.junit.jupiter.api.Test; public class MicrometerTest { private PrometheusMeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT); @Test public void test() {} // @Test public void test_metrics() { Counter.builder("http_requests_total").description("Http Request Total").tags("method", "GET", "handler", "/employee", "status", "200").register(registry).increment(); Counter.builder("http_requests_total").description("Http Request Total").tags("method", "GET", "handler", "/employee", "status", "200").register(registry).increment(); DistributionSummary.builder("http_response_time_milliseconds").description("Request completed time in milliseconds") .tags("method", "GET", "handler", "/employee", "status", "200") .publishPercentiles(.5,.95,.99) .register(registry).record(40d); DistributionSummary.builder("http_response_time_milliseconds").description("Request completed time in milliseconds") .tags("method", "GET", "handler", "/employee", "status", "200") .publishPercentiles(.5,.95,.99) .register(registry).record(50d); registry.counter("http_requests_total2", "method", "GET", "status", "200").increment(); registry.counter("http_requests_total2", "method", "Post", "status", "200").increment(); registry.counter("http_requests_total2", "method", "GET", "status", "200").increment(); registry.newCounter(new Meter.Id("query time", Tags.of("select query", "country"), null, "query desc", Meter.Type.COUNTER)); System.out.println(registry.scrape()); } }
If you want to expose it via servlet, add another dependency :
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency>
Sample servlet to expose metrics:
import com.aeris.amp.metrics.util.MeterRegistry; import io.micrometer.core.instrument.binder.jvm.DiskSpaceMetrics; import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; import io.micrometer.core.instrument.binder.system.ProcessorMetrics; import io.micrometer.core.instrument.binder.system.UptimeMetrics; import io.micrometer.prometheus.PrometheusConfig; import io.micrometer.prometheus.PrometheusMeterRegistry; import io.prometheus.client.exporter.common.TextFormat; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.Writer; @WebServlet("/metrics") public class MetricsServlet extends HttpServlet { public static PrometheusMeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT); public void init() { new JvmThreadMetrics().bindTo(registry); new JvmGcMetrics().bindTo(registry); new JvmMemoryMetrics().bindTo(registry); new DiskSpaceMetrics(new File("/")).bindTo(registry); new ProcessorMetrics().bindTo(registry); // metrics related to the CPU stats new UptimeMetrics().bindTo(registry); } @Override protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException { resp.setStatus(HttpServletResponse.SC_OK); resp.setContentType(TextFormat.CONTENT_TYPE_004); Writer writer = resp.getWriter(); try { registry.scrape(writer); writer.flush(); } finally { writer.close(); } } public static String getMetricsString() { if (registry == null) registry = MeterRegistry.registry; return registry.scrape(); } }