日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

SpringBoot自帶Controller接口監(jiān)控,趕緊用起來(lái)

來(lái)源: 責(zé)編: 時(shí)間:2024-07-05 09:05:34 1135觀看
導(dǎo)讀環(huán)境:SpringBoot2.7.181. 簡(jiǎn)介項(xiàng)目中監(jiān)控記錄接口請(qǐng)求的相關(guān)信息是一個(gè)至關(guān)重要的環(huán)節(jié),它對(duì)于提升系統(tǒng)穩(wěn)定性、優(yōu)化性能、快速定位問(wèn)題以及保障數(shù)據(jù)安全等方面都起著至關(guān)重要的作用。大致可概況如下幾方面:?jiǎn)栴}追蹤與定

環(huán)境:SpringBoot2.7.1870U28資訊網(wǎng)——每日最新資訊28at.com

1. 簡(jiǎn)介

項(xiàng)目中監(jiān)控記錄接口請(qǐng)求的相關(guān)信息是一個(gè)至關(guān)重要的環(huán)節(jié),它對(duì)于提升系統(tǒng)穩(wěn)定性、優(yōu)化性能、快速定位問(wèn)題以及保障數(shù)據(jù)安全等方面都起著至關(guān)重要的作用。大致可概況如下幾方面:70U28資訊網(wǎng)——每日最新資訊28at.com

問(wèn)題追蹤與定位:當(dāng)系統(tǒng)出現(xiàn)錯(cuò)誤或異常時(shí),通過(guò)查看接口調(diào)用的請(qǐng)求信息,可以快速定位問(wèn)題發(fā)生的源頭。比如,通過(guò)查看請(qǐng)求參數(shù)、響應(yīng)狀態(tài)碼、執(zhí)行時(shí)間等70U28資訊網(wǎng)——每日最新資訊28at.com

性能優(yōu)化:監(jiān)控接口請(qǐng)求的處理時(shí)間、響應(yīng)時(shí)間性能指標(biāo),可以幫助開(kāi)發(fā)團(tuán)隊(duì)了解系統(tǒng)的瓶頸所在,從而進(jìn)行相應(yīng)的優(yōu)化。70U28資訊網(wǎng)——每日最新資訊28at.com

用戶行為分析:通過(guò)記錄用戶的請(qǐng)求信息,包括請(qǐng)求頻率、請(qǐng)求時(shí)間、請(qǐng)求參數(shù)等,可以對(duì)用戶行為進(jìn)行分析,了解用戶的使用習(xí)慣和需求,從而優(yōu)化產(chǎn)品功能和用戶體驗(yàn)。70U28資訊網(wǎng)——每日最新資訊28at.com

安全審計(jì):記錄接口請(qǐng)求信息也是安全審計(jì)的一部分。通過(guò)監(jiān)控和分析請(qǐng)求數(shù)據(jù),可以發(fā)現(xiàn)潛在的安全威脅,如惡意請(qǐng)求、SQL注入、跨站腳本攻擊等70U28資訊網(wǎng)——每日最新資訊28at.com

在SpringBoot中我們可通過(guò)Actuator來(lái)實(shí)現(xiàn)對(duì)Http接口進(jìn)行監(jiān)控記錄,接下來(lái)我們通過(guò)實(shí)操來(lái)演示如何通過(guò)Actuator來(lái)監(jiān)控記錄我們的即可。70U28資訊網(wǎng)——每日最新資訊28at.com

2. 實(shí)戰(zhàn)案例

2.1 引入依賴&配置

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

要使用Actuator的http接口監(jiān)控功能,你還需要注冊(cè)一個(gè)HttpTraceRepository類型的Bean,Actuator默認(rèn)提供的是基于內(nèi)存的實(shí)現(xiàn)70U28資訊網(wǎng)——每日最新資訊28at.com

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

默認(rèn)情況下,Actuator只開(kāi)啟了health接口(健康檢查),我們還需要手動(dòng)開(kāi)啟httptrace接口。70U28資訊網(wǎng)——每日最新資訊28at.com

management:  endpoints:    web:      exposure:        include: httptrace

以上配置后,可以通過(guò)/actuator接口查看是否開(kāi)啟了httptrace接口70U28資訊網(wǎng)——每日最新資訊28at.com

成功開(kāi)啟成功開(kāi)啟70U28資訊網(wǎng)——每日最新資訊28at.com

2.2 測(cè)試接口

編寫幾個(gè)測(cè)試用的接口

@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)          ) ;  }  // 測(cè)試異常情況  @GetMapping("/exception")  public ResponseEntity<Void> exce() {    System.out.println(1 / 0) ;    return ResponseEntity.noContent().build() ;  }}

為了簡(jiǎn)單,上面操作都是基于內(nèi)存數(shù)據(jù)進(jìn)行。包括了CRUD及異常情況。70U28資訊網(wǎng)——每日最新資訊28at.com

