日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring Boot Actuator監控的簡單使用方法示例代碼詳解

瀏覽:144日期:2023-09-01 13:53:00

Spring Boot Actuator幫助我們實現了許多中間件比如mysql、es、redis、mq等中間件的健康指示器。通過 Spring Boot 的自動配置,這些指示器會自動生效。當這些組件有問題的時候,HealthIndicator 會返回 DOWN 或 OUT_OF_SERVICE 狀態,health 端點 HTTP 響應狀態碼也會變為 503,我們可以以此來配置程序健康狀態監控報警。使用步驟也非常簡單,這里演示的是線程池的監控。模擬線程池滿了狀態下將HealthInicator指示器變為Down的狀態。

pom中引入jar

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

引入properties配置

spring.application.name=boot# server.servlet.context-path=/boot# management.server.servlet.context-path=/boot# JVM (Micrometer)要求給應用設置commonTagmanagement.metrics.tags.application=${spring.application.name}#去掉重復的metricsspring.metrics.servo.enabled=falsemanagement.endpoint.metrics.enabled=truemanagement.endpoint.metrics.sensitive=false#顯式配置不需要權限驗證對外開放的端點management.endpoints.web.exposure.include=*management.endpoints.jmx.exposure.include=*management.endpoint.health.show-details=always#Actuator 的 Web 訪問方式的根地址為 /actuator,可以通過 management.endpoints.web.base-path 參數進行修改management.endpoints.web.base-path=/actuatormanagement.metrics.export.prometheus.enabled=true

代碼

/** * @Author jeffSmile * @Date 下午 6:10 2020/5/24 0024 * @Description 定義一個接口,來把耗時很長的任務提交到這個 demoThreadPool 線程池,以模擬線程池隊列滿的情況 **/ @GetMapping('slowTask') public void slowTask() { ThreadPoolProvider.getDemoThreadPool().execute(() -> { try { TimeUnit.HOURS.sleep(1); } catch (InterruptedException e) { } }); }

