一、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 详解》