Commit 5b8d9d20 by 宋珺琪

添加admin 服务监控

parent aedbdd8f
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.founder</groupId>
<artifactId>monitoring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>monitoring</name>
<description>SpringBoot系列——admin服务监控</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<!--用于检查系统的监控情况-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- spring-boot-starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- springboot web(MVC)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入admin相关依赖 2.2.0页面支持中文显示,需要springboot 2.2.0 -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.2.0</version>
</dependency>
<!--springboot security 安全相关-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!--
报错:java.lang.IllegalStateException: Calling [asyncError()] is not valid for a request with Async state [MUST_DISPATCH]
解决:移除tomcat,换成jetty
-->
<!-- <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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>-->
<!--去除内嵌tomcat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-websocket -->
<!--websocket依赖包-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
</dependency>
</dependencies>
<build>
<finalName>monitoring10010</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.founder.monitoring;
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@EnableAdminServer//开启AdminServer功能
@SpringBootApplication
public class SpringBootAdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminServerApplication.class, args);
}
/**
* 启动成功
*/
@Bean
public ApplicationRunner applicationRunner() {
return applicationArguments -> {
System.out.println("启动成功!");
};
}
}
package com.founder.monitoring.config;
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.AbstractStatusChangeNotifier;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
/**
* 自定义通知
* 继承 AbstractStatusChangeNotifier 类,实现了 doNotify 方法,
* 当应用状态改变的时候会回调 doNotify 方法。
*/
@Component
public class CustomNotifierConfig extends AbstractStatusChangeNotifier {
public CustomNotifierConfig(InstanceRepository repository) {
super(repository);
}
@Override
protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
return Mono.fromRunnable(() -> {
if (event instanceof InstanceStatusChangedEvent) {
System.out.println("实例名称:"+instance.getRegistration().getName());
System.out.println("实例服务地址:"+instance.getRegistration().getServiceUrl());
String status = ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus();
switch (status) {
case "DOWN":
System.out.println("健康检查没通过!");
break;
case "OFFLINE":
System.out.println("服务离线!");
break;
case "UP":
System.out.println("服务上线!");
break;
case "UNKNOWN":
System.out.println("服务未知异常!");
break;
default:
System.out.println(status);
break;
}
}
});
}
}
package com.founder.monitoring.config;
import de.codecentric.boot.admin.server.domain.entities.Instance;
import de.codecentric.boot.admin.server.web.client.HttpHeadersProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
/**
* 注入额外的请求头,方便客户端区分请求来源
*/
@Component
public class HttpHeadersProviderConfig implements HttpHeadersProvider {
@Value("${server.port}")
private String port;
@Override
public HttpHeaders getHeaders(Instance instance) {
HttpHeaders httpHeaders = new HttpHeaders();
//设置约定好的请求头参数
httpHeaders.add("spring-boot-admin-service", port);
return httpHeaders;
}
}
package com.founder.monitoring.config;
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;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
/**
* Security安全配置
*/
@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");
successHandler.setDefaultTargetUrl(adminContextPath + "/");
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()
//开启http basic支持,admin-client注册时需要使用
.httpBasic().and()
.csrf()
//开启基于cookie的csrf保护
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
//忽略这些路径的csrf保护以便admin-client注册
.ignoringAntMatchers(
adminContextPath + "/instances",
adminContextPath + "/actuator/**"
);
}
}
server.port=10010
spring.application.name=springboot-admin-server
#\u914D\u7F6E\u4E00\u4E2A\u8D26\u53F7\u548C\u5BC6\u7801
spring.security.user.name=admin
spring.security.user.password=admin
\ No newline at end of file
......@@ -14,6 +14,11 @@
</modules>
<artifactId>service</artifactId>
<dependencies>
<dependency>
<groupId>com.founder</groupId>
<artifactId>service_base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--KoTime-->
<dependency>
<groupId>cn.langpy</groupId>
......@@ -36,11 +41,7 @@
<version>5.0.1</version>
</dependency>
<dependency>
<groupId>com.founder</groupId>
<artifactId>service_base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
......
......@@ -44,6 +44,13 @@
</build>
<dependencies>
<!-- 客户端依赖 引入admin相关依赖 -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
......
......@@ -51,7 +51,6 @@ ResourceManagerUpload = /data/excel/ResourceManager/
#\u8D44\u6E90\u7BA1\u7406\u4E0B\u8F7D\u8DEF\u5F84
ResourceManagerDownload = http://47.92.48.137:1009/excel/ResourceManager/
#xml???
mybatis-plus.mapper-locations=classpath*:com/founder/publicapi/mapper/*/xml/*.xml
#es?????????
......@@ -73,3 +72,27 @@ password=ENC(z+abBc/QcZelKfpAFXXeSwRBOcUjidsu)
basePath=/data/images
imagesUrl=http://47.92.48.137:1008/images/
#admin\u670D\u52A1\u76D1\u63A7\u6DFB\u52A0\u63CF\u8FF0\uFF08\u9875\u9762\u7EC6\u8282\u91CC\u7684\u4FE1\u606F \u63CF\u8FF0\u3001\u4F5C\u8005\u3001\u7248\u672C\uFF09
info.describe=SpringBoot_Founder_publicapi
info.author=founder
info.version=1.0.0
info.adderss=http://47.92.48.137:1004/#/login
spring.boot.admin.client.instance.prefer-ip=true
#\u542F\u7528\u7AEF\u70B9\uFF0C\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u9664shutdown\u4EE5\u5916\u7684\u6240\u6709\u7AEF\u70B9\u5747\u5DF2\u542F\u7528
management.endpoint.shutdown.enabled=true
#\u663E\u793Adb\u3001redis\u3001rabbti\u8FDE\u63A5\u60C5\u51B5\u7B49
management.endpoint.health.show-details=always
#\u516C\u5F00\u6240\u6709\u7AEF\u70B9web\u63A5\u53E3
management.endpoints.web.exposure.include=*
#\u670D\u52A1\u7AEFadmin-server\u5730\u5740\uFF0C\u4EE5\u53CA\u767B\u5F55\u8D26\u53F7\u3001\u5BC6\u7801
spring.boot.admin.client.url=http://47.92.48.137:10010
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin
##\u53EF\u5728\u7EBF\u67E5\u770B\u65E5\u5FD7\uFF0C \u65E5\u5FD7\u5B9E\u65F6\u67E5\u770B\u662Fclient\u63D0\u4F9B\u4E00\u4E2A\u8BFB\u53D6\u672C\u5730\u6587\u4EF6\u7684\u63A5\u53E3\uFF0C\u7136\u540Eadmin\u5B9A\u65F6\u8C03\u7528\u663E\u793A\uFF0C\u8FBE\u5230\u5B9E\u65F6\u5C55\u793A\u7684\u6548\u679C\u3002
management.endpoint.logfile.enabled=true
#\u751F\u6210\u65E5\u5FD7\u7684\u8DEF\u5F84\u8DDF\u66B4\u9732\u7ED9\u670D\u52A1\u7AEF\u7684\u8DEF\u5F84\u8981\u4E00\u81F4---\u9875\u9762\u65E5\u5FD7\u6587\u4EF6\u5199\u672C\u5730\u751F\u6210\u65E5\u5FD7\u6587\u4EF6\u7684\u8DEF\u5F84
management.endpoint.logfile.external-file= /data2/skglpt/publicapi1003.log
\ No newline at end of file
......@@ -71,3 +71,28 @@ password=ENC(z+abBc/QcZelKfpAFXXeSwRBOcUjidsu)
#FTP\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u013F\u00BC,/data/images #\u65F6\u7A7A\u684C\u9762\u56FE\u6807\u8DEF\u5F84
basePath=/data/images
imagesUrl=http://47.92.48.137:1008/images/
#admin\u670D\u52A1\u76D1\u63A7\u6DFB\u52A0\u63CF\u8FF0\uFF08\u9875\u9762\u7EC6\u8282\u91CC\u7684\u4FE1\u606F \u63CF\u8FF0\u3001\u4F5C\u8005\u3001\u7248\u672C\uFF09
info.describe=SpringBootAdmin_Founder_skyp!
info.author=founder
info.version=1.0.0
info.adderss=http://47.92.48.137:1004/#/login
spring.boot.admin.client.instance.prefer-ip=true
#\u542F\u7528\u7AEF\u70B9\uFF0C\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u9664shutdown\u4EE5\u5916\u7684\u6240\u6709\u7AEF\u70B9\u5747\u5DF2\u542F\u7528
management.endpoint.shutdown.enabled=true
#\u663E\u793Adb\u3001redis\u3001rabbti\u8FDE\u63A5\u60C5\u51B5\u7B49
management.endpoint.health.show-details=always
#\u516C\u5F00\u6240\u6709\u7AEF\u70B9web\u63A5\u53E3
management.endpoints.web.exposure.include=*
#\u670D\u52A1\u7AEFadmin-server\u5730\u5740\uFF0C\u4EE5\u53CA\u767B\u5F55\u8D26\u53F7\u3001\u5BC6\u7801
spring.boot.admin.client.url=http://47.92.48.137:10010
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin
##\u53EF\u5728\u7EBF\u67E5\u770B\u65E5\u5FD7\uFF0C \u65E5\u5FD7\u5B9E\u65F6\u67E5\u770B\u662Fclient\u63D0\u4F9B\u4E00\u4E2A\u8BFB\u53D6\u672C\u5730\u6587\u4EF6\u7684\u63A5\u53E3\uFF0C\u7136\u540Eadmin\u5B9A\u65F6\u8C03\u7528\u663E\u793A\uFF0C\u8FBE\u5230\u5B9E\u65F6\u5C55\u793A\u7684\u6548\u679C\u3002
management.endpoint.logfile.enabled=true
#\u751F\u6210\u65E5\u5FD7\u7684\u8DEF\u5F84\u8DDF\u66B4\u9732\u7ED9\u670D\u52A1\u7AEF\u7684\u8DEF\u5F84\u8981\u4E00\u81F4---\u9875\u9762\u65E5\u5FD7\u6587\u4EF6\u5199\u672C\u5730\u751F\u6210\u65E5\u5FD7\u6587\u4EF6\u7684\u8DEF\u5F84
management.endpoint.logfile.external-file= /data2/skglpt/publicapi1003.log
\ No newline at end of file
spring.profiles.active=dev
server.port=1003
spring.application.name=Founder_skyp_publicapi
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment