1. 程式人生 > >Spring Boot 2.X(十六):應用監控之 Spring Boot Actuator 使用及配置

Spring Boot 2.X(十六):應用監控之 Spring Boot Actuator 使用及配置

Actuator 簡介

Actuator 是 Spring Boot 提供的對應用系統的自省和監控功能。通過 Actuator,可以使用資料化的指標去度量應用的執行情況,比如檢視伺服器的磁碟、記憶體、CPU等資訊,系統的執行緒、gc、執行狀態等等。

Actuator 通常通過使用 HTTP 和 JMX 來管理和監控應用,大多數情況使用 HTTP 的方式。

Actuator 端點說明

端點 描述
auditevents 獲取當前應用暴露的審計事件資訊
beans 獲取應用中所有的 Spring Beans 的完整關係列表
caches 獲取公開可以用的快取
conditions 獲取自動配置條件資訊,記錄哪些自動配置條件通過和沒通過的原因
configprops 獲取所有配置屬性,包括預設配置,顯示一個所有 @ConfigurationProperties 的整理列版本
env 獲取所有環境變數
flyway 獲取已應用的所有Flyway資料庫遷移資訊,需要一個或多個 Flyway Bean
liquibase 獲取已應用的所有Liquibase資料庫遷移。需要一個或多個 Liquibase Bean
health 獲取應用程式健康指標(執行狀況資訊)
httptrace 獲取HTTP跟蹤資訊(預設情況下,最近100個HTTP請求-響應交換)。需要 HttpTraceRepository Bean
info 獲取應用程式資訊
integrationgraph 顯示 Spring Integration 圖。需要依賴 spring-integration-core
loggers 顯示和修改應用程式中日誌的配置
logfile 返回日誌檔案的內容(如果已設定logging.file.name或logging.file.path屬性)
metrics 獲取系統度量指標資訊
mappings 顯示所有@RequestMapping路徑的整理列表
scheduledtasks 顯示應用程式中的計劃任務
sessions 允許從Spring Session支援的會話儲存中檢索和刪除使用者會話。需要使用Spring Session的基於Servlet的Web應用程式
shutdown 關閉應用,要求endpoints.shutdown.enabled設定為true,預設為 false
threaddump 獲取系統執行緒轉儲資訊
heapdump 返回hprof堆轉儲檔案
jolokia 通過HTTP公開JMX bean(當Jolokia在類路徑上時,不適用於WebFlux)。需要依賴 jolokia-core
prometheus 以Prometheus伺服器可以抓取的格式公開指標。需要依賴 micrometer-registry-prometheus

Actuator 使用及配置

快速使用

專案依賴

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

配置檔案

management.endpoints.enabled-by-default=true
#啟動所有端點
management.endpoints.web.exposure.include=*
#自定義管理端點路徑
#management.endpoints.web.base-path=/manage

Spring Boot 2.X 中,Actuator 預設只開放 health 和 info 兩個端點。

新增management.endpoints.web.exposure.include=*配置後啟動應用,訪問 http://127.0.0.1:8080/actuator 我們可以看到所有的 Actuator 端點列表。

如果將management.endpoints.enabled-by-default設定為false,則禁用所有端點,如需啟用則如下:

management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=true

禁用的端點將從應用程式上下文中完全刪除。如果只想更改公開端點,使用include和exclude屬性。使用如下:

management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans

management.endpoints.web.base-path=/manage 配置表示將 /actuator 路徑重定義為 /manage。

常用端點詳解

health

主要用來檢測應用的執行狀況,是使用最多的一個監控點。監控軟體通常使用該介面實時監測應用執行狀況,在系統出現故障時把報警資訊推送給相關人員,如磁碟空間使用情況、資料庫和快取等的一些健康指標。
預設情況下 health 端點是開放的,訪問 http://127.0.0.1:8080/actuator/health 即可看到應用執行狀態。

{"status":"UP"}

如果需要看到詳細資訊,則需要做新增配置:

management.endpoint.health.show-details=always

訪問返回資訊如下:

{"status":"UP","details":{"diskSpace":{"status":"UP","details":{"total":180002725888,"free":8687988736,"threshold":10485760}}}}

info

檢視應用資訊是否在 application.properties 中配置。如我們在專案中配置是:

info.app.name=Spring Boot Actuator Demo
info.app.version=v1.0.0
info.app.description=Spring Boot Actuator Demo

啟動專案,訪問 http://127.0.0.1:8080/actuator/info 返回資訊如下:

{"app":{"name":"Spring Boot Actuator Demo","version":"v1.0.0","description":"Spring Boot Actuator Demo"}}

env

通過 env 可以獲取到所有關於當前 Spring Boot 應用程式的執行環境資訊,如:作業系統資訊(systemProperties)、環境變數資訊、JDK 版本及 ClassPath 資訊、當前啟用的配置檔案(activeProfiles)、propertySources、應用程式配置資訊(applicationConfig)等。

可以通過 http://127.0.0.1:8080/actuator/env/{name} ,name表示想要檢視的資訊,可以獨立顯示。

beans

訪問 http://127.0.0.1:8080/actuator/beans 返回部分資訊如下:

{
    "contexts": {
        "Spring Boot Actuator Demo": {
            "beans": {
                "endpointCachingOperationInvokerAdvisor": {
                    "aliases": [
                    ],
                    "scope": "singleton",
                    "type": "org.springframework.boot.actuate.endpoint.invoker.cache.CachingOperationInvokerAdvisor",
                    "resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.class]",
                    "dependencies": [
                        "environment"
                    ]
                },
                "defaultServletHandlerMapping": {
                    "aliases": [
                    ],
                    "scope": "singleton",
                    "type": "org.springframework.web.servlet.HandlerMapping",
                    "resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
                    "dependencies": [
                    ]
                },
                ...
            }
        }
    }
}

從返回的資訊中我們可以看出主要展示了 bean 的別名、型別、是否單例、類的地址、依賴等資訊。

conditions

通過 conditions 可以在應用執行時檢視程式碼了某個配置在什麼條件下生效,或者某個自動配置為什麼沒有生效。

訪問 http://127.0.0.1:8080/actuator/conditions 返回部分資訊如下:

{
    "contexts": {
        "Spring Boot Actuator Demo": {
            "positiveMatches": {
                "SpringBootAdminClientAutoConfiguration": [
                    {
                        "condition": "OnWebApplicationCondition",
                        "message": "@ConditionalOnWebApplication (required) found 'session' scope"
                    },
                    {
                        "condition": "SpringBootAdminClientEnabledCondition",
                        "message": "matched"
                    }
                ],
                "SpringBootAdminClientAutoConfiguration#metadataContributor": [
                    {
                        "condition": "OnBeanCondition",
                        "message": "@ConditionalOnMissingBean (types: de.codecentric.boot.admin.client.registration.metadata.CompositeMetadataContributor; SearchStrategy: all) did not find any beans"
                    }
                ],
                ...
            }
        }
    }
}

loggers

獲取系統的日誌資訊。

訪問 http://127.0.0.1:8080/actuator/loggers 返回部分資訊如下:

{
    "levels": [
        "OFF",
        "ERROR",
        "WARN",
        "INFO",
        "DEBUG",
        "TRACE"
    ],
    "loggers": {
        "ROOT": {
            "configuredLevel": "INFO",
            "effectiveLevel": "INFO"
        },
        "cn": {
            "configuredLevel": null,
            "effectiveLevel": "INFO"
        },
        "cn.zwqh": {
            "configuredLevel": null,
            "effectiveLevel": "INFO"
        },
        "cn.zwqh.springboot": {
            "configuredLevel": null,
            "effectiveLevel": "INFO"
        },
        ...
    }
}

mappings

檢視所有 URL 對映,即所有 @RequestMapping 路徑的整理列表。

訪問 http://127.0.0.1:8080/actuator/mappings 返回部分資訊如下:

