栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

标题springboot 2.x 添加 prometheus ,actuator 监控

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

标题springboot 2.x 添加 prometheus ,actuator 监控

pom.xml

   io.micrometer
   micrometer-registry-prometheus


   org.springframework.boot
   spring-boot-actuator-autoconfigure

application.yml
management:
  endpoints:
    web:
      exposure:
        include: '*'
  metrics:
    tags:
      application: ${spring.appliclation.name}

​ spring.appliclation.name 这个是项目名称 自己定义

*Application.java 项目启动类 添加下面方法

@Bean
MeterRegistryCustomizer configurer(
      @Value("${spring.application.name}") String applicationName) {
   return (registry) -> registry.config().commonTags("application", applicationName);
}

commonController.java 提供一个访问接口 用于prometheus 获取指标数据

@RestController
public class CommonController {

    
    @GetMapping(value="/metrics")
    public void metrics(HttpServletResponse response) throws IOException {
        response.sendRedirect("/actuator/prometheus");
    }

}

aop 埋点

package com.ifeng.filter;

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.concurrent.TimeUnit;


@Component
@Aspect
@Slf4j
public class AspectAop {

    @Pointcut("execution(public * com.ifeng.controller.*.*(..))") // 对所有controller总的方法做切面
    public void pointCut(){

    }


    @Autowired
    MeterRegistry registry;

    private Counter httpRpcCount; // 统计调用次数
 
    private Timer httpRpcTimer;  // 统计调用耗时

    ThreadLocal localStartTime=new ThreadLocal<>();


    @Before(value = "pointCut()")
    public void before(JoinPoint joinPoint) {
        registry.counter("http_rpc_total").increment(); // 统计调用次数
        localStartTime.set(System.currentTimeMillis()); // 用于记录某次调用开始时间 
    }

    @AfterReturning(returning = "returnVal",pointcut = "pointCut()")
    public void doAfterReturning(Object returnVal){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String sourceFrom = request.getHeader("sourceFrom"); // header中添加一个来源参数,标识调用方
        String uri = request.getRequestURI(); // 访问的地址方法是哪一个
        long duration = System.currentTimeMillis() - localStartTime.get(); // 计算耗时
        
        // http_rpc_success_duration 这个指标 访问的地址是什么,来源是哪里
        httpRpcTimer=registry.timer("http_rpc_success_duration","uri",uri,"sourceFrom", StringUtils.isNotBlank(sourceFrom)?sourceFrom:"default"); 
        httpRpcTimer.record(duration,TimeUnit.MILLISECONDS);// 记录耗时

    }

    // 调用异常时 也记录 
    @AfterThrowing(throwing="obj",pointcut = "pointCut()")
    public  void doAfterThrowing(Throwable obj){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String sourceFrom = request.getHeader("sourceFrom");
        String uri = request.getRequestURI();
        long duration = System.currentTimeMillis() - localStartTime.get();
        httpRpcTimer=registry.timer("http_rpc_error_duration","uri",uri,"sourceFrom",StringUtils.isNotBlank(sourceFrom)?sourceFrom:"default");
        httpRpcTimer.record(duration,TimeUnit.MILLISECONDS);
    }



}

registry.timer 耗时统计 ,每次都会新建一个,第一个参数是指标名称 ,后边的参数是补充的数据

体现在grafana ,会在指标后自动天见 seconds_count seconds_sum seconds_max ,分别表示 调用次数,调用总耗时 ,调用最大耗时

rate(http_rpc_success_duration_seconds_sum{application=“ai_news_tencents”,sourceFrom="KaTeX parse error: Expected 'EOF', got '}' at position 14: {sourceFrom}"}̲[1m])/rate(http…{sourceFrom}"}[1m])*1000

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/632365.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号