Prometheus Prometheus monitoring

Weekend bored at home watching the news to see what used to play on monitors feeling quite interesting to try it hereby record

Here only the client's configuration

 

1: First, add a dependency in the POM

Copy the code
<dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient</artifactId>
            <version>${prometheus.version}</version>
        </dependency>
        <!-- Hotspot JVM metrics-->
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_hotspot</artifactId>
            <version>${prometheus.version}</version>
        </dependency>
        <!-- Exposition servlet-->
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_servlet</artifactId>
            <version>${prometheus.version}</version>
        </dependency>
        <!-- Pushgateway exposition-->
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_pushgateway</artifactId>
            <version>${prometheus.version}</version>
        </dependency>
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_spring_web</artifactId>
            <version>${prometheus.version}</version>
        </dependency>
Copy the code

2: Add the servlet interceptors in the web.xml file

    <servlet>
        <servlet-name>PrometheusServlet</servlet-name>
        <servlet-class>io.prometheus.client.exporter.MetricsServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>PrometheusServlet</servlet-name>
        <url-pattern>/metrics</url-pattern>
    </servlet-mapping>
web.xml

3: Add an interceptor class

public class WebInterceptor extends HandlerInterceptorAdapter {

    private static Logger logger = Logger.getLogger(WebInterceptor.class);

    private static final String SYSTEM_ID= "BLOAN-GJJ";

    private static final String APP_ID= "gjj-ics-credit";

    private static final String TYPE = "java";


    private static final Histogram requestLatency = Histogram.build()
            .name("service_requests_latency_seconds")
            .help("Request latency in seconds.")
            .labelNames("systemId", "appId", "type", "name", "method").register();

    private ThreadLocal<Histogram.Timer> timerThreadLocal;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        String name = this.getName(request, handler).toLowerCase();
        String method = request.getMethod().toUpperCase();
        timerThreadLocal = new ThreadLocal<>();
        timerThreadLocal.set(requestLatency.labels(SYSTEM_ID, APP_ID, TYPE, name, method).startTimer());
        super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        super.afterCompletion(request, response, handler, ex);
        if (timerThreadLocal.get() != null) {
            timerThreadLocal.get().observeDuration();
        }
    }

    @Override
    public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        super.afterConcurrentHandlingStarted(request, response, handler);
    }

    private String getName(HttpServletRequest request, Object handler) {
        String name = "";
        try {
            if (handler != null
                    && handler instanceof HandlerMethod) {
                HandlerMethod method = (HandlerMethod) handler;
                String className = ((HandlerMethod) handler).getBeanType().getName();
                name = className + "." + method.getMethod().getName();
            } else {
                name = request.getRequestURI();
            }
        } catch (Exception ex) {
            logger.error("getName", ex);
        } finally {
            return name;
        }
    }
}
View Code

4: Configuration Initialization class

@Component
public class PrometheusConfig {

    private static Logger logger = Logger.getLogger(PrometheusConfig.class);

    @PostConstruct
    public void initialize() {
        logger.info("prometheus init...");
        DefaultExports.initialize();
        logger.info("prometheus has been initialized...");
    }

}
PrometheusConfig.class

5: springmvc.xml added interceptor

        <mvc:interceptor>
            <bean class="com.pingan.credit.interceptor.WebInterceptor"/>
        </mvc:interceptor>    

6: spring-application.xml initialization class initializer

 <bean id="prometheusConfig" class="com.pingan.credit.service.PrometheusConfig" init-method="initialize" />

 7: Adding controller

Copy the code
@Controller
public class MetricsController {
    private CollectorRegistry registry;

    /**
     * Construct a MetricsServlet for the default registry.
     */
    public MetricsController() {
        this(CollectorRegistry.defaultRegistry);
    }

    /**
     * Construct a MetricsServlet for the given registry.
     */
    private MetricsController(CollectorRegistry registry) {
        this.registry = registry;
    }

    @RequestMapping(value="/metrics",method= RequestMethod.GET)
    public void metrics(final HttpServletRequest req,
                        final HttpServletResponse resp) throws ServletException,
            IOException {
        resp.setStatus(HttpServletResponse.SC_OK);
        resp.setContentType(TextFormat.CONTENT_TYPE_004);

        try (Writer writer = resp.getWriter()) {
            TextFormat.write004(writer,
                    registry.filteredMetricFamilySamples(parse(req)));
            writer.flush();
        }
    }

    private Set<String> parse(HttpServletRequest req) {
        String[] includedParam = req.getParameterValues("name[]");
        if (includedParam == null) {
            return Collections.emptySet();
        } else {
            return new HashSet<>(Arrays.asList(includedParam));
        }
    }
}
Copy the code

 

 

Tomcat start your project and then enter localhost: 8080 / metrics can see the information of the JVM

Original Address: https: //www.cnblogs.com/showme1942/p/7457451.html