package com.mongo.boot.service;import jodd.util.concurrent.ThreadFactoryBuilder;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class ThreadPoolProvider { //一個工作線程的線程池,隊列長度10 private static ThreadPoolExecutor demoThreadPool = new ThreadPoolExecutor( 1, 1, 2, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10), new ThreadFactoryBuilder().setNameFormat('demo-threadpool-%d').get()); //核心線程數10,最大線程數50的線程池,隊列長度50 private static ThreadPoolExecutor ioThreadPool = new ThreadPoolExecutor( 10, 50, 2, TimeUnit.SECONDS, new ArrayBlockingQueue<>(100), new ThreadFactoryBuilder().setNameFormat('io-threadpool-%d').get()); public static ThreadPoolExecutor getDemoThreadPool() { return demoThreadPool; } public static ThreadPoolExecutor getIOThreadPool() { return ioThreadPool; }}

package com.mongo.boot.service;import org.springframework.boot.actuate.health.Health;import org.springframework.boot.actuate.health.HealthIndicator;import java.util.HashMap;import java.util.Map;import java.util.concurrent.ThreadPoolExecutor;/** * @Author jeffSmile * @Date 下午 6:12 2020/5/24 0024 * @Description 自定義的 HealthIndicator 類,用于單一線程池的健康狀態 **/public class ThreadPoolHealthIndicator implements HealthIndicator { private ThreadPoolExecutor threadPool; public ThreadPoolHealthIndicator(ThreadPoolExecutor threadPool) { this.threadPool = threadPool; } @Override public Health health() { //補充信息 Map<String, Integer> detail = new HashMap<>(); //隊列當前元素個數 detail.put('queue_size', threadPool.getQueue().size()); //隊列剩余容量 detail.put('queue_remaining', threadPool.getQueue().remainingCapacity()); //如果還有剩余量則返回UP,否則返回DOWN if (threadPool.getQueue().remainingCapacity() > 0) { return Health.up().withDetails(detail).build(); } else { return Health.down().withDetails(detail).build(); } }}

package com.mongo.boot.service;import org.springframework.boot.actuate.health.CompositeHealthContributor;import org.springframework.boot.actuate.health.HealthContributor;import org.springframework.boot.actuate.health.NamedContributor;import org.springframework.stereotype.Component;import java.util.HashMap;import java.util.Iterator;import java.util.Map;/*** * @Author jeffSmile * @Date 下午 6:13 2020/5/24 0024 * @Description 定義一個 CompositeHealthContributor,來聚合兩個 ThreadPoolHealthIndicator 的實例, * 分別對應 ThreadPoolProvider 中定義的兩個線程池 **/@Componentpublic class ThreadPoolsHealthContributor implements CompositeHealthContributor { //保存所有的子HealthContributor private Map<String, HealthContributor> contributors = new HashMap<>(); ThreadPoolsHealthContributor() { //對應ThreadPoolProvider中定義的兩個線程池 this.contributors.put('demoThreadPool', new ThreadPoolHealthIndicator(ThreadPoolProvider.getDemoThreadPool())); this.contributors.put('ioThreadPool', new ThreadPoolHealthIndicator(ThreadPoolProvider.getIOThreadPool())); } @Override public HealthContributor getContributor(String name) { //根據name找到某一個HealthContributor return contributors.get(name); } @Override public Iterator<NamedContributor<HealthContributor>> iterator() { //返回NamedContributor的迭代器,NamedContributor也就是Contributor實例+一個命名 return contributors.entrySet().stream() .map((entry) -> NamedContributor.of(entry.getKey(), entry.getValue())).iterator(); }}

啟動springboot驗證

這里我訪問:http://localhost:8080/slowTask

Spring Boot Actuator監控的簡單使用方法示例代碼詳解

每次訪問都向demo線程池中提交一個耗時1小時的任務,而demo線程池的核心和最大線程數都是1,隊列長度為10,那么當訪問11次之后,任務將被直接拒絕掉!

Spring Boot Actuator監控的簡單使用方法示例代碼詳解Spring Boot Actuator監控的簡單使用方法示例代碼詳解

此時訪問:http://localhost:8080/actuator/health

Spring Boot Actuator監控的簡單使用方法示例代碼詳解

demo線程池隊列已經滿了,狀態變為DOWN。

Spring Boot Actuator監控的簡單使用方法示例代碼詳解

監控內部重要組件的狀態數據

通過 Actuator 的 InfoContributor 功能,對外暴露程序內部重要組件的狀態數據!實現一個 ThreadPoolInfoContributor 來展現線程池的信息:

package com.mongo.boot.config;import com.mongo.boot.service.ThreadPoolProvider;import org.springframework.boot.actuate.info.Info;import org.springframework.boot.actuate.info.InfoContributor;import org.springframework.stereotype.Component;import java.util.HashMap;import java.util.Map;import java.util.concurrent.ThreadPoolExecutor;/** * @Author jeffSmile * @Date 下午 6:37 2020/5/24 0024 * @Description 通過 Actuator 的 InfoContributor 功能,對外暴露程序內部重要組件的狀態數據 **/@Componentpublic class ThreadPoolInfoContributor implements InfoContributor { private static Map threadPoolInfo(ThreadPoolExecutor threadPool) { Map<String, Object> info = new HashMap<>(); info.put('poolSize', threadPool.getPoolSize());//當前池大小 info.put('corePoolSize', threadPool.getCorePoolSize());//設置的核心池大小 info.put('largestPoolSize', threadPool.getLargestPoolSize());//最大達到過的池大小 info.put('maximumPoolSize', threadPool.getMaximumPoolSize());//設置的最大池大小 info.put('completedTaskCount', threadPool.getCompletedTaskCount());//總完成任務數 return info; } @Override public void contribute(Info.Builder builder) { builder.withDetail('demoThreadPool', threadPoolInfo(ThreadPoolProvider.getDemoThreadPool())); builder.withDetail('ioThreadPool', threadPoolInfo(ThreadPoolProvider.getIOThreadPool())); }}

直接訪問http://localhost:8080/actuator/info

Spring Boot Actuator監控的簡單使用方法示例代碼詳解

如果開啟jmx,還可以使用jconsole來查看線程池的狀態信息:

#開啟 JMXspring.jmx.enabled=true

打開jconcole界面之后,進入MBean這個tab,可以在EndPoint下的Info操作這里看到我們的Bean信息。

Spring Boot Actuator監控的簡單使用方法示例代碼詳解

不過,除了jconsole之外,我們可以把JMX協議轉為http協議,這里引入jolokia:

<dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId></dependency>

重啟后訪問:http://localhost:8080/actuator/jolokia/exec/org.springframework.boot:type=Endpoint,name=Info/info

Spring Boot Actuator監控的簡單使用方法示例代碼詳解

監控延伸

通過Micrometer+promethues+grafana的組合也可以進行一些生產級別的實踐。

到此這篇關于Spring Boot Actuator監控的簡單使用的文章就介紹到這了,更多相關Spring Boot Actuator監控內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品中文字幕一区二区| 欧美精品一二| 欧美另类专区| 在线视频免费在线观看一区二区| 欧美激情另类| 亚洲欧美一区在线| 亚洲一区久久| 日韩欧美2区| 国产精品密蕾丝视频下载| 欧美激情日韩| 欧美+日本+国产+在线a∨观看| 99在线观看免费视频精品观看| 亚洲一级在线| 日本一区二区中文字幕| 国产欧美高清视频在线| 91免费精品| 图片区亚洲欧美小说区| 欧美中文日韩| 国产乱码精品| 国产极品久久久久久久久波多结野| 欧美精品二区| 久久精品国语| 日韩精品一级中文字幕精品视频免费观看| 亚洲18在线| 成人污污视频| 亚洲综合欧美| 国产精品传媒麻豆hd| 久久久一本精品| 亚洲精品影视| 国产一区二区三区网| 欧美va天堂在线| 欧美日一区二区在线观看| 老司机精品视频在线播放| 久久精品观看| 日韩欧美中文在线观看| 精品视频在线你懂得| 欧美国产91| 国产激情精品一区二区三区| 日韩欧美午夜| 一区二区三区四区精品视频| 国产精品sss在线观看av| 99久久精品费精品国产| 久久国产精品免费精品3p | 国产精品久久久久毛片大屁完整版| 久久av免费| re久久精品视频| 日本欧美大码aⅴ在线播放| 日韩成人免费| 日韩综合小视频| 久久久久99| 国产精品亚洲欧美一级在线| 亚洲激情不卡| 国产不卡人人| 人人爱人人干婷婷丁香亚洲| 精品久久久久中文字幕小说| 亚洲永久精品唐人导航网址| 久久久久免费av| 国产精品久久久久毛片大屁完整版| 一区二区视频欧美| 日韩不卡在线| 麻豆高清免费国产一区| 三级久久三级久久久| 日本精品不卡| 97精品国产| 国产精品亲子伦av一区二区三区| 视频一区中文字幕国产| 精品一区在线| 久久久亚洲一区| 国产传媒在线观看| 精品视频免费| 久久一区亚洲| 国产精品115| 国产日韩欧美中文在线| 日韩一区二区三区高清在线观看| 日韩视频在线一区二区三区 | 久久精品三级| 国产欧美日本| 国产精品综合| 91成人在线| 香蕉成人久久| av高清一区| 日韩精品电影一区亚洲| 首页国产欧美日韩丝袜| 久久蜜桃精品| 精精国产xxxx视频在线野外| 捆绑调教美女网站视频一区| 亚洲免费激情| 成人福利av| 国产亚洲一区| 91福利精品在线观看| 中文字幕乱码亚洲无线精品一区| 亚洲国产一区二区在线观看 | 麻豆精品视频在线观看视频| 亚洲无线观看| 欧美日韩国产高清| 日韩久久精品| 99久久久久国产精品| 国产精品国码视频| 国产精品一区二区三区美女| 日韩精品视频在线看| 日韩欧美中文字幕电影| 亚洲在线成人| 日韩精品一区二区三区免费视频| 尹人成人综合网| 好吊日精品视频| 欧美亚洲激情| 国产亚洲亚洲| av不卡在线看| 日本亚洲欧洲无免费码在线| 免费观看日韩电影| 青草久久视频| 国产亚洲精品精品国产亚洲综合| 欧美日韩中文| 国产情侣久久| 日本黄色精品| 国产精品亚洲一区二区三区在线观看| 国产伊人精品| 亚洲精品网址| 欧美影院精品| 老牛国内精品亚洲成av人片 | 特黄毛片在线观看| 久久精品毛片| 久久在线电影| 在线日韩欧美| 亚洲一区二区三区无吗| 欧美资源在线| 国产精品一线| 久久亚洲资源中文字| 伊人久久大香线蕉av不卡| 欧美日韩一区二区综合| 日韩一区欧美二区| 亚洲1区在线观看| 九九99久久精品在免费线bt| av资源新版天堂在线| 在线亚洲成人| 日韩精品久久久久久久软件91| 精品视频国内| www成人在线视频| 亚洲久久在线| 国产亚洲电影| 欧美日韩国产免费观看| 日韩毛片网站| 91精品xxx在线观看| 亚洲黄页一区| 国产一区调教| 黑丝一区二区| 精品高清久久| 婷婷亚洲五月| 欧美a一区二区| 99久久久久| 欧美日韩夜夜| 久久精选视频| 国产精品扒开腿做爽爽爽软件| 日韩精品a在线观看91| 日韩欧美视频专区| 久久久五月天| 国产精品调教| 国产精品视频一区二区三区四蜜臂| 欧美一区久久久| 久久电影tv| 久久国产麻豆精品| 欧美日韩精品一本二本三本| 欧美伊人久久| 999久久久精品国产| 免费黄网站欧美| 久久久久久久久99精品大| 亚洲精品免费观看| 欧美va天堂| 日韩一区二区三区精品视频第3页| 欧美日韩精品免费观看视完整| 亚洲一区二区三区久久久| 国产综合色区在线观看| 日韩在线成人| 国产精品毛片一区二区三区| 国产精品日韩精品中文字幕| 在线国产精品一区| 国产精品xx| 欧美激情在线精品一区二区三区| 99热国内精品| 久久久久久婷| 日本99精品| 亚洲婷婷丁香| 色婷婷精品视频| 捆绑调教美女网站视频一区| 亚洲女人av| 欧美日韩国产在线一区| 国内不卡的一区二区三区中文字幕| 91九色综合| 中文一区在线| 天堂网在线观看国产精品| 久久激情五月婷婷| 亚洲开心激情| 欧美一区影院| 中文无码日韩欧| 999在线观看精品免费不卡网站| 久久91视频| 精品99久久| 欧美中文高清| 欧美亚洲二区| 99国产精品视频免费观看一公开|