2.3 記錄接口訪問(wèn)情況

訪問(wèn)上面定義的任意接口之后通過(guò)/actuator/httptrace接口查看訪問(wèn)情況70U28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片70U28資訊網(wǎng)——每日最新資訊28at.com

每個(gè)接口會(huì)詳細(xì)的記錄請(qǐng)求的URL,header,響應(yīng)狀態(tài)碼及header信息。上圖中的timeTaken屬性記錄的是該接口請(qǐng)求的耗時(shí)情況(單位:毫秒)。70U28資訊網(wǎng)——每日最新資訊28at.com

通過(guò)以上的示例演示,使用Actuator監(jiān)控接口還是非常簡(jiǎn)單的,你只需要做簡(jiǎn)單的配置即可,接下來(lái)繼續(xù)介紹更多的配置及使用。70U28資訊網(wǎng)——每日最新資訊28at.com

2.4 自定義記錄信息

要自定義記錄的信息,可以通過(guò)如下配置70U28資訊網(wǎng)——每日最新資訊28at.com

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

注:在SpringBoot3以上的版本這里的配置發(fā)生了變化使用的是如下配置:70U28資訊網(wǎng)——每日最新資訊28at.com

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

通過(guò)上面的配置后,再次訪問(wèn)接口70U28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片70U28資訊網(wǎng)——每日最新資訊28at.com

此時(shí),將不再包含請(qǐng)求headers。還支持如下的配置:70U28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片70U28資訊網(wǎng)——每日最新資訊28at.com

2.5 手動(dòng)獲取請(qǐng)求響應(yīng)信息

在項(xiàng)目中你可以通過(guò) HttpTraceRepository 獲取所有請(qǐng)求中的請(qǐng)求-響應(yīng)交換信息。如下示例,獲取所有錯(cuò)誤的請(qǐng)求(狀態(tài)碼為500)。70U28資訊網(wǎng)——每日最新資訊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()) ;}

通過(guò)上面的接口,我們可以過(guò)濾指定狀態(tài)碼的請(qǐng)求信息。70U28資訊網(wǎng)——每日最新資訊28at.com

2.6 自定義存儲(chǔ)方式

InMemoryHttpExchangeRepository,默認(rèn)情況下,它會(huì)存儲(chǔ)最近 100 次請(qǐng)求-響應(yīng)信息,并且是內(nèi)存級(jí)的。所以如果你需要在生產(chǎn)環(huán)境下使用還是建議你自定義HttpTraceRepository實(shí)現(xiàn),將信息存入到Redis或者是ES中。如下存入Redis示例70U28資訊網(wǎng)——每日最新資訊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) ;  }}

這樣我們就可以持久化存儲(chǔ)數(shù)據(jù)了,你還可以根據(jù)當(dāng)前日期來(lái)進(jìn)行存儲(chǔ)。70U28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-98864-0.htmlSpringBoot自帶Controller接口監(jiān)控,趕緊用起來(lái)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 你知道緩存的這個(gè)問(wèn)題到底把多少程序員坑慘了嗎?

