当前位置:首页 > 科技  > 软件

SpringBoot自带Controller接口监控,赶紧用起来

来源: 责编: 时间:2024-07-05 09:05:34 1145观看
导读环境:SpringBoot2.7.181. 简介项目中监控记录接口请求的相关信息是一个至关重要的环节,它对于提升系统稳定性、优化性能、快速定位问题以及保障数据安全等方面都起着至关重要的作用。大致可概况如下几方面:问题追踪与定

环境:SpringBoot2.7.18og028资讯网——每日最新资讯28at.com

1. 简介

项目中监控记录接口请求的相关信息是一个至关重要的环节,它对于提升系统稳定性、优化性能、快速定位问题以及保障数据安全等方面都起着至关重要的作用。大致可概况如下几方面:og028资讯网——每日最新资讯28at.com

问题追踪与定位:当系统出现错误或异常时,通过查看接口调用的请求信息,可以快速定位问题发生的源头。比如,通过查看请求参数、响应状态码、执行时间等og028资讯网——每日最新资讯28at.com

性能优化:监控接口请求的处理时间、响应时间性能指标,可以帮助开发团队了解系统的瓶颈所在,从而进行相应的优化。og028资讯网——每日最新资讯28at.com

用户行为分析:通过记录用户的请求信息,包括请求频率、请求时间、请求参数等,可以对用户行为进行分析,了解用户的使用习惯和需求,从而优化产品功能和用户体验。og028资讯网——每日最新资讯28at.com

安全审计:记录接口请求信息也是安全审计的一部分。通过监控和分析请求数据,可以发现潜在的安全威胁,如恶意请求、SQL注入、跨站脚本攻击等og028资讯网——每日最新资讯28at.com

在SpringBoot中我们可通过Actuator来实现对Http接口进行监控记录,接下来我们通过实操来演示如何通过Actuator来监控记录我们的即可。og028资讯网——每日最新资讯28at.com

2. 实战案例

2.1 引入依赖&配置

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-actuator</artifactId></dependency>

要使用Actuator的http接口监控功能,你还需要注册一个HttpTraceRepository类型的Bean,Actuator默认提供的是基于内存的实现og028资讯网——每日最新资讯28at.com

@Configurationpublic class HttpActuatorConfig {    @Bean  InMemoryHttpTraceRepository inMemoryHttpTraceRepository() {    return new InMemoryHttpTraceRepository() ;  }}

默认情况下,Actuator只开启了health接口(健康检查),我们还需要手动开启httptrace接口。og028资讯网——每日最新资讯28at.com

management:  endpoints:    web:      exposure:        include: httptrace

以上配置后,可以通过/actuator接口查看是否开启了httptrace接口og028资讯网——每日最新资讯28at.com

成功开启成功开启og028资讯网——每日最新资讯28at.com

2.2 测试接口

编写几个测试用的接口