{
    "contexts": {
        "Spring Boot Actuator Demo": {
            "mappings": {
                "dispatcherServlets": {
                    "dispatcherServlet": [
                        {
                            "handler": "ResourceHttpRequestHandler [class path resource [META-INF/resources/], class path resource [resources/], class path resource [static/], class path resource [public/], ServletContext resource [/], class path resource []]",
                            "predicate": "/**/favicon.ico",
                            "details": null
                        },
                        ...
                    ]
                }
            }
        }
    }
}

heapdump

訪問:http://127.0.0.1:8080/actuator/heapdump會自動生成一個 GZip 壓縮的 Jvm 的堆檔案 heapdump,我們可以使用 JDK 自帶的 Jvm 監控工具 VisualVM 開啟此檔案檢視。如圖:

VisualVM下載:https://visualvm.github.io/download.html

threaddump

獲取系統執行緒的轉儲資訊,主要展示了執行緒名、執行緒ID、執行緒的狀態、是否等待鎖資源等資訊。在工作中,我們可以通過檢視執行緒的情況來排查相關問題。

訪問 http://127.0.0.1:8080/actuator/threaddump 返回部分資訊如下:

{
    "threads": [
        {
            "threadName": "DestroyJavaVM",
            "threadId": 40,
            "blockedTime": -1,
            "blockedCount": 0,
            "waitedTime": -1,
            "waitedCount": 0,
            "lockName": null,
            "lockOwnerId": -1,
            "lockOwnerName": null,
            "inNative": false,
            "suspended": false,
            "threadState": "RUNNABLE",
            "stackTrace": [
            ],
            "lockedMonitors": [
            ],
            "lockedSynchronizers": [
            ],
            "lockInfo": null
        },
        ...
    ]
}

shutdown

開啟可以介面關閉 Spring Boot 應用,要使用這個功能需要做如下配置:

management.endpoint.shutdown.enabled=true

可以通過 post(僅支援 post) 請求訪問 http://127.0.0.1:8080/actuator/shutdown 關閉應用。

metrics

訪問 http://127.0.0.1:8080/actuator/metrics 可以獲取系統度量指標資訊項如下:

{
    "names": [
        "jvm.memory.max",
        "jvm.threads.states",
        "jvm.gc.pause",
        "http.server.requests",
        "process.files.max",
        "jvm.gc.memory.promoted",
        "system.load.average.1m",
        "jvm.memory.used",
        "jvm.gc.max.data.size",
        "jvm.memory.committed",
        "system.cpu.count",
        "logback.events",
        "tomcat.global.sent",
        "jvm.buffer.memory.used",
        "tomcat.sessions.created",
        "jvm.threads.daemon",
        "system.cpu.usage",
        "jvm.gc.memory.allocated",
        "tomcat.global.request.max",
        "tomcat.global.request",
        "tomcat.sessions.expired",
        "jvm.threads.live",
        "jvm.threads.peak",
        "tomcat.global.received",
        "process.uptime",
        "tomcat.sessions.rejected",
        "process.cpu.usage",
        "tomcat.threads.config.max",
        "jvm.classes.loaded",
        "jvm.classes.unloaded",
        "tomcat.global.error",
        "tomcat.sessions.active.current",
        "tomcat.sessions.alive.max",
        "jvm.gc.live.data.size",
        "tomcat.threads.current",
        "process.files.open",
        "jvm.buffer.count",
        "jvm.buffer.total.capacity",
        "tomcat.sessions.active.max",
        "tomcat.threads.busy",
        "process.start.time"
    ]
}

對應訪問 names 中的指標,可以檢視具體的指標資訊。如訪問 http://127.0.0.1:8080/actuator/metrics/jvm.memory.used 返回資訊如下:

{
    "name": "jvm.memory.used",
    "description": "The amount of used memory",
    "baseUnit": "bytes",
    "measurements": [
        {
            "statistic": "VALUE",
            "value": 1.16828136E8
        }
    ],
    "availableTags": [
        {
            "tag": "area",
            "values": [
                "heap",
                "nonheap"
            ]
        },
        {
            "tag": "id",
            "values": [
                "Compressed Class Space",
                "PS Survivor Space",
                "PS Old Gen",
                "Metaspace",
                "PS Eden Space",
                "Code Cache"
            ]
        }
    ]
}

