SpringBoot的監控(Actuator) 功能

目錄

0、官方文檔

一、引入依賴

二、application.yml文件中開啟監控

三、具體使用

四、具體細節使用

五、端點開啟與禁用

?六、定制Endpoint

1. 定制?/actuator/health?

?2. 定制 /actuator/info

(1)直接在配置文件中寫死

(2)從pom文件中讀取信息

?(3)代碼實現

3. 定制metrics

七. 新增自己的監控端點?


0、官方文檔

Spring Boot Actuator: Production-ready Features

一、引入依賴

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

二、application.yml文件中開啟監控

management:endpoints:enabled-by-default: true #暴露所有端點信息web:exposure:include: "*"  #以web方式暴露

三、具體使用

1. 查看可以監控哪些信息:

localhost:8080/actuator/

2. 根據1中查出來的結果,可以監控具體的信息,比如:?

http://localhost:8080/actuator/health?【查看系統健康狀態】

localhost:8080/actuator/beans?【查看系統中所有的bean組件】

localhost:8080/actuator/conditions?【查看系統中激活的組件,如下圖】

localhost:8080/actuator/configprops?【查看系統中配置的屬性,如下圖】

localhost:8080/actuator/env?【查看系統環境變量】

localhost:8080/actuator/metrics/? 【查看系統可以監控哪些指標信息,即系統運行時指標】

根據上面查出來的指標,再具體查看每個指標的詳細信息,比如如下圖查看系統CPU利用率指標

localhost:8080/actuator/metrics/system.cpu.usage

四、具體細節使用

比如我現在直接想查看系統是否健康,可以直接發送

?localhost:8080/actuator/health

這個請求,如下圖是默認返回的信息,只顯示一個匯總后的結果告訴我們當前服務是什么狀態

?但是我想的服務配置了很多東西,比如數據庫,redis, mq等組件,我想知道它們每一個的健康狀態,可以在配置文件中針對每個監控端點進行更詳細的配置,如下:

如上配置好了以后,重新啟動項目,再次查看 /actuator/health 端點,返回如下信息:

?

五、端點開啟與禁用

1. 直接使用如下方式是默認開啟所有監控端點,但是某些包含敏感信息的端點我們不想開啟,而只想開啟某些監控端點,該怎么辦呢?

management:endpoints:enabled-by-default: true #暴露所有端點信息web:exposure:include: "*"  #以web方式暴露

把上面的配置改成如下方式,即單獨針對每一個監控端點的開啟與禁用進行控制

management:endpoints:enabled-by-default: false#關閉所有端點監控功能web:exposure:include: "*"  #以web方式暴露endpoint:health:show-details: alwaysenabled: trueinfo:enabled: truemetrics:enabled: true

重啟項目,再次查看監控端點信息,如下(只能看到我們想讓你看到的監控信息):

?

同樣的,在jconsole里面,也是只能看到這些信息,如下圖:

在DOS命令行輸入 jconsole就可以直接打開jconsole控制臺

?六、定制Endpoint

說明:這里的定制端點是在SpringBoot已有的端點中,添加我們自己定制的一些信息,并沒有新增監控端點(新增監控端點,看第7節)

1. 定制?/actuator/health?

比如在訪問 http://localhost:8080/actuator/health 時,默認顯示系統判斷的那些組件的健康狀態,如果我們自己想添加一個 端點(組件)的健康狀態,按照如下做法:

?2. 定制 /actuator/info

直接使用?http://localhost:8080/actuator/info時,輸入的信息為空,那么我們如果想在頁面展示一些項目的基本信息,比如項目名稱,項目的版本等信息該如何做呢,有如下三種辦法:

(1)直接在配置文件中寫死

? ? ? ? 如下圖:

info:appName: boot-adminappVersion: 1.0.0

(2)從pom文件中讀取信息

????????采用(1)中的方法的缺點是我不想把項目的名稱或者版本號寫死,我想動態獲取(比如從maven中動態獲取當前項目的項目名稱和版本,因為項目名稱或者版本可能會變動)。那么此時頁可以直接在配置文件(application.yml)中動態獲取maven配置文件(pom.xml)中的一些基本信息,如下:

重啟項目,訪問?http://localhost:8080/actuator/info,結果如下圖:

?(3)代碼實現

? ? ? ? 第二種方式可以獲取項目的一些基本信息,并且不是寫死的,而是從pom文件中自動獲取的,但是某些信息只能通過發送請求時,在代碼里面進行邏輯處理完成之后才能獲取,所以就引入了第三種方式,即通過代碼實現獲取一些項目相關的信息,代碼實現如下:

package com.shg.admin.acutuator.info;import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.stereotype.Component;import java.util.Collections;@Component
public class AppInfoInfoContributor implements InfoContributor {@Overridepublic void contribute(Info.Builder builder) {builder.withDetail("msg","你好").withDetail("hello","shg").withDetails(Collections.singletonMap("world","666"));}
}

重啟項目,訪問?http://localhost:8080/actuator/info,結果如下圖:

3. 定制metrics

? ? ? ? SpringBoot默認給我們的定制信息如下圖:

?上述這些默認的指標信息不一定能滿足我們的需求,比如我就想單獨監控某個 Controller對應的URL被請求的次數,此時就需要自定義一個mertics,添加到現有的metrics中:

需求:比如我想統計 CityService類里面的 selectListCity這個方法被調用多少次。代碼如下:

?

請求Controller的?????localhost:8080/city/list 方法后,查詢具體的指標如下,可以看到? CityService類里面的 selectListCity這個方法已經被調用了6次。

七. 新增自己的監控端點?

SpringBoot給我們提供的監控端點就是在其官方文檔里面的那些:

Spring Boot Actuator: Production-ready Features

如果我們自己想新增一些監控端點,該怎么做呢?代碼如下:

重啟項目,直接訪問:localhost:8080/actuator/?結果如下:

?訪問我們自定的端點,結果如下:

新增自己的監控端點后,通過jconsole里面也可以看到新增的監控端點,如下圖;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207398.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207398.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207398.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分頁顯示功能函數的核心 代碼主要參考思路

