Spring Boot應用監控實戰

Spring Boot應用監控實戰

概述

以前講過 Docker容器可視化監控中心搭建,即監控容器的運行狀況,包括 CPU使用率、內存佔用、網絡情況以及磁盤空間等等一系列信息。一樣利用SpringBoot做爲微服務單元的實例化技術選型時,咱們不可避免的要面對的一個問題就是如何實時監控應用的運行情況數據,好比:健康度、運行指標、日誌信息、線程情況等等。本文就該問題作一點探索並記錄試驗過程。git

入門使用:Actuator插件

Actuator插件是SpringBoot原生提供的一個服務,能夠經過暴露端點路由,用來輸出應用中的諸多 端點信息。實戰一下!github

  • pom.xml中添加依賴:
<dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-actuator</artifactId>

    </dependency>

啓動Spring Boot應用程序以後,只要在瀏覽器中輸入端點信息就能得到應用的一些狀態信息。spring

經常使用端點列舉以下,能夠一個個詳細試一下:瀏覽器

  • /info        應用基本信息網絡

  • /health       健康度信息session

  • /metrics      運行指標ide

  • /env        環境變量信息spring-boot

  • /loggers      日誌相關微服務

  • /dump       線程相關信息工具

  • /trace       請求調用軌跡

固然此時只能使用 /health 和 /info端點,其餘由於權限問題沒法訪問。想訪問指定端點的話能夠在yml配置中添加相關的配置項,好比 /metrics端點則須要配置:

endpoints:

  metrics:

    sensitive: false

此時瀏覽器訪問/metrics端點就能獲得諸以下面所示的信息:

{

    "mem": 71529,

    "mem.free": 15073,

    "processors": 4,

    "instance.uptime": 6376,

    "uptime": 9447,

    "systemload.average": -1.0,

    "heap.committed": 48024,

    "heap.init": 16384,

    "heap.used": 32950,

    "heap": 506816,

    "nonheap.committed": 23840,

    "nonheap.init": 160,

    "nonheap.used": 23506,

    "nonheap": 0,

    "threads.peak": 25,

    "threads.daemon": 23,

    "threads.totalStarted": 28,

    "threads": 25,

    "classes": 6129,

    "classes.loaded": 6129,

    "classes.unloaded": 0,

    "gc.copy.count": 74,

    "gc.copy.time": 173,

    "gc.marksweepcompact.count": 3,

    "gc.marksweepcompact.time": 88,

    "httpsessions.max": -1,

    "httpsessions.active": 0

}

固然也能夠開啓所有端點權限,只需以下配置便可:

endpoints:

  sensitive: false

因爲Actuator插件提供的監控能力畢竟有限,並且UI比較簡陋,所以須要一個更加成熟一點的工具

Spring Boot Admin監控系統

SBA則是基於Actuator更加進化了一步,其是一個針對Actuator接口進行UI美化封裝的監控工具。咱們來實驗一下。

  • 首先來建立一個Spring Boot Admin Server工程做爲服務端

pom.xml中加入以下依賴:

<dependency>

    <groupId>de.codecentric</groupId>

    <artifactId>spring-boot-admin-server</artifactId>

    <version>1.5.7</version>

</dependency>

<dependency>

    <groupId>de.codecentric</groupId>

    <artifactId>spring-boot-admin-server-ui</artifactId>

    <version>1.5.7</version>

</dependency>

而後在應用主類上經過加註解來啓用Spring Boot Admin

@EnableAdminServer

@SpringBootApplication

public class SpringbtAdminServerApplication {

    public static void main(String[] args) {

        SpringApplication.run(SpringbtAdminServerApplication.class, args);

    }

}

啓動程序,瀏覽器打開 localhost:8081 查看Spring Boot Admin主頁面:

Spring Boot應用監控實戰

此時Application一欄空空如也,等待待監控的應用加入

  • 建立要監控的Spring Boot應用

pom.xml中加入如下依賴

<dependency>

    <groupId>de.codecentric</groupId>

    <artifactId>spring-boot-admin-starter-client</artifactId>

    <version>1.5.7</version>

</dependency>

而後在yml配置中添加以下配置,將應用註冊到Admin服務端去:

spring:

  boot:

    admin:

      url: http://localhost:8081

      client:

        name: AdminTest

Client應用一啓動,Admin服務立馬推送來了消息,告訴你AdminTest上線了:
Spring Boot應用監控實戰
此時去Admin主界面上查看,發現Client應用確實已經註冊上來了:

Spring Boot應用監控實戰

  • 查看Detail

Spring Boot應用監控實戰

  • 查看 Metrics

Spring Boot應用監控實戰

  • 查看 Enviroment
    Spring Boot應用監控實戰
  • 查看JMX

Spring Boot應用監控實戰

  • 查看Threads

Spring Boot應用監控實戰

  • 查看Trace與詳情

Spring Boot應用監控實戰

點擊最上方JOURNAL,會看到被監控應用程序的事件變化:

Spring Boot應用監控實戰

圖中能夠清晰地看到,應用從 REGISTRATION → UNKNOWN → UP 的狀態跳轉。

這樣就將Actuator插件提供的全部端點信息在SBA中所有嘗試了一遍。

參考文獻

後記

做者一些其餘容器化應用方面的文章:

  • Docker容器可視化監控中心搭建

  • 利用K8S技術棧打造我的私有云連載文章

  • 微服務調用鏈追蹤中心搭建

  • 利用ELK搭建Docker容器化應用日誌中心

更多務實、能看懂、可復現的 原創文章在公衆號CodeSheep

Spring Boot應用監控實戰

相關文章
相關標籤/搜索