Spring Boot Admin实现服务健康预警功能

Over View

上一篇文章主要介绍了Spring Boot Admin的概况以及我们如何在系统中引入和使用Spring Boot Admin,以此来帮助我们更加了解自己的系统,做到能快速发现、排查问题。本篇文章将用代码演示Spring Boot Admin的消息通知功能,并利用这个开箱即用的特性来个性化我们的需求,优化我们在服务治理方面的工作效率。

Spring Boot Admin内置了多种开箱即用的系统通知渠道,包括邮件、Slack、Telegram、Hipchat等多种社交媒体的通知渠道。但是考虑到它所支持的大都是一些国外的主流社交媒体,在国内的本地化可能并不是那么的友好。不过没关系Spring Boot Admin也提供了通用的接口,使得用户可以基于他所提供的接口来自定义通知方式。下面使用Spring Boot Admin的通知功能来实现基于邮件和国内办公软件“飞书”的服务健康预警。

邮件预警

依赖引入

在Spring Boot Admin的服务端项目中引入邮件相关依赖

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

添加配置

添加Spring Mail相关配置,我们配置好我们邮箱的Smtp服务器相关信息

spring.mail.host=your email smtp server
spring.mail.password=your password
spring.mail.port=your email smtp server port
spring.mail.test-connection=true
spring.mail.username=837718548@qq.com 

添加Spring Boot Admin(SBA)中相关的邮件配置,以下是SBA官方提供的邮件相关参数

Property name Description Default value
spring.boot.admin.notify.mail.enabled Enable mail notifications true
spring.boot.admin.notify.mail.ignore-changes Comma-delimited list of status changes to be ignored. Format: "<from-status>:<to-status>". Wildcards allowed. "UNKNOWN:UP"
spring.boot.admin.notify.mail.template Resource path to the Thymeleaf template used for rendering. "classpath:/META-INF/spring-boot-admin-server/mail/status-changed.html"
spring.boot.admin.notify.mail.to Comma-delimited list of mail recipients "root@localhost"
spring.boot.admin.notify.mail.cc Comma-delimited list of carbon-copy recipients
spring.boot.admin.notify.mail.from Mail sender "Spring Boot Admin <noreply@localhost>"
spring.boot.admin.notify.mail.additional-properties Additional properties which can be accessed from the template

我们这里使用如下配置

spring.boot.admin.notify.mail.from=837718548@qq.com
spring.boot.admin.notify.mail.ignore-changes=""
spring.boot.admin.notify.mail.to=目标邮箱

配置中的ignore-changes参数表示服务从一个状态变成其他状态时发出预警,例如:"UNKNOWN:UP" 表示服务从未知状态变成UP时,发出通知。当其值是""时,表示任何状态变更都会发出预警。若想指定其他参数,参考上面的参数表。
完成上述操作后,重启Spring Boot Admin服务端,当客户端服务注册进来并且状态变为UP时,我们可以收到一封邮件:

添加邮件模版

Spring Boot admin发送的邮件可以自定义模板样式,我们使用thymeleaf语法编写邮件模板,示例模板代码可参考本文在Github的代码示例仓库,编写完模板文件之后,将文件放入项目src/main/resources/templates中,并且在配置文件中增加指定模板文件的地址:

spring.boot.admin.notify.mail.template=classpath:/templates/status-changed.html

重启Spring Boot Admin服务端,当客户端服务注册进来并且状态变为UP时,我们可以收到一封邮件,如下是我们对邮件进行本地化之后的样式:

飞书预警

由于Spring Boot Admin内置的通知渠道都是国外的社交媒体,不过它也提供了自定义通知渠道的接口,所以我们很容易就可以自定义通知渠道,下面演示集成办公软件飞书的通知。

获取通知地址

飞书中提供了聊天机器人,我们只需调用机器人的WebHook就可以实现详细的推送(企业微信,钉钉也具有类似功能)。

自定义通知渠道

Spring Boot Admin中提供了一个AbstractStatusChangeNotifier抽象类,我们可以通过继承它来自定义通知渠道

public class FlyBookNotifier extends AbstractStatusChangeNotifier {

