SpringBootAdmin的介绍及使⽤(18)
Spring Boot Admin是⼀个开源社区项⽬,⽤于管理和监控SpringBoot应⽤程序。应⽤程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使⽤SpringCloud注册中⼼(例如Eureka,Nacos)。 UI是的AngularJs应⽤程序,展⽰Spring Boot Admin Client的Actuator端点上的⼀些监控。常见的功能或者监控如下:
显⽰健康状况
显⽰详细信息,如下
JVM和内存指标
micrometer.io指标
数据源指标
缓存指标springcloud和springboot
显⽰构建信息编号
关注并下载⽇志⽂件
查看jvm系统和环境属性
查看Spring Boot配置属性
轻松的⽇志级管理
与JMX-beans交互
查看线程转储
查看http跟踪
下载heapdump
状态变更通知(通过电⼦邮件,…)
创建Spring Boot Admin项⽬并添加服务离线上线通知
<!-- admin server 依赖 -->
<dependency>
<groupId&decentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.2.2</version>
</dependency>
<!--发送邮件需要的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
在springboot启动类⾥添加@EnableAdminServer注解
@SpringBootApplication
@EnableAdminServer
public class MonitorApplication {}
配置⽂件
server:
port: 8013
spring:
application:
name: monitor
boot:
admin:
ui:
# ui页⾯的⾃定义内容信息
title: 我的服务监控中⼼
brand: <span>Service Monitoring Center</span>
notify:
mail:
from: 发邮箱账号
#配置发送邮件需要的参数
mail:
#邮件服务器
host: smtp.qq
#发送邮件的帐号
username: 发邮箱账号
#邮箱帐号的授权码
password: 授权码
properties:
mail:
smtp:
auth: true
client:
notify:
mail:
#邮件内容的标题
subject: 邮件内容的标题
#收邮件的帐号,多个⽤ , 隔开
to: 邮箱
邮件发送⼯具类
package com.ljm.boot.admin.server.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import javax.mail.internet.MimeMessage;
@Component
public class EmailUtil {
private final Logger logger= Logger(EmailUtil.class);
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String form;
@Value("${}")
private String to;
public void sendEmail(String subject,String message){
try {
if(StringUtils.isEmpty(to)){
<("email to is Emtry ... send Email stop");
return;
}
MimeMessage mimeMessage = ateMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
/
/发件⼈
helper.setFrom(form);
//收件⼈
String []toArray=to.split(",");
helper.setTo(toArray);
//标题
helper.setSubject(subject);
//⽂本
helper.setText(message,true);
mailSender.send(mimeMessage);
}catch (Exception e){
logger.info("sendEmail error,message={}",e);
}
}
}
添加⾃定义通知事件
package com.ljm.boot.ifier;
import com.ljm.boot.admin.server.util.EmailUtil;
decentric.boot.admin.ities.Instance;
decentric.boot.admin.ities.InstanceRepository;
decentric.boot.admin.server.domain.events.InstanceEvent;
decentric.boot.admin.server.domain.events.InstanceStatusChangedEvent;
decentric.boot.ify.AbstractStatusChangeNotifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
publisher.Mono;
/**
* ⾃定义的事件通知者
*/
@Component
public class CustomNotifier extends AbstractStatusChangeNotifier {
private static final Logger logger = Logger(CustomNotifier.class);
@Value("${ify.mail.subject}")
private String subject;
@Autowired
EmailUtil emailUtil;
//邮件模板内容信息
private String content="<p style=\"white-space: normal;\">亲爱的运维⼈员:</p><p style=\"white-space: normal;\"> 您好!</p><p style=\"white-space: normal;\"> 您的运维管理的服务程序已经<strong>${服务状态}</stron public CustomNotifier(InstanceRepository repository) {
super(repository);
}
@Override
protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
return Mono.fromRunnable(() -> {
if (event instanceof InstanceStatusChangedEvent) {
logger.info("Instance {} ({}) is {}", Registration().getName(), Instance(),
((InstanceStatusChangedEvent) event).getStatusInfo().getStatus());
//获取服务状态 status UP上线,OFFLINE离职
String status = ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus();
//服务名称,
String clientName = Registration().getName().toLowerCase();
//服务所在的服务器ip地址
String clientServerUrl = Registration().getServiceUrl();
String statusName="OFFLINE".equals(status)?"已经宕机了":"已经重新上线!";
if ("OFFLINE".equals(status) || "UP".equals(status)) {
emailUtil.sendEmail(subject + "-" + clientName + "-" + status, repelateMessage(content,statusName,clientName,clientServerUrl));
}
} else {
logger.info("Instance {} ({}) {}", Registration().getName(), Instance(),
}
});
}
/**
* 替换邮件模板内占位符
*/
private String repelateMessage(String msg, String state, String appName, String serverIp) {
msg = place("${服务状态}", state);
msg = place( "${服务名称}", appName);
msg =place("${服务器ip地址}", serverIp);
return msg;
}
}
Spring Boot Admin Client项⽬搭建
引⼊依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId&decentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
配置⽂件
spring:
application:
name: service
boot:
admin:
client:
# spring boot admin server的注册地址,多个以逗号隔开,并把localhost换成ip
url: localhost:8013
instance:
prefer-ip: true
register-once: false
#需要暴露监控端⼝给spring boot admin server访问
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: ALWAYS
微服务应⽤集成admin
Spring Boot Admin Server会往注册中⼼⾥拉取各个客户端的监控信息,所以微服务模块只需要
往注册中⼼⾥⾯注册就⾏,⽆需再往Admin Server⾥⾯注册,spring-boot-admin-starter-client依赖就不需要再添加了。
Spring-boot-admin配置属性详解
springbootAdmin—client端配置属性详解:
spring.boot.abled:是否启⽤springbootAdmin客户端,默认为true;
spring.boot.admin.client.url:要注册的server端的url地址。如果要同时在多个server端⼝注册,则⽤逗号分隔各个server端的url地址;
spring.boot.admin.client.api-path:默认值是instances。server端获取client信息的路径,默认情况下server通过访问/instances请求来获取到client端的信息。(client端向server 端注册,注册成功后server端会给该client创建⼀个唯⼀的clientID值。当server端需要获取client的信息,⽐如health信息时,server端会发送
111.11.11.1:8080/instances/clientID/actuator/health即可,这⾥的111.11.11.1:8080是client所在服务器的IP地址,instances就是该属性的值)
spring.boot.admin.client.username:如果server端需要进⾏认证时,该属性⽤于配置⽤户名。
spring.boot.admin.client.password:如果server端需要进⾏认证时,该属性⽤于配置密码。
spring.boot.admin.client.period:注册时间间隔,单位是毫秒;默认值是10秒钟注册⼀次。(client通过持续不断地向server端进⾏注册来保持client端与server端的连接)
spring.boot.t-timeout:注册连接超时时间,单位是毫秒,默认值是5秒。当client向server进⾏注册时,如果5秒钟没有注册完成则认为本次注册失败;
spring.boot.ad-timeout:注册读取超时,单位是毫秒,默认值是5秒;
spring.boot.admin.client.auto-registration:是否开启⾃动注册,默认值是true。
spring.boot.admin.client.auto-deregistration:是否开启⾃动注销,默认值是null。如果服务端运⾏在云平台,默认值是true;
spring.boot.ister-once:默认值为true。如果值为true的话,client只会在⼀个server端进⾏注册(按照spring.boot.admin.client.url中设置的server的顺序)。如果该server端宕机,会⾃动在下⼀个server端进⾏注册。如果该属性值为false,则会在所有的server端进⾏注册;
spring.boot.admin.client.instance.management-url:注册的management-url,如果可⽤的url不同的话可以重写该值。如果不配置该属性的话,默认该属性值与management-base-url 和 t-path两个属性值有关。⽐如⼯程中该值为:
managementUrl=192.168.200.165:8080/actuator,其中192.168.200.165:8080为management-base-url,/actuator是t-path(该属性值是spring actuator的属性值);
spring.boot.admin.client.instance.management-base-url:⽤于计算management-url 的基本URL。该路径值在运⾏时进⾏获取并赋值给 base url。如果不配置该属性值的话,默认该属性值与management.port, service-url 以及server.servlet-path有关。⽐如⼯程中该值为192.168.200.165:8080,其中8080端⼝是配置的获取actuator信息的端⼝。192.168.200.165是设置的service-url值,如果没有设置service-url的话,则为配置的server.servlet-path值(项⽬的启动路径)。
spring.boot.admin.client.instance.health-url:注册的health-url地址,如果可⽤的url不同可以重写该值。如果不配置该属性的话,默认该属性值与management-url 以及endpoints.health.id有关。⽐如⼯程中该值为:healthUrl=192.168.200.165:8080/actuator/health,其中192.168.200.165:8080/actuator是management-url,health是endpoints.health.id。
spring.boot.admin.client.instance.service-base-url:⽤于计算service-url 的基本URL。该路径值在运⾏时进⾏获取并赋值给 base url。如果不配置该属性值的话,默认该属性值与hostname, server.port有关。
⽐如⼯程中该值为p-v-9:8080,其中8080端⼝是配置的server.port。p-v-9是client所在服务器的hostname。
spring.boot.admin.client.instance.service-url:注册的service-url值。如果不配置该属性值的话,基于 service-base-url 和 t-path进⾏赋值。⽐如⼯程中为p-v-9:8080/,其中p-v-9是base-url,/是⼯程配置的 t-path值。(这⾥要注意的是,当server端与client端不在同⼀台服务器上的时候,要配置该属性的值。如果不配置的话,server端就会根据默认的命名规则来配置该值,⽐如p-v-9:8080/,如果server使⽤这个值来获取client的各种性能信息的话是获取不到的);
spring.boot.admin.client.instance.name:客户端⼯程的名字。默认值是配置的spring.application.name的值,如果没有配置该属性的话,默认值是spring-boot-application;
spring.boot.admin.client.instance.prefer-ip:是否使⽤注册的ip地址来取代上述各个url中hostname的值,默认值是false(也就是说默认情况下上述各个url中会使⽤hostname的值,⽐如我的电脑的hostname为p-v-9)。如果设置了server.address或者management.address的话ip地址就是该值,如果没有设置这两个属性的话ip地址值是LocalHost()的值。
spring.boot.admin.adata.*:与该应⽤有关的元数据,以键值对的形式赋值。
springbootAdmin—server端配置属性详解:
spring.t-path:server端的访问路径,默认是/。默认情况下server的访问地址是**.**.**.**:**/,这⾥**.**.**.**:**是server所在服务器的ip地址。我们的⼯程设置该值是springbootAdmin,那么⼯程的server端访问地址是111.11.11.1:8000/springbootAdmin;
spring.itor.period:更新client端状态的时间间隔,单位是毫秒,默认值是10秒钟;
spring.itor.status-lifetime:client端状态的⽣命周期,该⽣命周期内不会更新client状态。单位是毫秒,默认值是10秒钟;
spring.t-timeout:查询client状态信息时的连接超时时间,单位是毫秒,默认是2秒(如果2秒内没有获取到client的状态信息,则认为连接已经断开)。
spring.ad-timeout:查询client状态信息时的读取超时时间,单位是毫秒,默认是2秒(如果2秒内没有获取到client的状态信息,则认为读取失败)。
spring.adata-keys-to-sanitize:要被过滤掉的元数据(当与正则表达式相匹配时,这些数据会在输出的json数据中过滤掉),默认值是".password$", ".*secret$", ".*key$", ".$token$", ".credentials.", ".*vcap_services$";
spring.boot.admin.probed-endpoints:要获取的client的端点信息,默认是"health", "env", "metrics", "htt
ptrace:trace", "threaddump:dump", "jolokia", "info", "logfile", "refresh", "flyway", "liquibase", "heapdump", "loggers", "auditevents";
spring.boot.admin.instance-proxy.ignored-headers:向client发起请求时不会被转发的headers信息,默认值是"Cookie", "Set-Cookie", "Authorization";
spring.boot.admin.ui.brand:在导航栏中显⽰的brand值,默认是"<img src="assets/img/icon-spring-boot-admin.svg"><span>Spring Boot Admin</span>";
spring.boot.admin.ui.title:显⽰的页⾯标题,默认是"Spring Boot Admin"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论