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

arcstack约 1815 字大约 6 分钟

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提供的主要功能

  • 显示健康状况

  • 显示详细信息,例如 * JVM和内存指标

  • micrometer.io指标

  • 数据源指标

  • 缓存指标

  • 显示构建信息编号

  • 关注并下载日志文件

  • 查看jvm系统和环境属性

  • 查看Spring Boot配置属性

  • 支持Spring Cloud的postable / env-和/ refresh-endpoint

  • 轻松的日志级管理

  • 与JMX-beans交互

  • 查看线程转储

  • 查看http跟踪

  • 查看auditevents

  • 查看http-endpoints

  • 查看计划任务

  • 查看和删除活动会话(使用spring-session)

  • 查看Flyway / Liquibase数据库迁移

  • 下载heapdump

  • 状态变更通知(通过电子邮件,Slack,Hipchat,…)

  • 状态更改的事件日志(非持久性)

更多的可以参考 在新窗口打开open in new window

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

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

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

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

springboot-admin-1.png
springboot-admin-1.png

SpringBoot Admin的Client和Server?

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

SBA Server: 包括Admin用户界面并独立运行于被监控应用 SBA Client: 提供一种方式将被监控应用注册到 SBA Server

  • 为什么Spring Boot Admin设计上会分为Server和Client两个部分

  • 首先,Spring Boot Admin做的是集中化的监控(比如应用的集群,多个服务或者微服务等),而不是每个应用都需要有一个UI。

  • 其次,被监控的应用应该是和监控平台是分离的,比如Client应用会挂掉,这时候Server监控依然正常运行并发现和报警Client的异常状态。

  • 再者,还要考虑和其它语言应用,其它平台等的集成等。

  • 只能通过SBA Client注册到SBA Server吗

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

  • Spring Cloud Discovery: 为了支持一些微服务框架如SpringCloud等(因为微服务框架中已经包含了服务发现和注册模块)
  • 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,很显然目前没有客户端注册上来。

springboot-admin-2.png
springboot-admin-2.png

注册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

springboot-admin-9.png 左侧是主要功能: Insight - Details

springboot-admin-3.png Insight - Metrics

springboot-admin-4.png Insight - Configurations

springboot-admin-5.png Loggers

springboot-admin-6.png JVM

springboot-admin-7.png Mappings

springboot-admin-8.png
springboot-admin-8.png

进一步理解

我们再通过一些问题来帮助你更深入理解SBA, 更详细的内容可以参考官网文档 在新窗口打开open in new window 。@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相关的连接

springboot-admin-10.png
springboot-admin-10.png

如何显示日志内容?

默认下没有显示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就可以看到增加了日志文件相关的连接

springboot-admin-11.png
springboot-admin-11.png

如何继承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();
        }
    }

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

如何通知告警信息?

可以通过集成 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,比如钉钉,微信通知等

springboot-admin-12.png
springboot-admin-12.png

源码示例

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

参考文章

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

上次编辑于:
贡献者: javatodo