 private static final String DEFAULT_MESSAGE = "#{instance.registration.name} (#{instance.id}) 状态发生转变 #{lastStatus} ➡️ #{instance.statusInfo.status} " +
  "\n" +
  "\n 实例详情:#{instanceEndpoint}";

 private final SpelExpressionParser parser = new SpelExpressionParser();

 private RestTemplate restTemplate;

 private URI webhookUrl;

 private Expression message;

 public FlyBookNotifier(InstanceRepository repository, RestTemplate restTemplate) {
 super(repository);
 this.restTemplate = restTemplate;
 this.message = parser.parseExpression(DEFAULT_MESSAGE, ParserContext.TEMPLATE_EXPRESSION);
 }

 @Override
 protected Mono<Void> doNotify( InstanceEvent event, Instance instance) {
 if (webhookUrl == null) {
  return Mono.error(new IllegalStateException("'webhookUrl' must not be null."));
 }
 return Mono
  .fromRunnable(() -> restTemplate.postForEntity(webhookUrl, createMessage(event, instance), Void.class));
 }

 public void setRestTemplate(RestTemplate restTemplate) {
 this.restTemplate = restTemplate;
 }

 protected Object createMessage(InstanceEvent event, Instance instance) {
 Map<String, Object> messageJson = new HashMap<>();
 messageJson.put("title", "👹警告&👼提醒");
 messageJson.put("text", getText(event, instance));

 HttpHeaders headers = new HttpHeaders();
 headers.setContentType(MediaType.APPLICATION_JSON);
 return new HttpEntity<>(messageJson, headers);
 }

 protected String getText(InstanceEvent event, Instance instance) {
 Map<String, Object> root = new HashMap<>();
 root.put("event", event);
 root.put("instance", instance);
 root.put("instanceEndpoint", instance.getEndpoints().toString());
 root.put("lastStatus", getLastStatus(event.getInstance()));
 StandardEvaluationContext context = new StandardEvaluationContext(root);
 context.addPropertyAccessor(new MapAccessor());
 return message.getValue(context, String.class);
 }

 public URI getWebhookUrl() {
 return webhookUrl;
 }

 public void setWebhookUrl(URI webhookUrl) {
 this.webhookUrl = webhookUrl;
 }

 public String getMessage() {
 return message.getExpressionString();
 }

 public void setMessage(String message) {
 this.message = parser.parseExpression(message, ParserContext.TEMPLATE_EXPRESSION);
 }
}

上面代码是一个示例,用户可以根据自己的需求来自定义消息体的格式和内容。
随后我们在Spring中创建该通知类的bean

@Configuration
public static class NotifierConfiguration {
 @Bean
 @ConditionalOnMissingBean
 @ConfigurationProperties("spring.boot.admin.notify.flybook")
 public FlyBookNotifier flyBookNotifier(InstanceRepository repository) {
 return new FlyBookNotifier(repository, new RestTemplate());
 }
}

最后我们在项目的配置文件中添加我们飞书渠道的配置信息

spring.boot.admin.notify.flybook.ignore-changes=""
spring.boot.admin.notify.flybook.webhook-url=https://open.feishu.cn/open-apis/bot/hook...

完成上述操作后,重启Spring Boot Admin服务端,当客户端服务注册进来并且状态变为UP时,我们可以在飞书端收到Spring Boot Admin自动推过来的预警信息:

至此,我们的自定义消息渠道就已经完成。通过继承AbstractStatusChangeNotifier抽象类,我们可以很轻易的自定义自己想要实现的推送渠道(设计模式:模板方法模式)。

总结

本文主要介绍了Spring Boot Admin中所提供的多种消息预警推送渠道,并且我们可以通过自定义消息预警渠道来满足我们自身的需求,整个过程并不需要耗费太多的人力和时间成本。我们用了两个示例来演示如何实现Spring Boot Admin的消息预警功能,分别是邮件预警和自定义的飞书预警。

本文的示例代码
SBA-client:https://github.com/cg837718548/sba-client-demo.git
SBA-server:https://github.com/cg837718548/sba-server-demo.git