下一篇: 10 款炫酷的前端 CSS 加載器和進(jìn)度條動(dòng)畫

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品一区二区久久久| 久久亚洲美女| 亚洲精品国产精品久久清纯直播| 亚洲国产精品久久久久| 91久久久国产精品| 一本一本久久a久久精品牛牛影视| 亚洲一区二区三区免费观看| 亚洲欧美日韩网| 久久久久高清| 欧美日韩精品在线观看| 国产欧美三级| 在线电影国产精品| 9国产精品视频| 小黄鸭精品aⅴ导航网站入口| 久久欧美中文字幕| 欧美日韩午夜剧场| 国产私拍一区| 日韩午夜激情| 欧美一区二区成人| 欧美国产另类| 国产欧美在线观看| 亚洲人久久久| 香蕉成人伊视频在线观看| 女生裸体视频一区二区三区| 国产精品s色| 亚洲高清自拍| 亚洲欧美一区二区视频| 欧美激情视频在线免费观看 欧美视频免费一 | 羞羞漫画18久久大片| 欧美aⅴ一区二区三区视频| 欧美视频在线观看免费| 一色屋精品视频在线看| 亚洲网站在线看| 免费短视频成人日韩| 国产精品久久久久久久久久久久 | 香蕉久久夜色精品国产| 欧美aaa级| 国产视频精品网| 99热在这里有精品免费| 鲁鲁狠狠狠7777一区二区| 国产欧美精品一区二区三区介绍| 亚洲人成7777| 久久亚洲电影| 国产一区二区三区直播精品电影| 宅男噜噜噜66一区二区| 久久综合色婷婷| 国产视频观看一区| 亚洲一区二区免费看| 欧美福利视频网站| 黄色在线成人| 欧美资源在线| 国产精品视频网| 中文在线不卡视频| 欧美日本韩国一区| 亚洲国产色一区| 久久夜色精品国产亚洲aⅴ| 国产丝袜美腿一区二区三区| 亚洲一区免费在线观看| 欧美日韩一区二区三区在线看 | 欧美日韩在线视频首页| 亚洲国产美女| 裸体女人亚洲精品一区| 黄色成人片子| 久久久久91| 国产一区91| 久久成人久久爱| 国产婷婷精品| 久久www免费人成看片高清 | 中文在线资源观看网站视频免费不卡 | 欧美亚洲综合另类| 国产精品乱码一区二三区小蝌蚪| 99精品久久免费看蜜臀剧情介绍| 欧美二区在线看| 91久久精品一区二区别| 欧美 日韩 国产在线| 在线精品高清中文字幕| 久久中文字幕导航| 亚洲承认在线| 欧美超级免费视 在线| 在线播放中文一区| 麻豆国产精品一区二区三区| 在线不卡中文字幕播放| 六月婷婷一区| 亚洲国产精品成人精品| 麻豆精品在线观看| 亚洲国产精品尤物yw在线观看| 麻豆成人在线观看| 亚洲三级影院| 欧美日韩国内自拍| 一区二区三区久久久| 欧美三级精品| 亚洲欧美日韩另类| 国产亚洲一区二区在线观看 | 久久天堂成人| 亚洲黄色三级| 欧美日韩综合在线| 午夜日韩视频| 狠狠色丁香久久婷婷综合丁香| 久久视频在线视频| 亚洲欧洲一区二区三区久久| 欧美精品在线一区| 中文精品视频| 国产午夜精品一区二区三区视频 | 国产精品伦理| 久久狠狠亚洲综合| 亚洲国产成人在线播放| 欧美激情一区二区三区成人| 一区二区三区导航| 国产精品永久免费观看| 久久久国产一区二区| 亚洲福利视频专区| 欧美日韩成人网| 亚洲欧美在线aaa| 伊人婷婷欧美激情| 欧美日韩成人激情| 性欧美18~19sex高清播放| 国内精品视频在线观看| 欧美电影在线播放| 亚洲免费婷婷| 一区二区三区在线视频免费观看 | 蜜桃久久av一区| 亚洲视频一区二区在线观看| 国产三区精品| 欧美激情五月| 午夜久久久久久久久久一区二区| 一区二区三区在线高清| 欧美日韩一区二区三区| 欧美在线高清视频| 亚洲精品美女久久7777777| 国产精品久久久久久久久久久久久| 久久国内精品自在自线400部| 亚洲黄色成人久久久| 国产精品二区二区三区| 久久男人资源视频| 一本久道久久久| 国模精品一区二区三区| 欧美日韩国产探花| 久久国产一区二区三区| 艳妇臀荡乳欲伦亚洲一区| 国产一区二区三区免费在线观看| 欧美激情综合色| 欧美一区三区三区高中清蜜桃 | 欧美与黑人午夜性猛交久久久| 亚洲片在线观看| 国产日韩欧美三级| 欧美精品尤物在线| 久久精品国产一区二区电影| 一区二区免费看| 亚洲成色精品| 国产日韩欧美在线播放| 欧美美女操人视频| 久久亚洲二区| 午夜精品视频在线观看一区二区 | 蜜桃av一区二区| 欧美亚洲专区| 在线视频你懂得一区| 亚洲福利视频免费观看| 国产女主播在线一区二区| 欧美日韩国产首页在线观看| 久久婷婷亚洲| 午夜亚洲视频| 一区二区三区四区精品| 亚洲国产欧美一区二区三区丁香婷| 国产欧美一区二区在线观看| 国产精品超碰97尤物18| 欧美精品97| 毛片av中文字幕一区二区| 欧美一区二区性| 亚洲欧美日韩在线| 在线一区二区日韩| 亚洲日本在线观看| 在线观看福利一区| 国内成人在线| 国产视频欧美视频| 国产精品少妇自拍| 国产精品s色| 欧美日韩在线免费视频| 欧美—级在线免费片| 美女视频黄免费的久久| 久久免费高清视频| 久久久久久久一区二区| 欧美在线关看| 欧美有码视频| 欧美一区二区三区男人的天堂 | 亚洲国产日日夜夜| 亚洲国产精品久久久久秋霞蜜臀| 韩国一区电影| 国产一区欧美| 国产小视频国产精品| 国产欧美日韩精品在线| 国产精品婷婷| 国产精品天天摸av网| 欧美日韩专区在线| 欧美日韩天堂| 国产精品qvod| 欧美特黄a级高清免费大片a级| 欧美日本精品在线| 欧美剧在线观看| 欧美日韩成人| 国产精品av一区二区| 国产精品久久久久9999| 国产精品久久久久av免费| 国产精品国产亚洲精品看不卡15| 欧美视频在线观看 亚洲欧|