import com.codahale.metrics.MetricRegistry;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.dropwizard.DropwizardExports;
import io.prometheus.client.exporter.MetricsServlet;
import io.prometheus.client.hotspot.DefaultExports;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
public class PrometheusReporter {
//創建Server,加載Connectors,加載handlers,加載Servlets等,啟動服務start,最后加入服務器join。
//webappcontext 繼承於servletContextHandler,servletContextHandler繼承於contexthandler
//server 用於存儲handler,handler分很多種,此處是servlet 運行在servletcontext 中,servlet 的工作是由handler來指揮和安排,handler是聽從於外界的web 請求
//當外界web 請求過來時,首先接到這個請求的是handler,contexthandler 會根據請求的path找到and交由內部對應的servlet 來處理
//serlvet的存在和創建(即需要以下步驟完成的情況下才可能存在):包括創建server ,設置server端口,創建context ,設置contextpath,設置contexthandler
//添加servlet :需serlvet的存在和創建下可以操作的
public static void start( MetricRegistry registry ) throws Exception {
// Hook the Dropwizard registry into the Prometheus registry
// via the DropwizardExports collector.
//啟動汽車前,先把汽車的監控連接到對的監控視屏上,方便監控視頻可以采集到汽車的數據
CollectorRegistry.defaultRegistry.register(new DropwizardExports(registry));
// Expose Prometheus metrics.
Server server = new Server(9404);//將自己的端口設置為9094
ServletContextHandler context = new ServletContextHandler();//聲明一個context
context.setContextPath("/");////設置contextPath
server.setHandler(context);//設置handler
context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics");//指定servlet和servlet匹配的url
//context.addServlet(new ServletHolder(new MetricsServlet()), "/hhh");
DefaultExports.initialize();
// Start the webserver.
server.start();
server.join();
}
}