SpringBoot2.X性能監(jiān)控Actuator

title: SpringBoot2.X性能監(jiān)控Actuator
date: 2020-03-20
author: maxzhao
tags:
  - SpringBoot
  - Actuator
categories:
  - SpringBoot

一、前言

SpringBoot Actuator 服務(wù)監(jiān)控與管理**

其中包含了很多的服務(wù),比如我們常用的amqpJVMcache等等,下面是actuator包下的目錄

amqp,audit,beans,cache,cassandra,context,couchbase,elasticsearch,endpoint,env,flyway,health,influx,info,integration,jdbc,jms,ldap,liquibase,logging,mail,management,metrics,mongo,neo4j,redis,scheduling,security,session,solr,system,http,web

是不是感覺挺全面的。

二、服務(wù)監(jiān)控與管理

Maven 依賴

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

主要配置

Spring Boot2.x中,默認(rèn)只開放了info、health兩個端點(diǎn),開放其他端點(diǎn)需要配置

# 開啟所有端點(diǎn)
management:
  endpoints:  # 這里是 endpoints
    web:
      # 默認(rèn)路徑
      base-path: /actuator
      exposure:
        #  Endpoint IDs that should be included or '*' for all.
        include: '*'
    # 顯示詳細(xì)的 health 信息
    jmx:
      # Whether unique runtime object names should be ensured.
      domain: org.springframework.boot
      exposure:
        # Endpoint IDs that should be included or '*' for all.
        include: '*'
  # 顯示詳細(xì)的 health 信息
  endpoint: # 這里是 endpoint
    health:
      show-details: always
    # 打開 shutdown 端點(diǎn),通過 POST 訪問該端點(diǎn)可以關(guān)閉應(yīng)用
    shutdown:
      enabled: true

監(jiān)控狀態(tài)

啟動之后訪問 http://localhost:8062/boot/actuator/health 就可以看到對應(yīng)的項(xiàng)目監(jiān)控狀態(tài)。

訪問 http://localhost:8062/boot/actuator 可以查看有那些監(jiān)控。

健康指標(biāo) HealthIndicators 由 Spring Boot 自動配置,因此這里顯示監(jiān)控信息是由項(xiàng)目所使用的技術(shù)棧而決定的:

名稱 描述
CassandraHealthIndicator 檢查 Cassandra 數(shù)據(jù)庫是否啟動。
DiskSpaceHealthIndicator 檢查磁盤空間不足。
DataSourceHealthIndicator 檢查是否可以獲得連接 DataSource。
ElasticsearchHealthIndicator 檢查 Elasticsearch 集群是否啟動。
InfluxDbHealthIndicator 檢查 InfluxDB 服務(wù)器是否啟動。
JmsHealthIndicator 檢查 JMS 代理是否啟動。
MailHealthIndicator 檢查郵件服務(wù)器是否啟動。
MongoHealthIndicator 檢查 Mongo 數(shù)據(jù)庫是否啟動。
Neo4jHealthIndicator 檢查 Neo4j 服務(wù)器是否啟動。
RabbitHealthIndicator 檢查 Rabbit 服務(wù)器是否啟動。
RedisHealthIndicator 檢查 Redis 服務(wù)器是否啟動。
SolrHealthIndicator 檢查 Solr 服務(wù)器是否已啟動。

常用端點(diǎn)

查看常用接口

http://localhost:8062/boot/actuator/

env 端點(diǎn),應(yīng)用獲取環(huán)境信息,包括:環(huán)境變量、JVM屬性、應(yīng)用的配置配置、命令行中的參數(shù)等等。
localhost:8080/actuator/env

mapping 端點(diǎn),url 與 控制器映射關(guān)系信息
localhost:8080/actuator/info

metrics 端點(diǎn),引用度量指標(biāo)端點(diǎn),提供引用再運(yùn)行時的信息,如內(nèi)存使用情況、HTTP請求統(tǒng)計(jì)、外部資源指標(biāo)等
查看所有度量指標(biāo) localhost:8080/actuator/metrics
查看度量指標(biāo)詳細(xì)信息 localhost:8080/actuator/metrics/jvm.gc.pause

loggers 端點(diǎn),查看可配置 loggers 的列表及相關(guān)的等級信息
localhost:8080/actuator/loggers
查看特定的 logger 詳細(xì)信息localhost:8080/actuator/loggers/{name}

健康檢查