@RestController@RequestMapping("/users")public class UserController {    private static List<User> DATAS = new ArrayList<>() ;  static {    DATAS.add(new User(1L, "张三", 22)) ;    DATAS.add(new User(2L, "李四", 32)) ;    DATAS.add(new User(3L, "王五", 33)) ;    DATAS.add(new User(4L, "赵六", 26)) ;    DATAS.add(new User(5L, "田七", 29)) ;    DATAS.add(new User(6L, "嘿哈", 44)) ;  }  @PostMapping("")  public ResponseEntity<Void> save(@RequestBody User user) {    DATAS.add(user) ;    return ResponseEntity.created(URI.create(String.format("/users/%s", user.getId()))).build() ;  }  @DeleteMapping("/{id}")  public ResponseEntity<Void> delete(@PathVariable("id") Long id) {    DATAS.removeIf(user -> user.getId() == id) ;    return ResponseEntity.noContent().build() ;  }  @PutMapping("")  public ResponseEntity<Void> update(@RequestBody User user) {    DATAS.stream()      .filter(u -> u.getId() == user.getId())      .findFirst()      .ifPresent(u -> {        u.setAge(user.getAge()) ;        u.setName(u.getName()) ;      });    return ResponseEntity.noContent().build() ;  }  @GetMapping("")  public ResponseEntity<List<User>> list() {    return ResponseEntity.ok(DATAS) ;  }  @GetMapping("/{id}")  public ResponseEntity<User> get(@PathVariable("id") Long id) {    return ResponseEntity.ok(DATAS.stream()            .filter(u -> u.getId() == id)            .findFirst().orElse(null)          ) ;  }  // 测试异常情况  @GetMapping("/exception")  public ResponseEntity<Void> exce() {    System.out.println(1 / 0) ;    return ResponseEntity.noContent().build() ;  }}

为了简单,上面操作都是基于内存数据进行。包括了CRUD及异常情况。og028资讯网——每日最新资讯28at.com

2.3 记录接口访问情况

访问上面定义的任意接口之后通过/actuator/httptrace接口查看访问情况og028资讯网——每日最新资讯28at.com

图片图片og028资讯网——每日最新资讯28at.com

每个接口会详细的记录请求的URL,header,响应状态码及header信息。上图中的timeTaken属性记录的是该接口请求的耗时情况(单位:毫秒)。og028资讯网——每日最新资讯28at.com

通过以上的示例演示,使用Actuator监控接口还是非常简单的,你只需要做简单的配置即可,接下来继续介绍更多的配置及使用。og028资讯网——每日最新资讯28at.com

2.4 自定义记录信息

要自定义记录的信息,可以通过如下配置og028资讯网——每日最新资讯28at.com

management:  trace:    http:      include:      - time-taken      - response-headers

注:在SpringBoot3以上的版本这里的配置发生了变化使用的是如下配置:og028资讯网——每日最新资讯28at.com

management:  httpexchanges:    recording:      include:      - time-taken

通过上面的配置后,再次访问接口og028资讯网——每日最新资讯28at.com

图片图片og028资讯网——每日最新资讯28at.com

此时,将不再包含请求headers。还支持如下的配置:og028资讯网——每日最新资讯28at.com

图片图片og028资讯网——每日最新资讯28at.com

2.5 手动获取请求响应信息

在项目中你可以通过 HttpTraceRepository 获取所有请求中的请求-响应交换信息。如下示例,获取所有错误的请求(状态码为500)。og028资讯网——每日最新资讯28at.com

private final HttpTraceRepository httpTraceRepository ;public HttpController(HttpTraceRepository httpTraceRepository) {  this.httpTraceRepository = httpTraceRepository ;}@GetMapping("/{status}")public Object info(@PathVariable("status") Integer status) {  return httpTraceRepository.findAll()          .stream()          .filter(trace -> trace.getResponse().getStatus() == status)          .collect(Collectors.toList()) ;}

通过上面的接口,我们可以过滤指定状态码的请求信息。og028资讯网——每日最新资讯28at.com

2.6 自定义存储方式

InMemoryHttpExchangeRepository,默认情况下,它会存储最近 100 次请求-响应信息,并且是内存级的。所以如果你需要在生产环境下使用还是建议你自定义HttpTraceRepository实现,将信息存入到Redis或者是ES中。如下存入Redis示例og028资讯网——每日最新资讯28at.com

@Componentpublic class PackHttpTraceRepository implements HttpTraceRepository {  private static final String HTTP_TRACE_KEY = "http_request_response" ;    private final StringRedisTemplate stringRedisTemplate ;  public PackHttpTraceRepository(StringRedisTemplate stringRedisTemplate) {    this.stringRedisTemplate = stringRedisTemplate ;  }    @Override  public List<HttpTrace> findAll() {    return this.stringRedisTemplate.opsForList().range(HTTP_TRACE_KEY, 0, -1).stream().map(json -> {      try {        return objectMapper.readValue(json, HttpTrace.class);      }    }).collect(Collectors.toList()) ;  }  @Override  public void add(HttpTrace trace) {    String json = null ;    try {      json = objectMapper.writeValueAsString(trace) ;    }    this.stringRedisTemplate.opsForList().leftPush(HTTP_TRACE_KEY, json) ;  }}

这样我们就可以持久化存储数据了,你还可以根据当前日期来进行存储。og028资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-98864-0.htmlSpringBoot自带Controller接口监控,赶紧用起来

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 你知道缓存的这个问题到底把多少程序员坑惨了吗?

下一篇: 10 款炫酷的前端 CSS 加载器和进度条动画

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 分享六款相见恨晚的PPT模版网站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS网站旨在为全球Office用户提供丰富的高品质原创PPT模板、实用文档、数据图表及个性化定制服务。优点:OfficePLUS是微软官方网站,囊括PPT模板、Word模
  • 在线图片编辑器,支持PSD解析、AI抠图等

    自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    7月14日消息,今日一名博主在社交媒体发布了一张疑似小米汽车电池信息的照片,显示该电池包正是宁德时代麒麟电池,容量为101kWh,电压为726.7V,可以预测小
  • 信通院:小米、华为等11家应用商店基本完成APP签名及验签工作

    中国信通院表示,目前,小米、华为、OPPO、vivo、360手机助手、百度手机助手、应用宝、豌豆荚和努比亚等9家应用商店,以及抖音和快手2家新型应用分发平
Top