diff --git a/README.md b/README.md index 8831cd78..88944446 100644 --- a/README.md +++ b/README.md @@ -65,8 +65,8 @@ ## 监控管理 * [《芋道 Spring Boot 监控端点 Actuator 入门》](http://www.iocoder.cn/Spring-Boot/Actuator/?github) 对应 [lab-34](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-34) 。 -* [《芋道 Spring Boot 监控系统 Admin 入门》](http://www.iocoder.cn/Spring-Boot/Admin/?github) 对应 [lab-35](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-35) 。 -* [《芋道 Spring Boot 监控平台 Prometheus + Grafana 入门》](http://www.iocoder.cn/Spring-Boot/Prometheus-Grafana/?github) 对应 [lab-36](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-36) 。 +* [《芋道 Spring Boot 监控工具 Admin 入门》](http://www.iocoder.cn/Spring-Boot/Admin/?github) 对应 [lab-35](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-35) 。 +* [《芋道 Spring Boot 监控平台 Prometheus + Grafana 入门》](http://www.iocoder.cn/Spring-Boot/Prometheus-and-Grafana/?github) 对应 [lab-36](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-36) 。 ## 日志管理 @@ -77,6 +77,7 @@ * [《芋道 Spring Boot 链路追踪 SkyWalking 入门》](http://www.iocoder.cn/Spring-Boot/SkyWalking/?github) 对应 [lab-37](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-37) 。 * [《芋道 Spring Boot 链路追踪 Zipkin 入门》](http://www.iocoder.cn/Spring-Boot/Zipkin/?github) 对应 [lab-38](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-38) 。 +* [《芋道 Spring Boot 链路追踪 Pinpoint 入门》](http://www.iocoder.cn/Spring-Boot/Pinpoint/?github) 对应 [lab-39](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-38) 。 ## 性能测试 diff --git a/lab-35/lab-35-admin-02-adminserver/src/main/resources/application.yaml b/lab-35/lab-35-admin-02-adminserver/src/main/resources/application.yaml index c9abd7f9..46f0dc1d 100644 --- a/lab-35/lab-35-admin-02-adminserver/src/main/resources/application.yaml +++ b/lab-35/lab-35-admin-02-adminserver/src/main/resources/application.yaml @@ -2,4 +2,4 @@ eureka: client: service-url: defaultZone: http://127.0.0.1:8761/eureka - register-with-eureka: false + register-with-eureka: false # 不注册到 Eureka 中 diff --git a/lab-35/lab-35-admin-02-demo-application/src/main/java/cn/iocoder/springboot/lab35/demo/Demo01Application.java b/lab-35/lab-35-admin-02-demo-application/src/main/java/cn/iocoder/springboot/lab35/demo/Demo01Application.java index a06795f3..620f55ec 100644 --- a/lab-35/lab-35-admin-02-demo-application/src/main/java/cn/iocoder/springboot/lab35/demo/Demo01Application.java +++ b/lab-35/lab-35-admin-02-demo-application/src/main/java/cn/iocoder/springboot/lab35/demo/Demo01Application.java @@ -9,7 +9,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; public class Demo01Application { public static void main(String[] args) { - System.setProperty("server.port", "18081"); + System.setProperty("server.port", "18081"); // 端口 18081 SpringApplication.run(Demo01Application.class, args); } diff --git a/lab-35/lab-35-admin-02-demo-application/src/main/java/cn/iocoder/springboot/lab35/demo/Demo02Application.java b/lab-35/lab-35-admin-02-demo-application/src/main/java/cn/iocoder/springboot/lab35/demo/Demo02Application.java index 38e70956..855d0438 100644 --- a/lab-35/lab-35-admin-02-demo-application/src/main/java/cn/iocoder/springboot/lab35/demo/Demo02Application.java +++ b/lab-35/lab-35-admin-02-demo-application/src/main/java/cn/iocoder/springboot/lab35/demo/Demo02Application.java @@ -9,7 +9,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; public class Demo02Application { public static void main(String[] args) { - System.setProperty("server.port", "18082"); + System.setProperty("server.port", "18082"); // 端口 18082 SpringApplication.run(Demo02Application.class, args); } diff --git a/lab-35/lab-35-admin-02-eurekaserver/pom.xml b/lab-35/lab-35-admin-02-eurekaserver/pom.xml index 1385c45f..ed8af613 100644 --- a/lab-35/lab-35-admin-02-eurekaserver/pom.xml +++ b/lab-35/lab-35-admin-02-eurekaserver/pom.xml @@ -13,6 +13,7 @@ lab-35-admin-02-eurekaserver + org.springframework.cloud spring-cloud-starter-netflix-eureka-server diff --git a/lab-35/lab-35-admin-02-eurekaserver/src/main/resources/application.yaml b/lab-35/lab-35-admin-02-eurekaserver/src/main/resources/application.yaml index 1092425c..0c100e4a 100644 --- a/lab-35/lab-35-admin-02-eurekaserver/src/main/resources/application.yaml +++ b/lab-35/lab-35-admin-02-eurekaserver/src/main/resources/application.yaml @@ -1,13 +1,11 @@ spring: application: - name: eureka-server + name: eureka-server # 应用名 server: - port: 8761 + port: 8761 # 自定义服务器端口,避免冲突 eureka: client: -# service-url: -# defaultZone: http://127.0.0.1:8761/eureka/ - register-with-eureka: false - fetch-registry: false + register-with-eureka: false # 不注册到 Eureka 中 + fetch-registry: false # 不从 Eureka 拉取注册信息 diff --git a/lab-35/lab-35-admin-03-adminserver/pom.xml b/lab-35/lab-35-admin-03-adminserver/pom.xml new file mode 100644 index 00000000..a9f4516c --- /dev/null +++ b/lab-35/lab-35-admin-03-adminserver/pom.xml @@ -0,0 +1,35 @@ + + + + org.springframework.boot + spring-boot-starter-parent + 2.2.2.RELEASE + + + 4.0.0 + + lab-35-admin-03-adminserver + + + + + + de.codecentric + spring-boot-admin-starter-server + 2.2.0 + + + + + org.springframework.boot + spring-boot-starter-security + + + + diff --git a/lab-35/lab-35-admin-03-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/AdminServerApplication.java b/lab-35/lab-35-admin-03-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/AdminServerApplication.java new file mode 100644 index 00000000..4880d840 --- /dev/null +++ b/lab-35/lab-35-admin-03-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/AdminServerApplication.java @@ -0,0 +1,15 @@ +package cn.iocoder.springboot.lab35.adminserver; + +import de.codecentric.boot.admin.server.config.EnableAdminServer; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +@EnableAdminServer +public class AdminServerApplication { + + public static void main(String[] args) { + SpringApplication.run(AdminServerApplication.class, args); + } + +} diff --git a/lab-35/lab-35-admin-03-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/config/SecurityConfig.java b/lab-35/lab-35-admin-03-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/config/SecurityConfig.java new file mode 100644 index 00000000..38482c12 --- /dev/null +++ b/lab-35/lab-35-admin-03-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/config/SecurityConfig.java @@ -0,0 +1,46 @@ +package cn.iocoder.springboot.lab35.adminserver.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity; +import org.springframework.security.config.web.server.ServerHttpSecurity; +import org.springframework.security.core.userdetails.MapReactiveUserDetailsService; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.web.server.SecurityWebFilterChain; + +@Configuration +@EnableWebFluxSecurity // 开启 Security 对 WebFlux 的安全功能 +public class SecurityConfig { + + @Bean + public MapReactiveUserDetailsService userDetailsService() { + // 创建一个用户 + UserDetails user = User.withDefaultPasswordEncoder() + .username("user") + .password("user") + .roles("USER") + .build(); + + // 如果胖友有更多用户的诉求,这里可以继续创建 + + // 创建 MapReactiveUserDetailsService + return new MapReactiveUserDetailsService(user); + } + + @Bean + public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) { + http.authorizeExchange(exchanges -> // 设置权限配置 + exchanges + .pathMatchers("/assets/**").permitAll() // 静态资源,允许匿名访问 + .pathMatchers("/login").permitAll() // 登陆接口,允许匿名访问 + .anyExchange().authenticated() // + ) + .formLogin().loginPage("/login") // 登陆页面 + .and().logout().logoutUrl("/logout") // 登出界面 + .and().httpBasic() // HTTP Basic 认证方式 + .and().csrf().disable(); // csrf 禁用 + return http.build(); + } + +} diff --git a/lab-35/lab-35-admin-03-adminserver/target/classes/META-INF/lab-35-admin-01-adminserver.kotlin_module b/lab-35/lab-35-admin-03-adminserver/target/classes/META-INF/lab-35-admin-01-adminserver.kotlin_module new file mode 100644 index 00000000..2983af70 Binary files /dev/null and b/lab-35/lab-35-admin-03-adminserver/target/classes/META-INF/lab-35-admin-01-adminserver.kotlin_module differ diff --git a/lab-35/lab-35-admin-03-demo-application/pom.xml b/lab-35/lab-35-admin-03-demo-application/pom.xml new file mode 100644 index 00000000..d6f1f124 --- /dev/null +++ b/lab-35/lab-35-admin-03-demo-application/pom.xml @@ -0,0 +1,43 @@ + + + + org.springframework.boot + spring-boot-starter-parent + 2.2.2.RELEASE + + + 4.0.0 + + lab-35-admin-03-demo-application + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + de.codecentric + spring-boot-admin-starter-client + 2.2.0 + + + + + org.springframework.boot + spring-boot-starter-security + + + + + diff --git a/lab-35/lab-35-admin-03-demo-application/src/main/java/cn/iocoder/springboot/lab35/demo/DemoApplication.java b/lab-35/lab-35-admin-03-demo-application/src/main/java/cn/iocoder/springboot/lab35/demo/DemoApplication.java new file mode 100644 index 00000000..2ac2d631 --- /dev/null +++ b/lab-35/lab-35-admin-03-demo-application/src/main/java/cn/iocoder/springboot/lab35/demo/DemoApplication.java @@ -0,0 +1,13 @@ +package cn.iocoder.springboot.lab35.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class DemoApplication { + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } + +} diff --git a/lab-35/lab-35-admin-03-demo-application/src/main/resources/application.yaml b/lab-35/lab-35-admin-03-demo-application/src/main/resources/application.yaml new file mode 100644 index 00000000..f8ba4980 --- /dev/null +++ b/lab-35/lab-35-admin-03-demo-application/src/main/resources/application.yaml @@ -0,0 +1,31 @@ +management: + endpoints: + # Actuator HTTP 配置项,对应 WebEndpointProperties 配置类 + web: + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +spring: + application: + name: demo-application # 应用名 + + # Spring Security 配置项,对应 SecurityProperties 配置类 + security: + # 配置默认的 InMemoryUserDetailsManager 的用户账号与密码。 + user: + name: test # 账号 + password: test # 密码 + + boot: + admin: + client: + url: http://127.0.0.1:8080 # Spring Boot Admin Server 地址 + username: user # Spring Boot Admin Server 的认证账号 + password: user # Spring Boot Admin Server 的认证密码 + instance: + metadata: + user.name: ${spring.security.user.name} # Actuator 端点的认证账号 + user.password: ${spring.security.user.password} # Actuator 端点的认证密码 + +server: + port: 18080 # 设置自定义 Server 端口,避免和 Spring Boot Admin Server 端口冲突。 diff --git a/lab-35/lab-35-admin-03-demo-application/target/classes/META-INF/lab-35-admin-01-demo-application.kotlin_module b/lab-35/lab-35-admin-03-demo-application/target/classes/META-INF/lab-35-admin-01-demo-application.kotlin_module new file mode 100644 index 00000000..2983af70 Binary files /dev/null and b/lab-35/lab-35-admin-03-demo-application/target/classes/META-INF/lab-35-admin-01-demo-application.kotlin_module differ diff --git a/lab-35/lab-35-admin-03-demo-application/target/classes/application.yaml b/lab-35/lab-35-admin-03-demo-application/target/classes/application.yaml new file mode 100644 index 00000000..f8ba4980 --- /dev/null +++ b/lab-35/lab-35-admin-03-demo-application/target/classes/application.yaml @@ -0,0 +1,31 @@ +management: + endpoints: + # Actuator HTTP 配置项,对应 WebEndpointProperties 配置类 + web: + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +spring: + application: + name: demo-application # 应用名 + + # Spring Security 配置项,对应 SecurityProperties 配置类 + security: + # 配置默认的 InMemoryUserDetailsManager 的用户账号与密码。 + user: + name: test # 账号 + password: test # 密码 + + boot: + admin: + client: + url: http://127.0.0.1:8080 # Spring Boot Admin Server 地址 + username: user # Spring Boot Admin Server 的认证账号 + password: user # Spring Boot Admin Server 的认证密码 + instance: + metadata: + user.name: ${spring.security.user.name} # Actuator 端点的认证账号 + user.password: ${spring.security.user.password} # Actuator 端点的认证密码 + +server: + port: 18080 # 设置自定义 Server 端口,避免和 Spring Boot Admin Server 端口冲突。 diff --git a/lab-35/lab-35-admin-04-adminserver/pom.xml b/lab-35/lab-35-admin-04-adminserver/pom.xml new file mode 100644 index 00000000..439ac519 --- /dev/null +++ b/lab-35/lab-35-admin-04-adminserver/pom.xml @@ -0,0 +1,36 @@ + + + + org.springframework.boot + spring-boot-starter-parent + 2.2.2.RELEASE + + + 4.0.0 + + lab-35-admin-04-adminserver + + + + + + de.codecentric + spring-boot-admin-starter-server + 2.2.0 + + + + + org.springframework.boot + spring-boot-starter-mail + + + + + diff --git a/lab-35/lab-35-admin-04-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/AdminServerApplication.java b/lab-35/lab-35-admin-04-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/AdminServerApplication.java new file mode 100644 index 00000000..4880d840 --- /dev/null +++ b/lab-35/lab-35-admin-04-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/AdminServerApplication.java @@ -0,0 +1,15 @@ +package cn.iocoder.springboot.lab35.adminserver; + +import de.codecentric.boot.admin.server.config.EnableAdminServer; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +@EnableAdminServer +public class AdminServerApplication { + + public static void main(String[] args) { + SpringApplication.run(AdminServerApplication.class, args); + } + +} diff --git a/lab-35/lab-35-admin-04-adminserver/src/main/resources/application.yaml b/lab-35/lab-35-admin-04-adminserver/src/main/resources/application.yaml new file mode 100644 index 00000000..a0df428f --- /dev/null +++ b/lab-35/lab-35-admin-04-adminserver/src/main/resources/application.yaml @@ -0,0 +1,13 @@ +spring: + mail: # 配置发送告警的邮箱 + host: smtp.126.com + username: wwbmlhh@126.com + password: '******' + default-encoding: UTF-8 + + boot: + admin: + notify: + mail: + from: ${spring.mail.username} # 告警发件人 + to: 7685413@qq.com # 告警收件人 diff --git a/lab-35/lab-35-admin-04-adminserver/target/classes/META-INF/lab-35-admin-02-adminserver.kotlin_module b/lab-35/lab-35-admin-04-adminserver/target/classes/META-INF/lab-35-admin-02-adminserver.kotlin_module new file mode 100644 index 00000000..2983af70 Binary files /dev/null and b/lab-35/lab-35-admin-04-adminserver/target/classes/META-INF/lab-35-admin-02-adminserver.kotlin_module differ diff --git a/lab-35/lab-35-admin-04-adminserver/target/classes/application.yaml b/lab-35/lab-35-admin-04-adminserver/target/classes/application.yaml new file mode 100644 index 00000000..42f4fdcf --- /dev/null +++ b/lab-35/lab-35-admin-04-adminserver/target/classes/application.yaml @@ -0,0 +1,13 @@ +spring: + mail: + host: smtp.126.com + username: wwbmlhh@126.com + password: wwb3743 + default-encoding: UTF-8 + + boot: + admin: + notify: + mail: + from: wwbmlhh@126.com + to: 7685413@qq.com diff --git a/lab-35/lab-35-admin-05-adminserver/pom.xml b/lab-35/lab-35-admin-05-adminserver/pom.xml new file mode 100644 index 00000000..afb618e3 --- /dev/null +++ b/lab-35/lab-35-admin-05-adminserver/pom.xml @@ -0,0 +1,29 @@ + + + + org.springframework.boot + spring-boot-starter-parent + 2.2.2.RELEASE + + + 4.0.0 + + lab-35-admin-05-adminserver + + + + + + de.codecentric + spring-boot-admin-starter-server + 2.2.0 + + + + diff --git a/lab-35/lab-35-admin-05-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/AdminServerApplication.java b/lab-35/lab-35-admin-05-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/AdminServerApplication.java new file mode 100644 index 00000000..4880d840 --- /dev/null +++ b/lab-35/lab-35-admin-05-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/AdminServerApplication.java @@ -0,0 +1,15 @@ +package cn.iocoder.springboot.lab35.adminserver; + +import de.codecentric.boot.admin.server.config.EnableAdminServer; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +@EnableAdminServer +public class AdminServerApplication { + + public static void main(String[] args) { + SpringApplication.run(AdminServerApplication.class, args); + } + +} diff --git a/lab-35/lab-35-admin-05-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/notify/LoggerNotifier.java b/lab-35/lab-35-admin-05-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/notify/LoggerNotifier.java new file mode 100644 index 00000000..9a8409e4 --- /dev/null +++ b/lab-35/lab-35-admin-05-adminserver/src/main/java/cn/iocoder/springboot/lab35/adminserver/notify/LoggerNotifier.java @@ -0,0 +1,34 @@ +package cn.iocoder.springboot.lab35.adminserver.notify; + +import de.codecentric.boot.admin.server.domain.entities.Instance; +import de.codecentric.boot.admin.server.domain.entities.InstanceRepository; +import de.codecentric.boot.admin.server.domain.events.InstanceEvent; +import de.codecentric.boot.admin.server.domain.events.InstanceStatusChangedEvent; +import de.codecentric.boot.admin.server.notify.AbstractEventNotifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import reactor.core.publisher.Mono; + +@Component +public class LoggerNotifier extends AbstractEventNotifier { + + private Logger logger = LoggerFactory.getLogger(getClass()); + + public LoggerNotifier(InstanceRepository repository) { + super(repository); + } + + @Override + protected Mono doNotify(InstanceEvent event, Instance instance) { + return Mono.fromRunnable(() -> { + if (event instanceof InstanceStatusChangedEvent) { + logger.info("Instance {} ({}) is {}", instance.getRegistration().getName(), event.getInstance(), + ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus()); + } else { + logger.info("Instance {} ({}) {}", instance.getRegistration().getName(), event.getInstance(), event.getType()); + } + }); + } + +} diff --git a/lab-35/lab-35-admin-05-adminserver/target/classes/META-INF/lab-35-admin-01-adminserver.kotlin_module b/lab-35/lab-35-admin-05-adminserver/target/classes/META-INF/lab-35-admin-01-adminserver.kotlin_module new file mode 100644 index 00000000..2983af70 Binary files /dev/null and b/lab-35/lab-35-admin-05-adminserver/target/classes/META-INF/lab-35-admin-01-adminserver.kotlin_module differ diff --git a/lab-35/pom.xml b/lab-35/pom.xml index adf758a1..49df4e0b 100644 --- a/lab-35/pom.xml +++ b/lab-35/pom.xml @@ -18,6 +18,12 @@ lab-35-admin-02-adminserver lab-35-admin-02-demo-application lab-35-admin-02-eurekaserver + + lab-35-admin-03-adminserver + lab-35-admin-03-demo-application + + lab-35-admin-04-adminserver + lab-35-admin-05-adminserver