Spring Boot Admin

Spring Boot Admin 是一个管理和监控 Spring Boot 应用程序的开源软件,每个应用都认为是一个客户端,通过 HTTP 或者使用 Eureka 注册到 admin server 中进行展示,Spring Boot Admin UI 部分使用 Vue.js 将数据展示在前端。

一、Spring Boot Admin 分为:

   服务端是一个监控后台用来汇总展示所有的监控信息

     客户端就是具体的应用

1.server和client的模式

(1)server端

  添加依赖

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

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

  配置

server.port=8000
spring.application.name=Admin Server

  启动类

package com.example.management;

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableAdminServer
public class ManagementApplication {

    public static void main(String[] args) {
        SpringApplication.run(ManagementApplication.class, args);
    }
}

(2)client端

  添加依赖

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

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

  配置

server.port=8001
spring.application.name=Admin Client

spring.boot.admin.client.url=http://localhost:8000
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

  启动类

package com.example.client;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(ClientApplication.class, args);
    }
}

注:

  使用时需要先启动服务端,在启动客户端的时候打开 Actuator 的接口,并指向服务端的地址

2.基于springcloud的模式 

在server端加入@EnableDiscoveryClient注解,spring boot admin就会主动去拉取注册中心的注册服务列表,从而获取他们的服务动态信息

注册中心使用Eureka

(1)注册中心Center

  添加依赖

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
      <version>2.1.3.RELEASE</version>
</dependency>

  配置

server.port=8761
spring.application.name=Center

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.default-zone=http://localhost:8761/eureka/

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

  启动类,添加@EnableEurekaServer注解,开启Eureka Server

package com.example.center;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class CenterApplication {

    public static void main(String[] args) {
        SpringApplication.run(CenterApplication.class, args);
    }
}

  启动,访问http://localhost:8761/

还没有服务向注册中心注册服务

(2)Admin server

  依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

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

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
     <version>2.1.3.RELEASE</version>
</dependency>

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

  配置

server.port=8000
spring.application.name=Admin Server

eureka.instance.lease-renewal-interval-in-seconds=10
eureka.instance.health-check-url-path=/actuator/health
eureka.client.registry-fetch-interval-seconds=5
eureka.client.service-url.default-zone=${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/

spring.thymeleaf.check-template-location=false

  启动类,添加@EnableDiscoveryClient注解,开启DiscoveryClient的功能

package com.example.management;

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableAdminServer
@EnableDiscoveryClient
public class ManagementApplication {

    public static void main(String[] args) {
        SpringApplication.run(ManagementApplication.class, args);
    }
}

(2)Admin Client

  依赖

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

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

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>

  配置

server.port=8001
spring.application.name=Admin Client

eureka.instance.lease-renewal-interval-in-seconds=10
eureka.instance.health-check-url-path=/actuator/health
eureka.client.registry-fetch-interval-seconds=5
eureka.client.service-url.default-zone=${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

  启动类

package com.example.client;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class ClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(ClientApplication.class, args);
    }
}

依次启动服务Center,Admin Client,Admin Server

http://localhost:8761/

http://localhost:8000/

注册到注册中心的服务都会被监控

 

二、集成了登录模块

  登录界面默认集成到了spring security模块

  在Admin server里

  添加依赖

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

  添加配置

spring.security.user.name=abc
spring.security.user.password=abc123

  添加配置类

package com.example.management.configure;

import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;

@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
    private final String adminContextPath;

    public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
        this.adminContextPath = adminServerProperties.getContextPath();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        http.authorizeRequests()
                .antMatchers(adminContextPath + "/assets/**").permitAll()
                .antMatchers(adminContextPath + "/login").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
                .logout().logoutUrl(adminContextPath + "/logout").and()
                .httpBasic().and()
                .csrf().disable();
    }
}

重新启动,http://localhost:8000,显示登录页面,输入配置的用户名密码

 

 

 三、监控邮件通知

  添加依赖

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

  添加配置

spring.mail.host=smtp.126.com
spring.mail.username=YYYYYYY@126.com
spring.mail.password=abcabc
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
# 发送给谁
spring.boot.admin.notify.mail.to=XXXXXXX@qq.com
# 是谁发送出去的
spring.boot.admin.notify.mail.from=YYYYYYY@126.com
spring.boot.admin.notify.mail.enabled=true

  配置完成后,重新启动,当服务上线下线的时候,指定的邮箱就可以收到邮件了

 说明:

  如果是下图,请添加配置

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

 

 监控的endpoint会都打开

 

posted @ 2019-09-24 22:39  慕尘  阅读(621)  评论(0编辑  收藏  举报