spring-boot-admin性能监控(监控单体与微服务)

文章目录

  • 1 Spring Boot Actuator
    • 1.1 Actuator简介
    • 1.2 pom依赖
    • 1.3 Actuator 的 REST 接口(执行器端点)
    • 1.4 默认开放的S​​pring Actuator端点
    • 1.5 自定义/actuator/info数据
    • 1.6 自定义执行器端点基本路径
    • 1.7 暴露其他执行器端点
    • 1.8 执行器端点的Srping安全性
    • 1.9 Spring自定义执行器端点
  • 2 Spring Boot Admin
    • 2.1 来源背景
    • 2.2 功能介绍
    • 2.3 服务端admin-server
      • 2.3.1 pom.xml
      • 2.3.2 启动类
      • 2.3.3 配置文件
    • 2.4 客户端admin-client
      • 2.4.1 pom.xml
      • 2.3.2 启动类
      • 2.3.3 配置文件
  • 3 运行结果

1 Spring Boot Actuator

Spring Boot Actuator端点通过 JMX 和HTTP 公开暴露给外界访问,大多数时候我们使用基于HTTP的Actuator端点,因为它们很容易通过浏览器、CURL命令、shell脚本等方式访问。

1.1 Actuator简介

Spring Boot Actuator 提供了对单个 Spring Boot 应用的监控,信息包含应用状态、内存、线程、堆栈等,比较全面的监控了 Spring Boot 应用的整个生命周期,可以有效的帮我解决众多服务的健康检查、指标监控问题、配置管理、日志聚合问题、异常排查问题等等。

Spring Boot 的 Actuator 提供了很多生产级的特性,比如监控和度量Spring Boot 应用程序。

Actuator 的这些特性可以通过众多 REST 接口、远程 shell 和 JMX 获得。

1.2 pom依赖

要启用 Actuator 的端点,只要在项目中引入 Actuator 的依赖即可。对于 Maven 依赖,引入的依赖是这样的:

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-actuatorartifactId>
dependency>

1.3 Actuator 的 REST 接口(执行器端点)

一些比较有用的执行器端点是:

  • /beans:此端点返回应用程序中配置的所有bean的列表。
  • /env:提供有关Spring Environment属性的信息。
  • /health:显示应用程序运行状况
  • /info:显示应用程序信息,我们可以在Spring环境属性中配置它。
  • /mappings:显示所有 @RequestMapping 路径 的列表 。
  • /shutdown:允许我们正常关闭应用程序。
  • /threaddump:提供应用程序的线程转储。

获得Spring执行器端点的完整列表 。
https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints

Spring Boot Actuator 的关键特性是在应用程序里提供众多 Web 接口,通过它们了解应用程序运行时的内部状况。Actuator 提供了 13 个接口,可以分为三大类:配置接口、度量接口和其它接口,具体如下表所示。

HTTP 方法 路径 描述
GET /autoconfig 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过
GET /configprops 描述配置属性(包含默认值)如何注入Bean
GET /beans 描述应用程序上下文里全部的Bean,以及它们的关系
GET /dump 获取线程活动的快照
GET /env 获取全部环境属性
GET /env/{name} 根据名称获取特定的环境属性值
GET /health 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供
GET /info 获取应用程序的定制信息,这些信息由info打头的属性提供
GET /mappings 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系
GET /metrics 报告各种应用程序度量信息,比如内存用量和HTTP请求计数
GET /metrics/{name} 报告指定名称的应用程序度量值
POST /shutdown 关闭应用程序,要求endpoints.shutdown.enabled设置为true
GET /trace 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)

1.4 默认开放的S​​pring Actuator端点

当我们将Spring Actuator Dependencies添加到我们的依赖,然后启动项目,它会自动启用执行器端点,只有两个端点 - health 并 info 已映射。

注意:只有“/health”和“/info”端点暴露在没有任何安全性的情况下,为了访问其他端点我们需要配置Spring安全或者直接暴露接口。

o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'

1.5 自定义/actuator/info数据

/actuator/info下是没有数据的,这是因为我们还没有配置它们。 只需在 application.yml文件中添加以下属性即可

info:
  # 自定义
  app:
    name: Spring Actuator Example
    java:
      version: 1.8
    type: Spring Boot
  author: your name

重新启动应用程序,就能够获得上面信息了。

1.6 自定义执行器端点基本路径

默认情况下,执行器端点的基本路径是 /actuator ,我们可以通过 management.endpoints.web.base-path 在应用程序属性文件中 设置将其更改为任何其他值 。

management:
  endpoints:
    web:
      base-path: /actuator

1.7 暴露其他执行器端点

我们可以通过属性文件启用和禁用其他执行器端点。
如果要启用所有执行器端点,请添加以下属性。

# 健康显示全部信息
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

要仅启用特定的执行器端点,请提供端点ID列表。

include: health,info,beans,env

1.8 执行器端点的Srping安全性

因为其他端点信息的敏感性,我们需要将 Spring Security 依赖添加到我们的应用程序中,让其他端点至少需要基本的身份验证。

在应用程序中为spring security添加以下依赖项。
<dependency>
	<groupId>org.springframework.bootgroupId>
	<artifactId>spring-boot-starter-securityartifactId>
dependency>