到此这篇关于Spring Boot Admin实现服务健康预警功能的文章就介绍到这了,更多相关spring boot 健康预警内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Springboot Oauth2 Server搭建Oauth2认证服务

    本教程源码 https://github.com/bestaone/HiAuth 源码比较全面,教程我就只介绍关键代码了,喜欢的点个star,谢谢! 关键词 微服务认证 Oauth2 认证中心 springboot spring-cloud-starter-oauth2 集成Oauth2 Oauth2 客户端 介绍 这里我将介绍两个部分 Oauth2 server 的开发 (hi-auth-web模块) Oauth2 client 的开发 (hi-mall-web模块) 效果图 himall.g

  • 详解Springboot 优雅停止服务的几种方法

    在使用Springboot的时候,都要涉及到服务的停止和启动,当我们停止服务的时候,很多时候大家都是kill -9 直接把程序进程杀掉,这样程序不会执行优雅的关闭.而且一些没有执行完的程序就会直接退出. 我们很多时候都需要安全的将服务停止,也就是把没有处理完的工作继续处理完成.比如停止一些依赖的服务,输出一些日志,发一些信号给其他的应用系统,这个在保证系统的高可用是非常有必要的.那么咱么就来看一下几种停止springboot的方法. 第一种就是Springboot提供的actuator的功能,它

  • SpringBoot2.0 整合 Dubbo框架实现RPC服务远程调用方法

    一.Dubbo框架简介 1.框架依赖 图例说明: 1)图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层或模块,蓝色的表示与业务有交互,绿色的表示只对 Dubbo 内部交互. 2)图中背景方块 Consumer, Provider, Registry, Monitor 代表部署逻辑拓扑节点. 3)图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用. 4)图中只包含 RPC

  • Springboot实现多服务器session共享

    本文实例为大家分享了springboot实现多服务器session共享的具体代码,供大家参考,具体内容如下 环境: springboot:2.0.4 redis:3.2.100 jdk:1.8 eclipse:4.9.0 1.原理 正常情况下,HTTPSession是通过servlet容器创建并管理的,创建成功后都保存在内存中,如果开发者需要对项目进行横向拓展搭建集群,那么可以用一些硬件和软件工具来做负载均衡,此时,来自同一用户的HTTP请求有可能会被发送到不同的实例上去,如何保证各个实例之间的

  • Spring Boot Admin实现服务健康预警功能

    Over View 上一篇文章主要介绍了Spring Boot Admin的概况以及我们如何在系统中引入和使用Spring Boot Admin,以此来帮助我们更加了解自己的系统,做到能快速发现.排查问题.本篇文章将用代码演示Spring Boot Admin的消息通知功能,并利用这个开箱即用的特性来个性化我们的需求,优化我们在服务治理方面的工作效率. Spring Boot Admin内置了多种开箱即用的系统通知渠道,包括邮件.Slack.Telegram.Hipchat等多种社交媒体的通知渠

  • 详解Spring Boot Admin监控服务上下线邮件通知

    本文介绍了Spring Boot Admin监控服务上下线邮件通知,分享给大家,具体如下: 微服务架构下,服务的数量少则几十,多则上百,对服务的监控必不可少. 如果是以前的单体项目,启动了几个项目是固定的,可以通过第三方的监控工具对其进行监控,然后实时告警. 在微服务下,服务数量太多,并且可以随时扩展,这个时候第三方的监控功能就不适用了,我们可以通过Spring Boot Admin连接注册中心来查看服务状态,这个只能在页面查看. 很多时候更希望能够自动监控,通过邮件告警,某某服务下线了这样的功

  • SpringBoot整合Spring Boot Admin实现服务监控的方法

    目录 1. Server端服务开发 1.1. 引入核心依赖 1.2. application.yml配置文件 1.3. Security配置文件 1.4. 主启动类 2. Client端服务开发 2.1. 引入核心依赖 2.2. application.yml配置文件 2.3. logback-spring.xml文件 2.4. 主启动类 3. 验证 4. 配置邮件告警 4.1. 引入核心依赖 4.3. 通知配置文件 4.4. 验证 Spring Boot Admin用于管理和监控一个或多个Sp

  • Spring Boot Admin监控服务如何使用

    Spring Boot Admin 简介 随着开发周期的推移,项目会不断变大,切分出的服务也会越来越多,这时一个个的微服务构成了错综复杂的系统. 对于各个微服务系统的健康状态.会话数量.并发数.服务资源.延迟等度量信息的收集就成为了一个挑战. Spring Boot Admin 就是基于这些需求开发出的一套功能强大的监控管理系统. 同样,Spring Boot Admin 也是由两个角色组成,一个是服务端 Spring Boot Admin Server,一个是客户端 Spring Boot A

  • Spring Boot Admin微服务应用监控的实现

    Spring Boot Admin 可以对SpringBoot应用的各项指标进行监控,可以作为微服务架构中的监控中心来使用,本文将对其用法进行详细介绍. Spring Boot Admin 简介 SpringBoot应用可以通过Actuator来暴露应用运行过程中的各项指标,Spring Boot Admin通过这些指标来监控SpringBoot应用,然后通过图形化界面呈现出来.Spring Boot Admin不仅可以监控单体应用,还可以和Spring Cloud的注册中心相结合来监控微服务应

  • SpringBoot整合Spring Boot Admin实现服务监控

    Spring Boot Admin用于管理和监控一个或多个Spring Boot服务,其分为Server端和Client端,Server端相当于一个注册中心,Client端通过Http请求向Server端进行注册,也可以结合Eureka.Nacos等注册中心实现服务注册. 1. Server端服务开发 1.1. 引入核心依赖 <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-b

  • Spring boot admin 服务监控利器详解

    目录 一.简介 二.搭建 1.服务端 2.客户端 3.启动项目 4.客户端配置 3.微服务 3.1.服务端 3.2.客户端 4.我的微服务预警发送其他服务状态信息思路 一.简介 用于对 Spring Boot 应用的管理和监控.可以用来监控服务是否健康.是否在线.以及一些jvm数据等等.Spring Boot Admin 分为服务端(spring-boot-admin-server)和客户端(spring-boot-admin-client),服务端和客户端之间采用 http 通讯方式实现数据交

  • 详解Spring boot Admin 使用eureka监控服务

    前言 最近刚好有空,来学习一下如何搭建spring boot admin环境.其中遇到很多的坑. 网上大多都是使用admin-url的方式直接来监控的,感觉一点也不灵活,这不是我想要的结果,所以本篇介绍借助eureka服务注册和发现功能来灵活监控程序. 本文主要记录spring boot admin的搭建过程,希望能有所帮助.其实非常的简单,不要被使用常规方式的误导! 环境介绍 IDE:intellij idea jdk: java8 maven:3.3.9 spring boot:1.5.6

  • Spring Boot Admin 快速入门详解

    目录 1.介绍 2.服务端搭建 2.1 引入依赖 2.2 添加注解 2.3 进行测试 2.4 测试结果 3.客户端搭建 3.1 引入依赖 3.2 编写配置 3.3 进行测试 4.安全性 4.1 添加依赖 4.2 编写配置 4.3 编写配置类 4.4 修改客户端配置 4.5 进行测试 总结 1.介绍 官网地址 Spring Boot Admin 是开源社区孵化的项目,用于对 Spring Boot 应用的管理和监控.Spring Boot Admin 分为服务端(spring-boot-admin

  • Spring Boot Admin 添加报警提醒和登录验证功能的具体实现

    目录 1.添加报警提醒功能 1.1 添加邮件支持框架 1.2 配置收.发邮箱信息 1.2.1 开启 SMTP 服务 1.2.2 生成授权码 1.3 邮件报警测试 1.4 注意事项 1.5 配置多个报警通知邮箱 2.访问权限设置 2.1 添加 Security 框架支持 2.2 设置登录账户 2.3 权限资源设置 2.4 访问 SBA 总结 Spring Boot Admin(SBA)是一个开源的社区项目,用于管理和监控 Spring Boot 应用程序,它提供了详细的健康信息.内存信息.JVM

随机推荐