示例程式碼

github

碼雲

參考文件

https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/reference/html/production-ready-features.html

非特殊說明,本文版權歸 朝霧輕寒 所有,轉載請註明出處.

原文標題:Spring Boot 2.X(十六):應用監控之 Spring Boot Actuator 使用及配置

原文地址:https://www.zwqh.top/article/info/25

如果文章對您有幫助,請掃碼關注下我的公眾號,文章持續更新中...

相關推薦

Spring Boot 2.X()應用監控 Spring Boot Actuator 使用配置

Actuator 簡介 Actuator 是 Spring Boot 提供的對應用系統的自省和監控功能。通過 Actuator,可以使用資料化的指標去度量應用的執行情況,比如檢視伺服器的磁碟、記憶體、CPU等資訊,系統的執行緒、gc、執行狀態等等。 Actuator 通常通過使用 HTTP 和 JMX 來管理

Spring Boot 2.X(一)全域性異常處理

前言 在 Java Web 系統開發中,不管是 Controller 層、Service 層還是 Dao 層,都有可能丟擲異常。如果在每個方法中加上各種 try catch 的異常處理程式碼,那樣會使程式碼非常繁瑣。在Spring MVC 中,我們可以將所有型別的異常處理從各個單獨的方法中解耦出來,進行異常資

Spring Boot 2.X(二)定時任務

簡介 定時任務是後端開發中常見的需求,主要應用場景有定期資料報表、定時訊息通知、非同步的後臺業務邏輯處理、日誌分析處理、垃圾資料清理、定時更新快取等等。 Spring Boot 集成了一整套的定時任務工具,讓我們專注於完成邏輯,剩下的基礎排程工作將自動完成。 通用實現方式 實現方式 描述 jav

Spring Boot 2.X(四)日誌功能 Logback

Logback 簡介 Logback 是由 SLF4J 作者開發的新一代日誌框架,用於替代 log4j。 主要特點是效率更高,架構設計夠通用,適用於不同的環境。 Logback 分為三個模組:logback-core,logback-classic和logback-access。 logback-core 模

Spring Boot 2.X(五)整合 Swagger2 開發 API 文件(線上+離線)

前言 相信很多後端開發在專案中都會碰到要寫 api 文件,不管是給前端、移動端等提供更好的對接,還是以後為了以後交接方便,都會要求寫 api 文件。 而手寫 api 文件的話有諸多痛點: 文件更新的時候,需要再次傳送給對接人 介面太對,手寫文件很難管理 介面返回的結果不明確 不能直接線上測試介面,通常需要使

Spring Boot 2.X(八)整合 Spring Security-登入認證和許可權控制

前言 在企業專案開發中,對系統的安全和許可權控制往往是必需的,常見的安全框架有 Spring Security、Apache Shiro 等。本文主要簡單介紹一下 Spring Security,再通過 Spring Boot 整合開一個簡單的示例。 Spring Security 什麼是 Spring Se

Spring Boot 2.x優雅的統一返回值

為什麼要統一返回值 在我們做後端應用的時候,前後端分離的情況下,我們經常會定義一個數據格式,通常會包含code,message,data這三個必不可少的資訊來方便我們的交流,下面我們直接來看程式碼 ReturnVO package indi.viyoung.viboot.util; import ja

Spring Boot 2.X()自定義註冊 Servlet、Filter、Listener

前言 在 Spring Boot 中已經移除了 web.xml 檔案,如果需要註冊新增 Servlet、Filter、Listener 為 Spring Bean,在 Spring Boot 中有兩種方式: 使用 Servlet 3.0 API 的註解 @WebServlet、@WebFilter、@Lis

Spring Boot 2.x基礎教程配置元資料的應用

