其餘概念參考:https://my.oschina.net/xiaominmin/blog/3115740html
Metric類型web
自定義Metrics:讓Prometheus監控你的應用程序(Spring版)spring
自定義Metrics:讓Prometheus監控你的應用程序app
使用Prometheus+Grafana監控MySQL實踐ide
全面學習Prometheusspring-boot
一、引入依賴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