分頁顯示功能函數的核心 代碼主要參考思路 package org.utils;import java.util.List;import org.entity.Student;/*** * author 24519* 分頁的工具類**/ public class PageUtils {//頁大小&#xff08;每頁顯示多少條記錄&#xff09;private int pageSize;//當前頁private in…

如何進行代碼混淆?方法與常見工具介紹

? 目錄 什么是代碼混淆&#xff1f; 代碼混淆的方法 常見代碼混淆工具 什么是代碼混淆&#xff1f; 代碼混淆是指將計算機程序的代碼轉換成一種功能上等價&#xff0c;但難于閱讀和理解的形式的行為。混淆后的代碼很難被反編譯&#xff0c;即使反編譯成功也很難得出程序的…

【Linux系統化學習】命令行參數 | 環境變量的再次理解

個人主頁點擊直達&#xff1a;小白不是程序媛 Linux專欄&#xff1a;Linux系統化學習 代碼倉庫&#xff1a;Gitee 目錄 mian函數傳參獲取環境變量 手動添加環境變量 導出環境變量 environ獲取環境變量 本地變量和環境變量的區別 Linux的命令分類 常規命令 內建命令 …

前端面試JS—map 和 forEach 的區別

目錄 相同點&#xff1a; 不同點&#xff1a; 相同點&#xff1a; 都是循環遍歷數組中的每一項&#xff08;接收一個函數作為參數&#xff0c;并對每個數組元素執行一次&#xff09;每次執行匿名函數都支持三個參數&#xff1a;&#xff08;三個參數分別為item&#xff08;當前…

js獲取快遞單號小練習

目錄 1、css代碼 2、html代碼 3、js代碼 完整代碼 效果圖 1、css代碼 .box{width: 400px;height: 300px;margin: 100px auto;position: relative;}input{width: 250px;height: 40px;outline: none;}span{display: block;position: absolute;min-width: 270px;max-width: 40…

pytest +uiautomator2+weditor app自動化從零開始

目錄結構1.0 把設備連接單獨移出去了 模塊操作代碼&#xff0c;有一些流程操作和斷言方法 from devices import dv from time import sleep import random from tool.jt import capture_screenshotdef initialization(func):def wrapper():sleep(1)dv.app_stop(com.visteon.…

CSS特效025:旋轉的loading狀態

CSS常用示例100專欄目錄 本專欄記錄的是經常使用的CSS示例與技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花邊信息三部分內容。其中CSS布局主要是列出一些常用的CSS布局信息點&#xff0c;CSS特效主要是一些動畫示例&#xff0c;CSS花邊是描述了一些CSS…

Ubuntu 修改當前用戶的名稱

UBUNTU 2018.04 LTS 64位 修改當前用戶的名稱 操作步驟如下&#xff1a; 假設你的帳號AAA &#xff0c; 打算修改為BBB。開機進入桌面。按下ctrl alt F1~F7 三個組合鍵。功能鍵F1到F7任選1個。 進入黑屏。登陸root 用戶&#xff0c;進入后。修改以下三個文件 /etc/passwd&a…

Linux學習筆記(九)MISC設備驅動

前言 misc 的意思是混合、雜項的&#xff0c;因此 MISC 驅動也叫做雜項驅動。也就是當我們板子上的某些外設無法進行分類的時候就可以使用 MISC 驅動。 MISC 驅動其實就是最簡單的字符設備驅動&#xff0c;通常嵌套在 platform 總線驅動中&#xff0c;實現復雜的驅動&#xff0…

Mysql 索引概念回顧

一、什么是索引 在關系數據庫中&#xff0c;索引是一種單獨的、物理的對數據庫表中一列或多列的值進行排序的一種存儲結構&#xff0c;它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。索引的作用相當于圖書的目錄&#xff0c;可以根據…

《算法競賽進階指南》------圖論篇

文章目錄 0x01 Telephone Lines POJ - 36620x02 P1073 [NOIP2009 提高組] 最優貿易0x03 道路和航線 BZOJ22000x04 Sorting It All Out POJ - 1094 topo0x05 Sightseeing trip POJ - 1734 最小環問題0x06 Cow Relays POJ - 3613 S到E經過k條邊的最短路0x07 走廊潑水節 &#xff…

為什么Java程序員需要掌握多線程?揭秘并發編程的奧秘

為什么Java程序員需要掌握多線程&#xff1f;揭秘并發編程的奧秘 個人簡介前言多線程對于Java的意義&#x1f4cc;1.提高程序性能&#xff1a;&#x1f4cc;2 提高用戶體驗&#xff1a;&#x1f4cc;3支持并發處理&#xff1a;&#x1f4cc;4 資源共享和同步&#xff1a;&#…

OpenSSL 編程示例

參考&#xff1a;深入探索 OpenSSL&#xff1a;概念、原理、開發步驟、使用方法、使用場景及代碼示例 地址&#xff1a;https://oneisall.blog.csdn.net/article/details/131489812?spm1001.2014.3001.5502 目錄 1. OpenSSL 概念2. OpenSSL 原理3. OpenSSL 開發步驟4. OpenSSL…

C# 語法筆記

1.ref、out&#xff1a;參數傳遞的兩種方式 ref&#xff1a;引用傳遞 using System; namespace CalculatorApplication {class NumberManipulator{public void swap(ref int x, ref int y){int temp;temp x; /* 保存 x 的值 */x y; /* 把 y 賦值給 x */y temp; /* 把 t…

Python中的range()函數詳解:掌握迭代的利器

更多資料獲取 &#x1f4da; 個人網站&#xff1a;ipengtao.com Python中的range()函數是一個強大的工具&#xff0c;用于生成一系列的數字&#xff0c;常用于循環操作。雖然看似簡單&#xff0c;但其靈活性和功能卻不容小覷。在本文中&#xff0c;將深入研究range()函數&…

9. 從零用Rust編寫正反向代理, HTTP2改造篇之HPACK示例, 了解http2頭信息如何處理

wmproxy wmproxy是由Rust編寫&#xff0c;已實現http/https代理&#xff0c;socks5代理&#xff0c; 反向代理&#xff0c;靜態文件服務器&#xff0c;內網穿透&#xff0c;配置熱更新等&#xff0c; 后續將實現websocket代理等&#xff0c;同時會將實現過程分享出來&#xff…

vue3,元素可拖拽,自定義指令,鼠標以及手指事件的寫法不一樣

使用很簡單&#xff0c;直接 <div v-drag><div class"header"></div><div class"content"></div> </div>// 自定義指令 —— 拖動div const vDrag {// 在綁定元素的父組件// 及他自己的所有子節點都掛載完成后調用m…

docker容器_自定義上傳jenkins鏡像(Dockerfile實現)

1.創建jenkins目錄&#xff0c;并上傳相應的包 mkdir /jenkins/ 2.創建一個Dockerfile文件 FROM daocloud.io/library/centos:7#把當前目錄下的jenkins.war包傳到內部容器的/ 下 ADD ./jenkins.war /#把當前目錄下的jdk傳到內部容器的/opt/,并解壓 ADD ./jdk-11.0.19_linu…

程序解釋與編譯

?1.程序的解釋執行方式 程序語言強寫的計策機指令序列稱為“源程序”,計算機并不能直接執行用高級語言編寫的源程序&#xff0c;源程序必須通過“翻譯程序”翻譯成機器指令的形式&#xff0c;計算機才能項別和執行。源程序的翻譯有兩種方式&#xff1a;解釋執行和編譯執行。不…

網絡編程基礎api

1. IP 協議 1.1 IP 分片 &#xff08;1&#xff09;IP 分片和重組主要依靠 IP 頭部三個字段&#xff1a;數據報標識、標志和片偏移 以太網幀的 MTU 是 1500 字節&#xff1b; 一個每個分片都有自己的 IP 頭部&#xff0c;它們都具有相同的標識值&#xff0c;有不同的片偏移…