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.File; 007import java.net.InetSocketAddress; 008import org.eclipse.jetty.server.Server; 009import org.eclipse.jetty.servlet.ServletContextHandler; 010import org.eclipse.jetty.servlet.ServletHolder; 011import org.eclipse.jetty.util.thread.QueuedThreadPool; 012 013public class JavaAgent { 014 static Server server; 015 016 public static void premain(String agentArgument, Instrumentation instrumentation) throws Exception { 017 String[] args = agentArgument.split(":"); 018 if (args.length < 2 || args.length > 3) { 019 System.err.println("Usage: -javaagent:/path/to/JavaAgent.jar=[host:]<port>:<yaml configuration file>"); 020 System.exit(1); 021 } 022 023 int port; 024 InetSocketAddress socket; 025 String file; 026 027 if (args.length == 3) { 028 port = Integer.parseInt(args[1]); 029 socket = new InetSocketAddress(args[0], port); 030 file = args[2]; 031 } else { 032 port = Integer.parseInt(args[0]); 033 socket = new InetSocketAddress(port); 034 file = args[1]; 035 } 036 037 new JmxCollector(new File(file)).register(); 038 DefaultExports.initialize(); 039 040 server = new Server(socket); 041 QueuedThreadPool pool = new QueuedThreadPool(); 042 pool.setDaemon(true); 043 pool.setMaxThreads(10); 044 pool.setMaxQueued(10); 045 pool.setName("jmx_exporter"); 046 server.setThreadPool(pool); 047 ServletContextHandler context = new ServletContextHandler(); 048 context.setContextPath("/"); 049 server.setHandler(context); 050 context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics"); 051 server.start(); 052 } 053}