在使用Spring Boot開發應用的時候,你是否有發現這樣的情況:自定義屬性是有高量背景的,滑鼠放上去,有一個`Cannot resolve configuration property`的配置警告。 ![](https://img2020.cnblogs.com/other/626506/202101/

springboot()使用Jenkins部署Spring Boot

記得 rmi 啟動 很多 文章 firewalld 情況 try 安裝 jenkins是devops神器,本篇文章介紹如何安裝和使用jenkins部署Spring Boot項目 jenkins搭建 部署分為三個步驟; 第一步,jenkins安裝 第二步,插件安裝和配置

Spring Boot()使用Jenkins部署Spring Boot

如何 war包 args 選擇 lib jetty dma light 訪問 Spring Boot(十六):使用Jenkins部署Spring Boot jenkins是devops神器,介紹如何安裝和使用jenkins部署Spring Boot項目 jenkins搭建

Spring Boot 2.x基礎教程快速入門

開發十年,就只剩下這套架構體系了! >>>   

(轉)Spring Boot()使用 Jenkins 部署 Spring Boot

tails you 文件夾 設置 發布 awk jdk 時間 回車 http://www.ityouknow.com/springboot/2017/11/11/spring-boot-jenkins.html enkins 是 Devops 神器,本篇文章介紹如何安裝和

Spring Boot 2.x基礎教程工程結構推薦

Spring Boot框架本身並沒有對工程結構有特別的要求,但是按照最佳實踐的工程結構可以幫助我們減少可能會遇見的坑,尤其是Spr

Spring Boot 2.x基礎教程構建RESTful API與單元測試

首先,回顧並詳細說明一下在快速入門中使用的@Controller、@RestController、@RequestMapping註

Spring Boot 2.x基礎教程使用Swagger2構建強大的API文件

隨著前後端分離架構和微服務架構的流行,我們使用Spring Boot來構建RESTful API專案的場景越來越多。通常我們的一個RESTful API就有可能要服務於多個不同的開發人員或開發團隊:IOS開發、Android開發、Web開發甚至其他的後端服務等。為了減少與其他團隊平時開發期間的頻繁溝通成本,傳

Spring Boot 2.x基礎教程JSR-303實現請求引數校驗

請求引數的校驗是很多新手開發非常容易犯錯,或存在較多改進點的常見場景。比較常見的問題主要表現在以下幾個方面: 僅依靠前端框架解決引數校驗,缺失服務端的校驗。這種情況常見於需要同時開發前後端的時候,雖然程式的正常使用不會有問題,但是開發者忽略了非正常操作。比如繞過前端程式,直接模擬客戶端請求,這時候就會突然在

Spring Boot 2.x基礎教程Swagger介面分類與各元素排序問題詳解

之前通過Spring Boot 2.x基礎教程:使用Swagger2構建強大的API文件一文,我們學習瞭如何使用Swagger為Spring Boot專案自動生成API文件,有不少使用者留言問了關於文件內容的組織以及排序問題。所以,就特別開一篇詳細說說Swagger中文件內容如何來組織以及其中各個元素如何控制

Spring Boot 2.x 基礎案例整合Dubbo 2.7.3+Nacos1.1.3(最新版)

1、概述 本文將介紹如何基於Spring Boot 2.x的版本,通過Nacos作為配置與註冊中心,實現Dubbo服務的註冊與消費。 整合元件的版本說明: Spring Boot 2.1.9 Dubbo 2.7.3 Nacos 1.1.3 本文的亮點: 1.採用yml方式進行dubbo的配置。 2.

Spring Boot 2.x 基礎案例整合Dubbo 2.7.3+Nacos1.1.3(配置中心)

本文原創首發於公眾號:Java技術乾貨 1、概述 本文將Nacos作為配置中心,實現配置外部化,動態更新。這樣做的優點:不需要重啟應用,便可以動態更新應用裡的配置資訊。在如今流行的微服務應用下,將應用的配置統一管理,顯得尤為重要。 上一篇寫了《Spring Boot 2.x 基礎案例:整合Dubbo