另外,在应用程序属性文件中添加spring安全性用户名和密码。

spring.security.user.name=root
spring.security.user.password=root

重新启动应用程序。
现在,当尝试访问安全的执行器端点时,你必须提供登录凭据。

1.9 Spring自定义执行器端点

Spring Framework的一个重要特性是它很容易扩展。 我们可以使用 @Endpoint 类上的注释 创建自己的自定义执行器端点 。 然后我们必须 在方法上使用 @ReadOperation@WriteOperation@DeleteOperation 注释将它们公开为执行器端点bean。

我们可以使用 @JmxEndpoint@WebEndpoint 注释 创建特定于技术的端点 。

以下是我们自定义Spring执行器端点的示例。

import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Endpoint(id="myendpoint")
@Component
public class MyCustomEndpoints {

	@ReadOperation
	@Bean
	public String hi() {
		return "Hi from custom endpoint";
	}
}

是否注意到端点ID, 我们还需要在要启用的执行器端点列表中配置它。
更新 application.properties 文件中的 以下属性 。

include: health,info,beans,env,myendpoint

现在,当你启动应用程序时,请检查日志中映射的新端点。
访问:ip:port/actuator/myendpoint
在这里插入图片描述

2 Spring Boot Admin

2.1 来源背景

codecentric的Spring Boot Admin是一个社区项目,用于管理和监视您的Spring Boot®应用程序。这些应用程序在我们的Spring Boot Admin Client中注册(通过HTTP),或者是通过Spring Cloud®(例如Eureka,Consul)发现的。 UI只是Spring Boot Actuator端点之上的Vue.js应用程序。

2.2 功能介绍

Spring Boot Admin提供了很多服务治理方面的功能,利用它能节省我们很多在治理服务方面的时间和精力Spring Boot Admin提供了如下功能(包括但不限于):

  • 显示健康状态及详细信息,如JVM和内存指标、数据源指标、缓存指标
  • 跟踪并下载日志文件
  • 查看jvm系统-和环境属性
  • 查看Spring启动配置属性方便loglevel管理
  • 查看线程转储视图http-traces
  • 查看http端点查看计划任务
  • 查看和删除活动会话(使用spring-session)
  • 状态更改通知(通过电子邮件、Slack、Hipchat…)
  • 状态变化的事件日志(非持久性)
  • 下载 heapdump
  • 查看 Spring Boot 配置属性
  • 支持 Spring Cloud 的环境端点和刷新端点
  • 支持 K8s
  • 易用的日志级别管理
  • 与JMX-beans交互
  • 查看线程转储
  • 查看http跟踪
  • 查看auditevents
  • 查看http-endpoints
  • 查看计划任务
  • 查看和删除活动会话(使用 Spring Session )
  • 查看Flyway/Liquibase数据库迁移
  • 状态变更通知(通过电子邮件,Slack,Hipchat等,支持钉钉)
  • 状态更改的事件日志(非持久化)

2.3 服务端admin-server

2.3.1 pom.xml


<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-actuatorartifactId>
dependency>

<dependency>
    <groupId>de.codecentricgroupId>
    <artifactId>spring-boot-admin-starter-serverartifactId>
    <version>2.2.2version>
dependency>

<dependency>
    <groupId>de.codecentricgroupId>
    <artifactId>spring-boot-admin-starter-clientartifactId>
    <version>2.2.2version>
dependency>

 <dependency>
     <groupId>org.springframework.cloudgroupId>
     <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
 dependency>

2.3.2 启动类

@SpringBootApplication
@EnableDiscoveryClient
@EnableAdminServer
public class AdminServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminServerApplication.class,args);
    }
}

2.3.3 配置文件

没有注册中心则无需配置
有注册中心只需要注册即可,
admin-server会自动去注册中心拉去其他应用的健康信息。

eureka:
  instance:
    prefer-ip-address: true
  client:
    serviceUrl:
      defaultZone: http://root:root@localhost:8761/eureka/
spring:
  application:
    name: 14-admin-server
  security:
    user:
      password: root
      name: root
server:
  port: 8900

2.4 客户端admin-client

2.4.1 pom.xml








<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-actuatorartifactId>
dependency>

<dependency>
    <groupId>de.codecentricgroupId>
    <artifactId>spring-boot-admin-starter-clientartifactId>
    <version>2.2.2version>
dependency>

2.3.2 启动类

@SpringBootApplication
@EnableDiscoveryClient
public class XXXApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminServerApplication.class,args);
    }
}

2.3.3 配置文件

没有注册中心则需要以下配置

spring:
  boot:
    admin:
      client:
        url: http://ip:port
        username: root
        password: root

# 健康显示全部信息
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: ALWAYS

有注册中心,admin-server会自动去注册中心拉取当前应用的健康信息。

eureka:
  client:
    serviceUrl:
      defaultZone: http://root:root@localhost:8761/eureka/
  instance:
    prefer-ip-address: true # 显示ip
    
# 健康显示全部信息
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: ALWAYS

3 运行结果

spring-boot-admin性能监控(监控单体与微服务)_第1张图片
spring-boot-admin性能监控(监控单体与微服务)_第2张图片

你可能感兴趣的:(SpringBoot,springCloud,spring,boot,springCloud)