prometheus 自定义指标 01

其余概念参考:https://my.oschina.net/xiaominmin/blog/3115740html

grafana 下载监控图标JSON文件java

Metric类型web

自定义Metrics:让Prometheus监控你的应用程序(Spring版)spring

自定义Metrics:让Prometheus监控你的应用程序app

使用Prometheus+Grafana监控MySQL实践ide

全面学习Prometheusspring-boot

Prometheus笔记(一)metric type学习

一、引入依赖ui

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
	<groupId>io.micrometer</groupId>
	<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

二、开放端点.net

management:
  endpoints:
    promethus:
      enable: true
    web:
      exposure:
        include:
        - prometheus
        - info
        - health

三、自定义指标

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import io.micrometer.prometheus.PrometheusMeterRegistry;
import io.prometheus.client.Counter;
import io.prometheus.client.Summary;

@Configuration
public class PrometheusMetricsConfig {

	@Autowired
	private PrometheusMeterRegistry prometheusMeterRegistry;
	
	@Bean
	public Counter requestCounter() {
		return Counter.build("is_request_count","count request by service")
				.labelNames("service", "method", "code")
				.register(prometheusMeterRegistry.getPrometheusRegistry());
	}
	
	@Bean
	public Summary requestLatency() {
		return Summary.build("is_request_latency","monite request latency by service")
				.quantile(0.5, 0.05)
				.quantile(0.9, 0.01)
				.labelNames("service", "method", "code")
				.register(prometheusMeterRegistry.getPrometheusRegistry());
	}
	
}

四、给指标生成数据

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import io.prometheus.client.Counter;
import io.prometheus.client.Summary;

@Component
public class PrometheusMetricsInterceptor extends HandlerInterceptorAdapter {

	@Autowired
	private Counter requestCounter;
	
	@Autowired
	private Summary requestLatency;
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		request.setAttribute("startTime", new Date().getTime());
		return true;
	}
	
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		String service = request.getRequestURI();
		requestCounter.labels(service, request.getMethod(), String.valueOf(response.getStatus()))
					  .inc();
		
		long duration = new Date().getTime() - (Long)request.getAttribute("startTime");
		requestLatency.labels(service, request.getMethod(), String.valueOf(response.getStatus()))
					  .observe(duration);
					
		
	}
	
}

五、添加拦截器

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

	@Autowired
	private PrometheusMetricsInterceptor prometheusMetricsInterceptor;

	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(prometheusMetricsInterceptor).addPathPatterns("/**");
	}

}

六、访问端点数据

http://localhost:8080/actuator/prometheus