一、Actuator監控
1.1、Actuator簡介
按照慣例,都先簡單做做介紹:
Spring Boot Actuator可以幫助你監控和管理Spring Boot應用,比如健康檢查、審計、統計和HTTP追蹤等。所有的這些特性可以通過JMX或者HTTP endpoints來獲得。
《Spring Boot Actuator:健康檢查、審計、統計和監控》
其中,springboot-actuator提供了很多系統的監控端點,如下所示:
函數名 | 描述 | 是否敏感 |
---|---|---|
autoconfig | 顯示一個auto-configuration的報告,該報告展示所有auto-configuration候選者及它們被應用或未被應用的原因 | true |
beans | 顯示一個應用中所有Spring Beans的完整列表 | true |
configprops | 顯示一個所有@ConfigurationProperties的整理列表 | true |
dump | 執行一個線程轉儲 | true |
env | 暴露來自SpringConfigurableEnvironment的屬性 | true |
health | 展示應用的健康信息(當使用一個未認證連接訪問時顯示一個簡單的’status’,使用認證連接訪問則顯示全部信息詳情) | false |
info | 顯示任意的應用信息 | false |
metrics | 展示當前應用的’指標’信息 | true |
mappings | 顯示一個所有@RequestMapping路徑的整理列表 | true |
shutdown | 允許應用以優雅的方式關閉(默認情況下不啓用) | true |
trace | 顯示trace信息(默認爲最新的一些HTTP請求) | true |
1.2、Actuator相關使用
接下來我們說SpringCloud中怎麼去用這些。
首先我們需要創建一個Springcloud的相關工程,並註冊至註冊中心中。
該監控方式也可用於Springboot項目中。
添加新的依賴pom:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
完整的依賴文件配置爲:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.linkpower</groupId>
<artifactId>SpringCloud-Actuator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SpringCloud-Actuator</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<!-- 管理依賴 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- SpringBoot整合Web組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot整合eureka客戶端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 加入feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 客戶端健康檢查組件依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<!-- 注意: 這裏必須要添加, 否者各種依賴有問題 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
除了引用上述的依賴文件外,我們還需要進行配置文件的編寫,比如註冊至註冊中心,以及安全配置訪問端口等。
###服務啓動端口號
server:
port: 8888
###服務名稱(服務註冊到eureka名稱)
spring:
application:
name: springcloud-actuator-demo
#security:
#user:
# name: xiangjiao
#password: bunana
##feign中使用斷路器,默認是沒有開啓的,需要在配置文件中開啓
feign:
hystrix:
enabled: true
###服務註冊到eureka地址
eureka:
client:
registry-fetch-interval-seconds: 20
#registryFetchIntervalSeconds: 20
service-url:
defaultZone: http://localhost:10000/eureka/
#自己是服務,需要註冊至服務註冊中心上
register-with-eureka: true
#如果需要通信,必須運行此服務可以拉去別的服務的註冊信息
fetch-registry: true
instance:
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
#Eureka客戶端向服務端發送心跳的時間間隔,單位爲秒(客戶端告訴服務端自己會按照該規則),默認30
lease-renewal-interval-in-seconds: 5
#Eureka服務端在收到最後一次心跳之後等待的時間上限,單位爲秒,超過則剔除(客戶端告訴服務端按照此規則等待自己),默認90
lease-expiration-duration-in-seconds: 7
##增加Actuator相關配置
management.server.port: 8889 ##管理端口調整爲 8889,獨立的端口可以作安全控制
## actuator的訪問路徑(修改訪問路徑,2.0之前默認是/,2.0默認是/actuator)
management.endpoints.web.base-path: /xiangjiao
#開放所有頁面節點 默認只開啓了health、info兩個節點
management.endpoints.web.exposure.include: "*"
#公開中的所有端點,除去 env
management.endpoints.web.exposure.exclude: "env"
#顯示健康具體信息 默認不會顯示詳細信息
management.endpoint.health.show-details: always
2.0前後變化很多的,這裏只列出了基本常用配置。
參考博客:《springboot 2.0 運行狀態監控使用 Actuator》
其實這時候啓動項目,進行訪問操作就能得到部分數據,但是我們多加幾個類,看其能否實現監控操作。
正常註冊後,我們訪問會出現:
此時我們查看Actuator監控信息。
http://localhost:8889/xiangjiao
單個訪問試試:
http://localhost:8889/xiangjiao/beans
[注:]以上只列出部分截圖!
[問:]management.endpoints.web.exposure.include: “*” 配置後啓動報錯!且項目無法啓動!
採取如下配置:
management.endpoints.web.exposure.include: “*”
management.endpoints.web.exposure.exclude: “env”
一定要求開啓所有配置後,並去除一個不相關的配置即可!
我也不知道原因爲什麼,但源碼中和《Springboot Actuator 官方配置文檔》中也未做相關說明!
參考文獻:《Springboot Actuator 官方配置文檔》
[注:]代碼在文章底部提供鏈接下載。
二、Admin監控
我們上面採取的Actuator監控方式,返回的是一個JSON類型的數據值,並不具有高可視化的優勢。
我們可以採取另外一種UI效果的工具進行數據的監控顯示。
2.1、Admin簡介
Spring Boot Admin 是一個管理和監控Spring Boot 應用程序的開源軟件,它針對springboot的actuator接口進行UI美化封裝。
2.2、Admin的配置和使用
既然作爲監控操作,我們玩Admin時,需要先創建一個服務端。
2.3、Admin Server的創建
SpringCloud-Admin-Server的創建:
主要依賴:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.0</version>
</dependency>
整體依賴:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.linkpower</groupId>
<artifactId>SpringCloud-Actuator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SpringCloud-Actuator</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<!-- SpringBoot Admin依賴(ui圖像化監控) -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
<!-- 注意: 這裏必須要添加, 否者各種依賴有問題 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在啓動類上新增註解:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import de.codecentric.boot.admin.server.config.EnableAdminServer;
@SpringBootApplication
@EnableAdminServer //開啓admin ui顯示監控信息
public class StartApplication7777 {
public static void main(String[] args) {
SpringApplication.run(StartApplication7777.class, args);
}
}
這裏的demo配置的端口號信息爲:7777
###服務啓動端口號
server.port: 7777
啓動 SpringCloud-Admin-Server 項目,訪問鏈接:localhost:7777
http://localhost:7777
此時的我們,並沒有可以監控的子項目。所以我們需要創建一個能有數據的子項目。
2.4、Admin Client項目的創建
本次的配置,我們依舊使用SpringCloud-Actuator項目進行配置操作。
再原有的項目中我們新增一個依賴文件。
<!-- 添加Client -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.0</version>
</dependency>
由於是將 Actuator 的JSON信息以更美觀的UI形式進行展示,我們之前引入的 Actuator 依賴也是比不可或缺的。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
此時,我們修改原有的配置文件信息。
#admin需要新增下列註解(上報actuator提供的接口數據)
spring.boot.admin.client.url: http://localhost:7777
完整的配置信息,再文章末尾處展示下載地址。
運行項目並註冊至Eureka註冊中心後,我們會發現頁面內容出現變更:
那麼這麼數據我們如何去查看呢?
2.5、參考文章
《Spring Boot Admin 2.1.0 全攻略》
《Spring Boot admin 2.0 詳解》