成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手寫!Controller接口性能監控

開發 前端
本文將介紹如何在Spring Boot應用中通過Spring Boot Actuator和Prometheus來監控任意API接口的調用耗時情況。通過Actuator提供度量metrics功能,我們能夠結合AOP輕松實現API接口運行時性能指標。

1. 簡介

本文將介紹如何在Spring Boot應用中通過Spring Boot Actuator和Prometheus來監控任意API接口的調用耗時情況。通過Actuator提供度量metrics功能,我們能夠結合AOP輕松實現API接口運行時性能指標。結合Prometheus這一強大的監控系統,我們能夠實時地查看和分析API接口的調用耗時,進而評估應用的性能狀況。

2. 環境準備

2.1 依賴管理

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

引入Prometheus依賴包,將所有的指標數據導出為Prometheus格式。Prometheus會通過actuator接口拉取數據。同時還會注冊一個/prometheus接口。

配置文件

management:
  endpoints:
    web:
      base-path: /ac
      exposure:
        include: '*'

暴露所有的端點。

3. 實戰案例

本案例統計Controller接口的耗時情況,為了簡單我們通過注解的方式標注需要統計的方法。

3.1 定義注解

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Monitor {
  // 作用是為不同的接口打標記
  String[] tags() default {} ;
}

其實你還可以定義比如:指標名的屬性,這樣可以為不同的Controller做統計。

3.2 定義切面

該切面的作用用來攔截所有使用了@Monitor注解的Controller方法,通過環繞通知進行計時處理。

@Component
@Aspect
public class MonitorAspect {
  
  private final MeterRegistry meterRegistry ;
  // 度量名稱(你可以通過注解自定義)
  private static final String API_TIMER_METER_NAME = "myapp.api.timer" ; 
  
  public MonitorAspect(MeterRegistry meterRegistry) {
    this.meterRegistry = meterRegistry ;
  }
  
  @Pointcut("@annotation(monitor)")
  private void pcMonitor(Monitor monitor) {} ;
  
  @Around("pcMonitor(monitor)")
  public Object around(ProceedingJoinPoint pjp, Monitor monitor) throws Throwable {
    Timer.Sample sample = Timer.start(this.meterRegistry) ;
    String[] tags = monitor.tags() ;
    
    Object ret = null ;
    Throwable ex = null ;
    
    try {
      ret = pjp.proceed() ;
    } catch (Throwable th) {
      ex = th ;
      throw th ;
    } finally {
      List<String> listTags = new ArrayList<>() ;
      listTags.addAll(Arrays.asList(tags)) ;
      // 出現異常也會將異常名稱打入tag
      if (Objects.nonNull(ex)) {
        listTags.add(ex.getClass().getSimpleName()) ;
      }
      Timer timer = meterRegistry.timer(API_TIMER_METER_NAME, listTags.toArray(new String[0])) ;
      sample.stop(timer) ;
    }  
    return ret ;
  }
}

以上切面非常的簡單,統計方法執行的耗時情況。

3.3 定義接口

@Service
public class UserService {
  
  private static final List<User> DATAS = List.of(
      new User(1L, "張三", "男", 22), 
      new User(2L, "李四", "男", 23), 
      new User(3L, "王五", "女", 22), 
      new User(4L, "趙六", "男", 32)) ;


  public List<User> queryUsers() {
    sleep(2000);
    return DATAS ;
  }
  public User queryById(Long id) {
    sleep(1000);
    return DATAS.stream().filter(user -> user.getId() == id).findFirst().orElse(null) ;
  }
  
  private void sleep(int time) {
    // 模擬耗時
    try {
      TimeUnit.MILLISECONDS.sleep(new Random().nextInt(time)) ;
    } catch (InterruptedException e) {}
  }
}

Controller接口

@Monitor(tags = {"UserController", "list"})
@GetMapping("")
public List<User> list() {
  return this.userService.queryUsers() ;
}


@Monitor(tags = {"UserController", "ById"})
@GetMapping("/{id}")
public User queryById(@PathVariable Long id) {
  return this.userService.queryById(id) ;
}

注意:這里的注解屬性tags必須是偶數,因為內部會通過提供的字符串tag組裝成Tag對象,而Tag對象需要Key/Value。

以上是所需的所有代碼,接下來進行測試。

分別訪問上面的兩個接口。

圖片圖片

圖片圖片

分別多次訪問上面的接口,通過/ac/metrics/myapp.api.timer查看指標信息。

圖片圖片

通過Prometheus查看圖形走勢。

圖片圖片


通過圖表方式,查看到每個接口在不同時刻的請求耗時情況。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2024-07-04 11:33:33

2024-09-05 09:38:55

SpringActuator應用程序

2024-08-02 08:38:20

Controller接口地址

2025-01-08 09:35:55

Spring性能監控

2017-03-02 13:31:02

監控系統

2024-10-05 00:00:05

高性能分布式IM

2024-12-03 09:45:34

2024-06-13 08:19:08

Controller接口參數

2024-09-06 07:55:42

2022-05-23 13:44:53

前端開發優化

2025-02-03 09:00:00

API接口性能

2023-08-02 08:14:33

監控MTS性能

2023-03-01 09:07:44

前端監控異常

2019-04-08 16:50:33

前端性能監控

2015-12-11 11:39:15

.net代碼

2015-12-11 11:49:19

java

2015-03-11 10:01:37

CDN

2011-04-07 09:56:53

SQL Server 內存

2013-02-22 09:49:29

Nagios監控性能評測

2021-09-11 21:02:24

監控Sentry Web性能
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美激情精品久久久久久免费 | 国内精品视频在线 | 国产91亚洲精品一区二区三区 | 国产日韩欧美另类 | 国产欧美一区二区三区国产幕精品 | 午夜一区二区三区在线观看 | 日韩欧美一级片 | 国产成人精品网站 | 国产精品美女www爽爽爽 | 成人亚洲性情网站www在线观看 | 伊人网站在线 | 中日字幕大片在线播放 | 草比网站 | 国产乱码精品一区二区三区中文 | 欧美一级二级视频 | 日韩美女一区二区三区在线观看 | 免费成人高清在线视频 | 天天爽夜夜爽精品视频婷婷 | 精品成人一区 | 91精品国产色综合久久不卡蜜臀 | 久久久www成人免费无遮挡大片 | 成人影院一区二区三区 | 成人亚洲综合 | 欧美久久久久 | 亚洲欧美一区二区三区情侣bbw | 欧美黄色片 | 天堂一区二区三区 | 一区二区日本 | 国产一区二区三区高清 | 老头搡老女人毛片视频在线看 | 日韩国产一区二区 | 色婷婷av一区二区三区软件 | 日韩国产中文字幕 | 国产美女自拍视频 | 中文字幕在线视频网站 | 欧美第一区 | 国产在线观看av | 国产一区在线免费观看视频 | 成人网在线观看 | 色播99 | 亚洲精品免费观看 |