自定义通知事件
- 实现notifier接口
// 此接口在服务端package de.codecentric.boot.admin.server.notify;public interface Notifier { Mononotify(InstanceEvent var1);}复制代码
- AbstractEventNotifier
- AbstractStatusChangeNotifier
可以通过实现Notifier接口,或者继承AbstractEventNotifier或者AbstractStatusChangeNotifier来实现自定义通知事件。其集成关系如下图所示:
以下为自定义实现一个通知程序。
public class CustomNotifier extends AbstractEventNotifier { private static final Logger LOGGER = LoggerFactory.getLogger(LoggingNotifier.class); public CustomNotifier(InstanceRepository repository) { super(repository); } @Override protected MonodoNotify(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()); } }); }}复制代码
注入自定义的http请求头
如过想将自定义的http请求头信息注入到监控服务端,需要实现HttpHeadersProvider
package de.codecentric.boot.admin.server.web.client;public interface HttpHeadersProvider { HttpHeaders getHeaders(Instance var1);}复制代码
自定义实现如下:
@Configuration@EnableAutoConfiguration@EnableAdminServer@Import({SecurityPermitAllConfig.class, SecuritySecureConfig.class, NotifierConfig.class})public class SpringBootAdminServletApplication { private static final Logger log = LoggerFactory.getLogger(SpringBootAdminServletApplication.class); public static void main(String[] args) { SpringApplication.run(SpringBootAdminServletApplication.class, args); } // tag::customization-instance-exchange-filter-function[] @Bean public InstanceExchangeFilterFunction auditLog() { return (instance, request, next) -> next.exchange(request).doOnSubscribe(s -> { if (HttpMethod.DELETE.equals(request.method()) || HttpMethod.POST.equals(request.method())) { log.info("{} for {} on {}", request.method(), instance.getId(), request.url()); } }); } // end::customization-instance-exchange-filter-function[] @Bean public CustomNotifier customNotifier(InstanceRepository repository) { return new CustomNotifier(repository); } @Bean public CustomEndpoint customEndpoint() { return new CustomEndpoint(); } // tag::customization-http-headers-providers[] @Bean public HttpHeadersProvider customHttpHeadersProvider() { return instance -> { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add("X-CUSTOM", "My Custom Value"); return httpHeaders; }; } // end::customization-http-headers-providers[]}复制代码
拦截请求和响应
可以通过实现InstanceExchangeFilterFunction接口来拦截和修改对受监视应用程序的执行器端点的请求和响应。这对于审核或添加一些额外的安全检查非常有用。
如上代码中的InstanceExchangeFilterFunction auditLog()
链接或者嵌入外部页面
只需要需改yml文件中的配置即可
# tag::自定义外部视图spring: boot: admin: ui: external-views: - label: "?" url: http://codecentric.de order: 2000# end::customization-external-views复制代码
自定义视图
可以像ui添加自定义视图,但此视图必须为vue.js的组件。 JavaScript-Bundle和CSS-Stylesheet必须放在类路径上,/META-INF/spring-boot-admin-server-ui/extensions/{name}/以便服务器可以处理他们。可以做为一个参考。
自定义扩展需要通过调用自身的SBA.use()方法注册,并需要公开一个install()函数,该函数在设置路由时由ui调用。该install()函数接收以下参数以注册视图或回调:
-
引用{github-src} /spring-boot-admin-server-ui/src/main/frontend/viewRegistry.js [viewRegistry]的对象
-
引用{github-src} /spring-boot-admin-server-ui/src/main/frontend/store.js [applicationStore]的对象
-
引用全局Vue [Vue]的对象
-
引用{github-src} /spring-boot-admin-server-ui/src/main/frontend/utils/axios.js [axios]的对象
如果将新的顶级路由添加到前端,则后端也必须知道它们。添加一个/META-INF/spring-boot-admin-server-ui/extensions/{name}/routes.txt包含所有新的顶层路线(每条线路一条路线)。
// 注册组件SBA.use({ install({viewRegistry}) { viewRegistry.addView({ name: 'custom', //<1> path: '/custom', //<2> component: custom, //<3> label: 'Custom', //<4> order: 1000, //<5> }); }});复制代码
添加父级
如下是一个简单的父级视图,用来列出所有的注册的模块。
// spring-boot-admin-sample-custom-ui/src/custom.vue 复制代码
注册组件如上,在index.js中,并添加路由信息,routes.txt中
/custom/**复制代码
可视化自定义
以下是自定义可视化端点视图,