SpringBoot监控 - 集成springboot admin监控工具

上文中展示了SpringBoot提供了Actuator对应用进行监控和管理, 而Spring Boot Admin能够将 Actuator 中的信息进行界面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功能。 本文主要介绍springboot admin以及SpringBoot和springboot admin的集成。@pdai

知识准备

需要了解Spring Boot Admin和actuator之间的关系等。

什么是Spring Boot Admin?和actuator是什么关系?

Spring Boot Admin能够将 Actuator 中的信息进行界面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功能。

  • Spring Boot Admin提供的主要功能
  1. 显示健康状况
  2. 显示详细信息,例如
    1. JVM和内存指标
    2. micrometer.io指标
    3. 数据源指标
    4. 缓存指标
  3. 显示构建信息编号
  4. 关注并下载日志文件
  5. 查看jvm系统和环境属性
  6. 查看Spring Boot配置属性
  7. 支持Spring Cloud的postable / env-和/ refresh-endpoint
  8. 轻松的日志级管理
  9. 与JMX-beans交互
  10. 查看线程转储
  11. 查看http跟踪
  12. 查看auditevents
  13. 查看http-endpoints
  14. 查看计划任务
  15. 查看和删除活动会话(使用spring-session)
  16. 查看Flyway / Liquibase数据库迁移
  17. 下载heapdump
  18. 状态变更通知(通过电子邮件,Slack,Hipchat,…)
  19. 状态更改的事件日志(非持久性)

更多的可以参考在新窗口打开

  • Spring Boot Admin不是Spring团队提供的模块

它是由Codecentric公司创建的,代码在Github: spring-boot-admin在新窗口打开上。

  • Spring Boot Admin和actuator是什么关系?

从如下POM的依赖关系可以看出Spring Boot Admin本质上集成了actuator,将实时警报,此外添加一些实时警报功能等。

SpringBoot Admin的Client和Server?

Spring Boot Admin(简称SBA)由两部分组成:SBA ServerSBA Client

SBA Server: 包括Admin用户界面并独立运行于被监控应用

SBA Client: 提供一种方式将被监控应用注册到 SBA Server

  • 为什么Spring Boot Admin设计上会分为Server和Client两个部分
  1. 首先,Spring Boot Admin做的是集中化的监控(比如应用的集群,多个服务或者微服务等),而不是每个应用都需要有一个UI。
  2. 其次,被监控的应用应该是和监控平台是分离的,比如Client应用会挂掉,这时候Server监控依然正常运行并发现和报警Client的异常状态。
  3. 再者,还要考虑和其它语言应用,其它平台等的集成等。
  • 只能通过SBA Client注册到SBA Server吗

并不是, 除了SBA Client, SBA 还支持:

  1. Spring Cloud Discovery: 为了支持一些微服务框架如SpringCloud等(因为微服务框架中已经包含了服务发现和注册模块)
  2. Python Applications Using Pyctuator: 为了支持其它语言开发的应用,比如Python

简单示例

本例子主要展示SBA Server + SBA Client注册的方式。

启用SBA Server

pom引入包

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>2.5.3</version>
</dependency>

通过@EnableAdminServer注解启用SBA Server

/**
 * @author pdai
 */
@Configuration
@EnableAdminServer
@SpringBootApplication
public class SpringBootHelloWorldApplication {

    /**
     * main interface.
     *
     * @param args args
     */
    public static void main(String[] args) {
        SpringApplication.run(SpringBootHelloWorldApplication.class, args);
    }

}

这样你便可以打开如下网址查看Server UI,很显然目前没有客户端注册上来。

注册Client

这里采用Spring Boot Admin Client注册的方式。

引入SBA Client的pom依赖

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>2.5.3</version>
</dependency>

添加配置

spring:
  boot:
    admin:
      client:
        url: 'http://localhost:8080'
management:
  endpoints:
    enabled-by-default: true
    web:
      base-path: /manage
      exposure:
        include: '*'

演示效果

打开 http://localhost:8080/wallboard

左侧是主要功能:

Insight - Details

Insight - Metrics

Insight - Configurations

Loggers

JVM

Mappings

进一步理解

我们再通过一些问题来帮助你更深入理解SBA, 更详细的内容可以参考官网文档在新窗口打开。@pdai

如何启用JMX管理?

默认下SBA没有启用JMX,需要通过如下配置启用。

首先需要引入POM依赖(PS:需要SpringBoot2.2+ 版本)

<dependency>
    <groupId>org.jolokia</groupId>
    <artifactId>jolokia-core</artifactId>
</dependency>

启用JMX

spring:
  jmx:
    enabled: true

刷新SBA UI就可以看到增加了JMX相关的连接

如何显示日志内容?

默认下没有显示Log File的内容,如果需要显示SpringBoot应用日志需要进行如下配置(配置logging.file.path 或者logging.file.name)。

logging:
  file:
    name: 'pdai-spring-boot-application.log'
  pattern:
    file: '%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx'

刷新SBA UI就可以看到增加了日志文件相关的连接

如何继承Spring Security?

可以通过如下继承spring-boot-starter-security

添加pom依赖

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

添加HttpSecurity配置

@Configuration
public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll()  
            .and().csrf().disable();
    }
}

其它安全相关配置可以参考官网文档在新窗口打开

如何通知告警信息?

可以通过集成 spring-boot-starter-mail 配置JavaMailSender 来用邮件通知信息。

添加pom依赖

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

添加配置信息

spring.mail.host=smtp.example.com
spring.boot.admin.notify.mail.to=admin@example.com

除了邮件通知这种,内置还支持很多其他方式以及支持自定义notification,比如钉钉,微信通知等

源码示例

https://github.com/realpdai/tech-pdai-spring-demos

参考文章

https://github.com/codecentric/spring-boot-admin

https://codecentric.github.io/spring-boot-admin/current