001package io.prometheus.jmx; 002 003import io.prometheus.client.exporter.MetricsServlet; 004import io.prometheus.client.hotspot.DefaultExports; 005import java.lang.instrument.Instrumentation; 006import java.io.FileReader; 007import org.eclipse.jetty.server.Server; 008import org.eclipse.jetty.servlet.ServletContextHandler; 009import org.eclipse.jetty.servlet.ServletHolder; 010import org.eclipse.jetty.util.thread.QueuedThreadPool; 011 012public class JavaAgent { 013 static Server server; 014 015 public static void premain(String agentArgument, Instrumentation instrumentation) throws Exception { 016 String[] args = agentArgument.split(":"); 017 if (args.length != 2) { 018 System.err.println("Usage: -javaagent:/path/to/JavaAgent.jar=<port>:<yaml configuration file>"); 019 System.exit(1); 020 } 021 new JmxCollector(new FileReader(args[1])).register(); 022 DefaultExports.initialize(); 023 024 int port = Integer.parseInt(args[0]); 025 server = new Server(port); 026 QueuedThreadPool pool = new QueuedThreadPool(); 027 pool.setDaemon(true); 028 server.setThreadPool(pool); 029 ServletContextHandler context = new ServletContextHandler(); 030 context.setContextPath("/"); 031 server.setHandler(context); 032 context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics"); 033 server.start(); 034 } 035}