詳細參考http://www.ityouknow.com/springboot/2018/02/06/spring-boot-actuator.html(非常完整、權威的資料)
說明
研究springboot的actuator
步驟
使用actuator的步驟(基於springboot 2.2.5.RELEASE 版本,如果比較老的版本,可能有些差異,比如在endpoint上我記得是直接訪問/beans而不是/actuator/beans)
- pom.xml中增加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 在配置文件 application.properties 中增加
在 Spring Boot 2.x 中爲了安全起見,如果不增加如下配置,Actuator 只開放了兩個端點 /actuator/health 和 /actuator/info。
# 所有的endpoint打開
management.endpoints.web.exposure.include=*
- 啓動springboot,訪問
http://localhost:8080/actuator/beans
所有的接口都在/actuator/**
下。如果我不想用/actuator/**
,可以改,在配置文件中增加
# 如果不想用默認的/actuator/** 前綴,可以改,如使用/manage/**
management.endpoints.web.base-path=/manage
endpoint重複問題
/actuator/**
,可能和自己定義的接口的endpoint一樣,衝突了會怎麼樣? 能啓動springboot,會覆蓋,actuator的優先,爲什麼會覆蓋? 是有點奇怪,正常情況下有重複的endpoint啓動springboot時會報錯
安全問題
怎麼保證安全,要不然誰都可以訪問/actuator/**
? 可以結合spring security
優雅關閉springboot程序
通常我們不熟springboot項目,關閉都是使用kill
甚至是 kill -9
,有沒有一種優雅的方式呢? 答案就是使用actuator提供的關閉
使用時必須在application.properties中添加配置
# 啓用優雅關閉程序,可以訪問/actuator/shutdown(POST)
management.endpoint.shutdown.enabled=true
所謂的優不優雅,應該是說這種關閉不是突然就關掉,是會做一些善後,比如未處理完的請求先處理完成
支持的endpoint
Actuator 監控分成兩類:原生端點和用戶自定義端點;自定義端點主要是指擴展性,用戶可以根據自己的實際應用,定義一些比較關心的指標,在運行期進行監控。
原生端點是在應用程序裏提供衆多 Web 接口,通過它們瞭解應用程序運行時的內部狀況。原生端點又可以分成三類:
應用配置類:可以查看應用在運行期的靜態信息:例如自動配置信息、加載的 springbean 信息、yml 文件配置信息、環境信息、請求映射信息;
度量指標類:主要是運行期的動態信息,例如堆棧、請求連、一些健康指標、metrics 信息等;
操作控制類:主要是指 shutdown,用戶可以發送一個請求將應用的監控功能關閉。
Actuator 提供了 13 個接口,具體如下表所示。
HTTP 方法 | 路徑 | 描述 |
---|---|---|
GET | /auditevents | 顯示應用暴露的審計事件 (比如認證進入、訂單失敗) |
GET | /beans | 描述應用程序上下文裏全部的 Bean,以及它們的關係 |
GET | /conditions | 就是 1.0 的 /autoconfig ,提供一份自動配置生效的條件情況,記錄哪些自動配置條件通過了,哪些沒通過 |
GET | /configprops | 描述配置屬性(包含默認值)如何注入Bean |
GET | /env | 獲取全部環境屬性 |
GET | /env/{name} | 根據名稱獲取特定的環境屬性值 |
GET | /flyway | 提供一份 Flyway 數據庫遷移信息 |
GET | /liquidbase | 顯示Liquibase 數據庫遷移的纖細信息 |
GET | /health | 報告應用程序的健康指標,這些值由 HealthIndicator 的實現類提供 |
GET | /heapdump | dump 一份應用的 JVM 堆信息 |
GET | /httptrace | 顯示HTTP足跡,最近100個HTTP request/repsponse |
GET | /info | 獲取應用程序的定製信息,這些信息由info打頭的屬性提供 |
GET | /logfile | 返回log file中的內容(如果 logging.file 或者 logging.path 被設置) |
GET | /loggers | 顯示和修改配置的loggers |
GET | /metrics | 報告各種應用程序度量信息,比如內存用量和HTTP請求計數 |
GET | /metrics/{name} | 報告指定名稱的應用程序度量值 |
GET | /scheduledtasks | 展示應用中的定時任務信息 |
GET | /sessions | 如果我們使用了 Spring Session 展示應用中的 HTTP sessions 信息 |
POST | /shutdown | 關閉應用程序,要求endpoints.shutdown.enabled設置爲true |
GET | /mappings | 描述全部的 URI路徑,以及它們和控制器(包含Actuator端點)的映射關係 |
GET | /threaddump | 獲取線程活動的快照 |
是否可以定義自己的endpoint
可以的。上述13個叫做原生端點,也可以自定義端點
常用的端點
/actuator/beans
:查看有哪些bean實例化了/actuator/mappings
:查看所有端點/actuator/env
:查看正在生效的profile,配置(即例如application.properties裏的一些變量)進程ID,運行的jdk/jre版本,操作系統,該springboot的jar包路徑/actuator/env/{name}
:跟/actuator/env
的區別是,這個是僅僅查其中某個profile的,用於信息過多,需要過濾一下/actuator/heapdump
:獲得dump文件,我們可以使用 JDK 自帶的 Jvm 監控工具 VisualVM 打開此文件查看內存快照/actuator/scheduledtasks
:查看有沒有定時任務