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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Spring Boot Actuator監(jiān)控的簡(jiǎn)單使用方法示例代碼詳解

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

Spring Boot Actuator幫助我們實(shí)現(xiàn)了許多中間件比如mysql、es、redis、mq等中間件的健康指示器。通過(guò) Spring Boot 的自動(dòng)配置,這些指示器會(huì)自動(dòng)生效。當(dāng)這些組件有問(wèn)題的時(shí)候,HealthIndicator 會(huì)返回 DOWN 或 OUT_OF_SERVICE 狀態(tài),health 端點(diǎn) HTTP 響應(yīng)狀態(tài)碼也會(huì)變?yōu)?503,我們可以以此來(lái)配置程序健康狀態(tài)監(jiān)控報(bào)警。使用步驟也非常簡(jiǎn)單,這里演示的是線程池的監(jiān)控。模擬線程池滿了狀態(tài)下將HealthInicator指示器變?yōu)镈own的狀態(tài)。

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)要求給應(yīng)用設(shè)置commonTagmanagement.metrics.tags.application=${spring.application.name}#去掉重復(fù)的metricsspring.metrics.servo.enabled=falsemanagement.endpoint.metrics.enabled=truemanagement.endpoint.metrics.sensitive=false#顯式配置不需要權(quán)限驗(yàn)證對(duì)外開(kāi)放的端點(diǎn)management.endpoints.web.exposure.include=*management.endpoints.jmx.exposure.include=*management.endpoint.health.show-details=always#Actuator 的 Web 訪問(wèn)方式的根地址為 /actuator,可以通過(guò) management.endpoints.web.base-path 參數(shù)進(jìn)行修改management.endpoints.web.base-path=/actuatormanagement.metrics.export.prometheus.enabled=true

代碼

/** * @Author jeffSmile * @Date 下午 6:10 2020/5/24 0024 * @Description 定義一個(gè)接口,來(lái)把耗時(shí)很長(zhǎng)的任務(wù)提交到這個(gè) demoThreadPool 線程池,以模擬線程池隊(duì)列滿的情況 **/ @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 { //一個(gè)工作線程的線程池,隊(duì)列長(zhǎng)度10 private static ThreadPoolExecutor demoThreadPool = new ThreadPoolExecutor( 1, 1, 2, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10), new ThreadFactoryBuilder().setNameFormat('demo-threadpool-%d').get()); //核心線程數(shù)10,最大線程數(shù)50的線程池,隊(duì)列長(zhǎng)度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 類,用于單一線程池的健康狀態(tài) **/public class ThreadPoolHealthIndicator implements HealthIndicator { private ThreadPoolExecutor threadPool; public ThreadPoolHealthIndicator(ThreadPoolExecutor threadPool) { this.threadPool = threadPool; } @Override public Health health() { //補(bǔ)充信息 Map<String, Integer> detail = new HashMap<>(); //隊(duì)列當(dāng)前元素個(gè)數(shù) detail.put('queue_size', threadPool.getQueue().size()); //隊(duì)列剩余容量 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 定義一個(gè) CompositeHealthContributor,來(lái)聚合兩個(gè) ThreadPoolHealthIndicator 的實(shí)例, * 分別對(duì)應(yīng) ThreadPoolProvider 中定義的兩個(gè)線程池 **/@Componentpublic class ThreadPoolsHealthContributor implements CompositeHealthContributor { //保存所有的子HealthContributor private Map<String, HealthContributor> contributors = new HashMap<>(); ThreadPoolsHealthContributor() { //對(duì)應(yīng)ThreadPoolProvider中定義的兩個(gè)線程池 this.contributors.put('demoThreadPool', new ThreadPoolHealthIndicator(ThreadPoolProvider.getDemoThreadPool())); this.contributors.put('ioThreadPool', new ThreadPoolHealthIndicator(ThreadPoolProvider.getIOThreadPool())); } @Override public HealthContributor getContributor(String name) { //根據(jù)name找到某一個(gè)HealthContributor return contributors.get(name); } @Override public Iterator<NamedContributor<HealthContributor>> iterator() { //返回NamedContributor的迭代器,NamedContributor也就是Contributor實(shí)例+一個(gè)命名 return contributors.entrySet().stream() .map((entry) -> NamedContributor.of(entry.getKey(), entry.getValue())).iterator(); }}

啟動(dòng)springboot驗(yàn)證

這里我訪問(wèn):http://localhost:8080/slowTask

Spring Boot Actuator監(jiān)控的簡(jiǎn)單使用方法示例代碼詳解

每次訪問(wèn)都向demo線程池中提交一個(gè)耗時(shí)1小時(shí)的任務(wù),而demo線程池的核心和最大線程數(shù)都是1,隊(duì)列長(zhǎng)度為10,那么當(dāng)訪問(wèn)11次之后,任務(wù)將被直接拒絕掉!

Spring Boot Actuator監(jiān)控的簡(jiǎn)單使用方法示例代碼詳解Spring Boot Actuator監(jiān)控的簡(jiǎn)單使用方法示例代碼詳解

此時(shí)訪問(wèn):http://localhost:8080/actuator/health

Spring Boot Actuator監(jiān)控的簡(jiǎn)單使用方法示例代碼詳解

demo線程池隊(duì)列已經(jīng)滿了,狀態(tài)變?yōu)镈OWN。

