[分享] Over View能够依据自己的需求来自定义音讯体的格局和内容

it先森   2020-5-15 13:59 楼主

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.bootgroupId> <artifactId>spring-boot-starter-mailartifactId> 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: ":". 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=https://blog.csdn.net/dafengit/article/details/106073709
spring.boot.admin.notify.mail.ignore-changes=""
spring.boot.admin.notify.mail.to=rar目标邮箱

装备中的ignore-changes参数表示服务从一个状况变成其他状况时宣布预警,例如:"UNKNOWN:UP" 表示服务从未知状况变成UP时,宣布告诉。当其值是""时,表示任何状况改变都会宣布预警。若想指定其他参数,参阅上面的参数表。
完结上述操作后,重启Spring Boot Admin服务端,当客户端服务注册进来而且状况变为UP时压缩包,咱们能够收到一封邮件:可能邮件中还带有rar压缩包
 

增加邮件模版

Spring Boot admin发送的邮件能够自定义模板款式绕过解压包,咱们运用thymeleaf语法编写邮件模板,示例模板代码可参阅本文在Github的代码示例库房,编写完模板文件之后,将文件放入项目src/main/resources/templates中,而且在装备文件中增加指定模板文件的地址:

spring.boot.admin.notify.mail.template=https://blog.csdn.net/dafengit/article/details/106073709

重启Spring Boot Admin服务端,当客户端服务注册进来而且状况变为UP时,咱们能够收到一封邮件zip,如下是咱们对邮件进行本地化之后的款式:


飞书预警

因为Spring Boot Admin内置的告诉途径都是国外的交际媒体,压缩包不过它也供给了自定义告诉途径的接口,破解rar所以咱们很简单就能够自定义告诉途径,下面演示集成工作软件飞书的告诉。

获取告诉地址

飞书中供给了谈天机器人,咱们只需调用机器人的WebHook就能够完成具体的推送(企业微信,钉钉也具有相似功用)。

自定义告诉途径

Spring Boot Admin中供给了一个AbstractStatusChangeNotifier抽象类rar解密,咱们能够经过承继它来自定义告诉途径

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) rar/zip/7z{ super(repository); this.restTemplate = restTemplate; this.message = parser.parseExpression(DEFAULT_MESSAGE, ParserContext.TEMPLATE_EXPRESSION)rar;
    } @Override protected MonodoNotify( InstanceEvent event,  Instance instance) { if (webhookUrl == null) { return Mono.error(new IllegalStateException("'webhookUrl' must not be null."))rar;
        } 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 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 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中创建该告诉类的7z

@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的音讯预警功用,分别是邮件预警和自定义的飞书预警。

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复