health 端點(diǎn)用于暴露程序運(yùn)行的健康狀態(tài),暴露的信息的詳細(xì)程度由 management.endpoint.health.show-details 來控制,它具有以下三個可選值:

名稱 描述
never 細(xì)節(jié)永遠(yuǎn)不會顯示。
when-authorized 詳細(xì)信息僅向授權(quán)用戶顯示。授權(quán)角色可以使用配置 management.endpoint.health.roles。
always 詳細(xì)信息顯示給所有用戶。

org.springframework.boot.actuate.health.ShowDetails中有詳細(xì)說明。

端點(diǎn)列表

  • info
    顯示應(yīng)用的基本信息
  • health
    顯示應(yīng)用的健康狀態(tài)
  • metrics
    顯示應(yīng)用多樣的度量信息
  • loggers
    顯示和修改配置的loggers
  • logfile
    返回log file中的內(nèi)容(如果logging.file或者logging.path被設(shè)置)
  • httptrace
    顯示HTTP足跡,最近100個HTTP request/repsponse
  • env
    顯示當(dāng)前的環(huán)境特性
  • flyway
    顯示數(shù)據(jù)庫遷移路徑的詳細(xì)信息
  • liquidbase
    顯示Liquibase 數(shù)據(jù)庫遷移的纖細(xì)信息
  • shutdown
    讓你逐步關(guān)閉應(yīng)用
  • mappings
    顯示所有的@RequestMapping路徑
  • scheduledtasks
    顯示應(yīng)用中的調(diào)度任務(wù)
  • threaddump
    執(zhí)行一個線程dump
  • heapdump
    返回一個GZip壓縮的JVM堆dump

三、自定義健康檢查

在啟動類中加入

@Bean
HealthIndicator customHealthIndicator() {
    return () -> Health.status("DOWN")
                .withDetail("error code", "某健康專項(xiàng)檢查失敗").build();
}
@Bean
HealthIndicator customUpHealthIndicator() {
    return () -> Health.up().withDetail("success code", "自定義檢查一切正常 UP").build();
}
@Bean
HealthIndicator customDownHealthIndicator() {
    return () -> Health.up().withDetail("success code", "自定義檢查一切正常 DOWN ").build();
}

訪問 http://localhost:8062/boot/actuator/health 的結(jié)果為:

這里我開啟了redis,數(shù)據(jù)庫為mysql

{
    "status": "DOWN",
    "details": {
        "custom": {
            "status": "FATAL",
            "details": {
                "error code": "某健康專項(xiàng)檢查失敗"
            }
        },
        "customUp": {
            "status": "UP",
            "details": {
                "success code": "自定義檢查一切正常 UP"
            }
        },
        "customDown": {
            "status": "DOWN",
            "details": {
                "success code": "自定義檢查一切正常 DOWN "
            }
        },
        "diskSpace": {
            "status": "UP",
            "details": {
                "total": "471182741504",
                "free": "375580655616",
                "threshold": "10485760"
            }
        },
        "db": {
            "status": "UP",
            "details": {
                "database": "MySQL",
                "hello": "1"
            }
        },
        "redis": {
            "status": "UP",
            "details": {
                "version": "5.0.8"
            }
        }
    }
}

當(dāng)前details中有一個檢查statusDOWN時,Health檢查的status就為DOWN,否則為UP

如果把第一個FATAL改為DOWNHealth檢查結(jié)果同樣為DOWN

下表顯示了內(nèi)置狀態(tài)的默認(rèn)映射:

Status Mapping
DOWN SERVICE_UNAVAILABLE (503)
OUT_OF_SERVICE SERVICE_UNAVAILABLE (503)
UP No mapping by default, so http status is 200
UNKNOWN No mapping by default, so http status is 200

四、自定義端點(diǎn)

Spring Boot 支持使用 @Endpoint 來自定義端點(diǎn)暴露信息。

@Endpoint(id = "customEndPoint")
@Component
public class CustomEndPoint {

    @ReadOperation
    public Map<String, Object> getInfo() {
        Map<String, Object> dataMap = new LinkedHashMap<>();
        dataMap.put("自定義信息", "custom endpoint ");
        return dataMap;
    }
}

請求 http://localhost:8062/boot/actuator/customEndPoint 的結(jié)果為

{
    "自定義信息": "custom endpoint "
}

可用的方法注解由 HTTP 操作所決定:

operation HTTP 方法
@ReadOperation GET
@WriteOperation POST
@DeleteOperation DELETE
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內(nèi)容