Spring Boot Actuator監(jiān)控的簡(jiǎn)單使用方法示例代碼詳解

監(jiān)控內(nèi)部重要組件的狀態(tài)數(shù)據(jù)

通過(guò) Actuator 的 InfoContributor 功能,對(duì)外暴露程序內(nèi)部重要組件的狀態(tài)數(shù)據(jù)!實(shí)現(xiàn)一個(gè) ThreadPoolInfoContributor 來(lái)展現(xiàn)線程池的信息:

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 通過(guò) Actuator 的 InfoContributor 功能,對(duì)外暴露程序內(nèi)部重要組件的狀態(tài)數(shù)據(jù) **/@Componentpublic class ThreadPoolInfoContributor implements InfoContributor { private static Map threadPoolInfo(ThreadPoolExecutor threadPool) { Map<String, Object> info = new HashMap<>(); info.put('poolSize', threadPool.getPoolSize());//當(dāng)前池大小 info.put('corePoolSize', threadPool.getCorePoolSize());//設(shè)置的核心池大小 info.put('largestPoolSize', threadPool.getLargestPoolSize());//最大達(dá)到過(guò)的池大小 info.put('maximumPoolSize', threadPool.getMaximumPoolSize());//設(shè)置的最大池大小 info.put('completedTaskCount', threadPool.getCompletedTaskCount());//總完成任務(wù)數(shù) return info; } @Override public void contribute(Info.Builder builder) { builder.withDetail('demoThreadPool', threadPoolInfo(ThreadPoolProvider.getDemoThreadPool())); builder.withDetail('ioThreadPool', threadPoolInfo(ThreadPoolProvider.getIOThreadPool())); }}

直接訪問(wèn)http://localhost:8080/actuator/info

Spring Boot Actuator監(jiān)控的簡(jiǎn)單使用方法示例代碼詳解

如果開(kāi)啟jmx,還可以使用jconsole來(lái)查看線程池的狀態(tài)信息:

#開(kāi)啟 JMXspring.jmx.enabled=true

打開(kāi)jconcole界面之后,進(jìn)入MBean這個(gè)tab,可以在EndPoint下的Info操作這里看到我們的Bean信息。

Spring Boot Actuator監(jiān)控的簡(jiǎn)單使用方法示例代碼詳解

不過(guò),除了jconsole之外,我們可以把JMX協(xié)議轉(zhuǎn)為http協(xié)議,這里引入jolokia:

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

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

Spring Boot Actuator監(jiān)控的簡(jiǎn)單使用方法示例代碼詳解

監(jiān)控延伸

通過(guò)Micrometer+promethues+grafana的組合也可以進(jìn)行一些生產(chǎn)級(jí)別的實(shí)踐。

到此這篇關(guān)于Spring Boot Actuator監(jiān)控的簡(jiǎn)單使用的文章就介紹到這了,更多相關(guān)Spring Boot Actuator監(jiān)控內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
蜜桃av在线播放| 日韩av字幕| 美女av在线免费看| 色在线视频观看| 欧美日韩一二三四| 美女黄网久久| 日本精品国产| 精品国产欧美日韩| 四虎影视精品| 中文字幕av一区二区三区人| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲3区在线| 欧美激情三区| 日韩伦理一区| 亚洲欧美日本视频在线观看| 91p九色成人| 日韩欧美精品一区| 国产亚洲激情| 国产人成精品一区二区三| 高清日韩中文字幕| 好吊一区二区三区| 日本成人精品| 久久男人天堂| 在线免费观看亚洲| 久久亚洲人体| 婷婷色综合网| 91成人精品在线| 久久久久.com| 日韩精品五月天| 日韩美女一区二区三区在线观看| 伊人精品久久| 日韩国产一区| 久久国产精品免费一区二区三区| 黄色aa久久| 天堂va欧美ⅴa亚洲va一国产| 蜜桃久久久久| 香蕉久久久久久久av网站| 国产精品免费不| 黄色成人精品网站| 成人日韩av| 日韩av一区二区三区四区| 高清不卡亚洲| 欧美日本精品| 在线综合欧美| 日韩av二区| 亚洲精品三级| 欧美不卡高清| 国产videos久久| 欧美片第1页综合| 亚洲综合欧美| 日本精品在线中文字幕| 国产午夜久久av| 黄色亚洲在线| 日本午夜大片a在线观看| 奇米狠狠一区二区三区| 国产高清一区| 国产在线观看91一区二区三区| 亚洲一级大片| 香蕉国产精品| 成人自拍av| 久久精品国产亚洲aⅴ| 日本中文字幕不卡| 91久久午夜| 午夜精品久久久久久久久久蜜桃| 国产精品日韩精品中文字幕| 亚洲毛片视频| 亚洲激情黄色| 亚洲无线一线二线三线区别av| 国产成人a视频高清在线观看| 国产欧美日韩一级| 日本在线成人| 一区免费在线| 伊人久久大香线蕉av不卡| 丁香婷婷久久| 国产精品s色| 88久久精品| 日韩精品一级| 亚洲午夜久久| 在线亚洲一区| 午夜精品影院| 五月婷婷亚洲| jiujiure精品视频播放| 久久久人人人| 日韩欧美午夜| 欧美日韩视频免费观看| 国产美女高潮在线| 麻豆精品在线视频| 捆绑调教美女网站视频一区| 国产精一区二区| 国产精品亚洲欧美一级在线| 欧美在线观看天堂一区二区三区| 亚洲精品动态| 日本aⅴ免费视频一区二区三区| 日精品一区二区三区| 日韩高清电影一区| 欧美久久香蕉| 久久影视三级福利片| 精品国产亚洲一区二区三区大结局| 国产激情综合| 国产suv精品一区二区四区视频| 中文av在线全新| 鲁鲁在线中文| 91久久久精品国产| 亚洲一级淫片| 国产精品115| 国产一区2区| 久久青草久久| 日韩午夜一区| 婷婷亚洲精品| 久久gogo国模啪啪裸体| 国产69精品久久| 国产99久久久国产精品成人免费| 美女久久网站| 国产视频一区二| 国产中文欧美日韩在线| 丝袜av一区| 免费看黄色91| 国产精品99久久久久久董美香| 成人一区不卡| 黄页网站一区| 国产精品一页| 韩国三级一区| 免费日韩视频| 国产日产精品_国产精品毛片| 精品久久国产一区| 黑丝一区二区| 国产精品综合色区在线观看| 日本欧美国产| 亚洲一区二区免费看| 日韩一区二区三区免费视频| 久久久亚洲欧洲日产| 日韩国产网站| 日本久久一区| 欧洲精品一区二区三区| 在线观看视频免费一区二区三区| 国产欧美一区| 欧美成人高清| 久久国产精品色av免费看| 久久男人天堂| 日韩中文av| 国产中文在线播放| 亚洲欧美一级| 欧美精品资源| 国产精品视频一区二区三区四蜜臂| 青青久久av| 国产区精品区| 天堂网在线观看国产精品| 国产精品久久久久久妇女| 亚洲高清久久| 国产精品伊人| 国产午夜精品一区二区三区欧美 | 欧美a级片一区| 欧美一区自拍| 伊人久久大香线蕉av不卡| 国产精品高潮呻吟久久久久| 中文国产一区| 久久不卡日韩美女| 视频一区二区欧美| 亚洲黄色网址| 欧美色综合网| 久久亚洲视频| 日韩免费久久| 久久99蜜桃| 亚洲精品黄色| 欧美日韩国产精品一区二区亚洲| 国产精品久久久久久久免费软件| 亚洲激情不卡| 日本免费一区二区三区四区| 国产日产精品_国产精品毛片| 亚洲欧洲一区| 98精品久久久久久久| 日本欧美久久久久免费播放网| 日韩在线观看不卡| 老色鬼精品视频在线观看播放| 亚洲精品欧洲| 成人av二区| 久久中文字幕av一区二区不卡| 久久99久久久精品欧美| 午夜电影一区| 久热精品在线| 蜜臀av免费一区二区三区| 日韩欧美国产精品综合嫩v| 国产精品红桃| 国产免费久久| 日韩福利视频导航| 亚洲毛片一区| 亚洲人成高清| 亚洲免费中文| 亚洲视频播放| 99国产精品久久久久久久成人热 | 欧美亚洲人成在线| 在线免费观看亚洲| 丝袜亚洲精品中文字幕一区| 国产99久久| 久久精品国产99久久| 伊人久久av| 国产一区二区三区精品在线观看| 精品午夜视频| 成人在线视频免费| 91亚洲自偷观看高清|