Weekend bored at home watching the news to see what used to play on monitors feeling quite interesting to try it hereby record

Here only the client's configuration

 

1: First, add a dependency in the POM

Copy the code
<dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient</artifactId>
            <version>${prometheus.version}</version>
        </dependency>
        <!-- Hotspot JVM metrics-->
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_hotspot</artifactId>
            <version>${prometheus.version}</version>
        </dependency>
        <!-- Exposition servlet-->
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_servlet</artifactId>
            <version>${prometheus.version}</version>
        </dependency>
        <!-- Pushgateway exposition-->
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_pushgateway</artifactId>
            <version>${prometheus.version}</version>
        </dependency>
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_spring_web</artifactId>
            <version>${prometheus.version}</version>
        </dependency>
Copy the code

2: Add the servlet interceptors in the web.xml file

    <servlet>
        <servlet-name>PrometheusServlet</servlet-name>
        <servlet-class>io.prometheus.client.exporter.MetricsServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>PrometheusServlet</servlet-name>
        <url-pattern>/metrics</url-pattern>
    </servlet-mapping>
web.xml

3: Add an interceptor class

public class WebInterceptor extends HandlerInterceptorAdapter {

    private static Logger logger = Logger.getLogger(WebInterceptor.class);

    private static final String SYSTEM_ID= "BLOAN-GJJ";

    private static final String APP_ID= "gjj-ics-credit";

    private static final String TYPE = "java";


    private static final Histogram requestLatency = Histogram.build()
            .name("service_requests_latency_seconds")
            .help("Request latency in seconds.")
            .labelNames("systemId", "appId", "type", "name", "method").register();

    private ThreadLocal<Histogram.Timer> timerThreadLocal;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        String name = this.getName(request, handler).toLowerCase();
        String method = request.getMethod().toUpperCase();
        timerThreadLocal = new ThreadLocal<>();
        timerThreadLocal.set(requestLatency.labels(SYSTEM_ID, APP_ID, TYPE, name, method).startTimer());
        super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        super.afterCompletion(request, response, handler, ex);
        if (timerThreadLocal.get() != null) {
            timerThreadLocal.get().observeDuration();
        }
    }

    @Override
    public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        super.afterConcurrentHandlingStarted(request, response, handler);
    }

    private String getName(HttpServletRequest request, Object handler) {
        String name = "";
        try {
            if (handler != null
                    && handler instanceof HandlerMethod) {
                HandlerMethod method = (HandlerMethod) handler;
                String className = ((HandlerMethod) handler).getBeanType().getName();
                name = className + "." + method.getMethod().getName();
            } else {
                name = request.getRequestURI();
            }
        } catch (Exception ex) {
            logger.error("getName", ex);
        } finally {
            return name;
        }
    }
}
View Code

4: Configuration Initialization class

@Component
public class PrometheusConfig {

    private static Logger logger = Logger.getLogger(PrometheusConfig.class);

    @PostConstruct
    public void initialize() {
        logger.info("prometheus init...");
        DefaultExports.initialize();
        logger.info("prometheus has been initialized...");
    }

}
PrometheusConfig.class

5: springmvc.xml added interceptor

        <mvc:interceptor>
            <bean class="com.pingan.credit.interceptor.WebInterceptor"/>
        </mvc:interceptor>    

6: spring-application.xml initialization class initializer

 <bean id="prometheusConfig" class="com.pingan.credit.service.PrometheusConfig" init-method="initialize" />

 7: Adding controller

Copy the code
@Controller
public class MetricsController {
    private CollectorRegistry registry;

    /**
     * Construct a MetricsServlet for the default registry.
     */
    public MetricsController() {
        this(CollectorRegistry.defaultRegistry);
    }

    /**
     * Construct a MetricsServlet for the given registry.
     */
    private MetricsController(CollectorRegistry registry) {
        this.registry = registry;
    }

    @RequestMapping(value="/metrics",method= RequestMethod.GET)
    public void metrics(final HttpServletRequest req,
                        final HttpServletResponse resp) throws ServletException,
            IOException {
        resp.setStatus(HttpServletResponse.SC_OK);
        resp.setContentType(TextFormat.CONTENT_TYPE_004);

        try (Writer writer = resp.getWriter()) {
            TextFormat.write004(writer,
                    registry.filteredMetricFamilySamples(parse(req)));
            writer.flush();
        }
    }

    private Set<String> parse(HttpServletRequest req) {
        String[] includedParam = req.getParameterValues("name[]");
        if (includedParam == null) {
            return Collections.emptySet();
        } else {
            return new HashSet<>(Arrays.asList(includedParam));
        }
    }
}
Copy the code

 

 

Tomcat start your project and then enter localhost: 8080 / metrics can see the information of the JVM

Original Address: https: //www.cnblogs.com/showme1942/p/7457451.html

Guess you like

Origin www.cnblogs.com/jpfss/p/11887467.html