使用Spring|使用Spring Boot管理监控应用程序状态
使用Spring Boot管理监控应用程序状态
1个Spring Boot执行器Spring Boot
执行器是Spring Boot
提供的应用程序的自检和监控功能,如健康检查、审计、索引收集、HTTP跟踪等。,可以帮助开发者和运营商监控和管理Spring Boot
应用。该模块收集应用的内部信息并向外部模块公开,支持HTTP和JMX,可以与一些第三方监控系统(如Prometheus
)集成。
1.1致动器端点
端点是执行器的核心组件,用来监控应用程序的各种状态。Spring Boot
致动器内置有许多端点,通常分为三类:
应用类:主要包括配置信息、Spring Bean
信息、配置文件信息、环境信息等。Metric class:
运行时应用程序的信息,包括堆栈、健康状态、线程池信息、HTTP请求统计等。
操作类:如关机,提供关闭应用等操作类功能。
1.2添加依赖关系
在pom.xml中添加执行器的启动器:springframework.boot
弹簧靴起动器致动器
1.3访问端点
添加依赖项后,启动服务,您可以通过以下请求查看公开的端点:
http://localhost:9099/actuator
该请求返回:
{
" _links": {
"自我":{
" href ":" http://localhost:9099/actuator ",
“模板化”:假
},
"健康路径":{
" href ":" http://localhost:9099/actuator/health/{ * path } ",
“模板化”:真
},
"健康":{
" href ":" http://localhost:9099/actuator/health ",
“模板化”:假
}
}
复制代码
从返回的结果可以看出,默认情况下只打开了/actuator/health端点。访问端点
{"status":"UP"}
复制代码
其他未打开的端点可以独立配置为打开或关闭。
在application.yml中添加以下配置,以打开所有端点并显示详细的运行状况:
管理层:
端点:
网页:
曝光率:
包括:“*”
端点:
健康:
显示详细信息:始终
2 Spring Boot管理
Spring Boot执行器提供各种端点。Spring Boot管理员可以在一个界面中显示执行器中的信息,并提供实时报警功能。
在微服务环境中,使用Spring Boot管理,通常包括服务器和客户端。服务器只运行Spring Boot管理服务器来收集每个客户端的数据并显示在可视化界面中。运行客户端Spring Boot管理客户端,或通过服务发现和注册获取应用程序信息。
我不在这里演示的Spring Boot管理服务器上。我将使用当前的hero-springboot-demo作为服务器和客户端。在后面的实战章节中,Admin服务器将是独立的,客户端不会使用客户端,而是通过服务进行注册和发现。
2.1添加依赖关系
在pom.xml中添加Spring Boot管理服务器的依赖关系:
去代码中心化
弹簧-启动-管理-启动-服务器
2.7.4
去代码中心化
spring-boot-管理-启动器-客户端
2.7.4
复制代码
注意版本号。因为Spring Boot的版本用的是2.7.x,所以Spring Boot Admin服务器的版本应该也是2.7.x,不要乱来!
2.2打开管理服务器
在启动类demo application @ enableadminserver上添加注释,以打开Spring Boot管理服务器。
@EnableAdminServer
@启用异步
@ mapper scan(" com . yygnb . demo . mapper ")
@SpringBootApplication
公共类演示应用程序{
...
}
复制代码
2.3配置客户端
在application.yml中添加以下配置:
配置上下文路径;管理服务器的;
为客户机配置管理服务器的地址。
春天:
应用:
名称:英雄-跳羚-演示
开机:
管理员:
客户:
URL:“http://localhost:9099/monitor”
上下文路径:“/monitor”
复制代码
2.4访问管理服务器
重新启动服务,并在浏览器中访问Spring Boot管理服务器:
http://本地主机:9099/monitor
复制代码
您可以看到,当前应用的在管理服务器上注册为客户端:
3个自定义警报
当应用状态异常时,Spring Boot管理员会实时自动报警,报警方式可由我们自定义。这里模拟日志的方式。
在配置包下,创建DemoNotifier类,该类继承自AbstractEventNotifier:
@Slf4j
@组件
公共类DemoNotifier扩展AbstractEventNotifier {受保护的演示通知程序(实例存储库){
超级(储存库);
}@覆盖
受保护的Mono doNotify(InstanceEvent事件,Instance实例){
返回mono . from runnable(()--> log . error("实例信息:{},{},{} ",
instance.getRegistration()。getName(),event.getInstance(),
event . gettype()));
}
}
复制代码
此时,当注册到此管理服务器的其他客户机启动和停止时,当前应用程序将监听事件并输出日志。你可以发送邮件、信息等。在实战中。
4登录权限
上面配置的管理服务器可以不用登录就可以访问,但是只有在real development中登录后才能访问。管理服务器还提供了一个登录页面。
4.1添加依赖关系
在pom.xml中添加Spring Security的依赖项:
`springframework.boot
弹簧-启动-启动-安全`
复制代码
4.2配置用户名和密码
在application.yml中配置登录用户名和密码:
春天:
应用:
名称:英雄-跳羚-演示
开机:
管理员:
客户:
URL:“http://localhost:9099/monitor”
上下文路径:“/monitor”
安全性:
用户:
名称:管理员
密码:111111
复制代码
上面的配置是在前一个的基础上增加的:spring.security.user的配置
4.3添加配置类
在配置包下添加Spring Security的配置类SecurityConfig:
@配置
公共类安全配置{私有最终字符串adminContextPath公共安全配置(adminserver properties adminserver properties){
this . admincontextpath = adminserver properties . getcontextpath();
}@Bean
公共安全过滤器链过滤器链(HttpSecurity http)引发异常{
SavedRequestAwareAuthenticationSuccessHandler成功处理程序=
new SavedRequestAwareAuthenticationSuccessHandler();
success handler . settargeturlparameter(" redirecto ");
success handler . setdefaulttargeturl(adminContextPath+"/");
返回http . authorizehttprequests(auth-> auth . ant matchers(
adminContextPath + "/assets/** ",
adminContextPath + "/login ",
adminContextPath + "/instances ",
adminContextPath + "/actuator/** "
).permitAll()
。ant matchers(adminContextPath+"/* * ")。已验证()
。anyRequest()。permitAll()
).formlog in(form-> form . log in page(adminContextPath+"/log in ")
。成功处理程序(成功处理程序)
).注销(logout-> logout . logout URL(adminContextPath+"/logout "))
。csrf(AbstractHttpConfigurer::disable)
。build();
}
}
复制代码
上面配置文件中的AdminContextPath就是前面配置的spring.boot.admin.context-path,即/monitor。
上述配置包括几个部分:
仅请求路径/monitor/**的权限控制;
成功登录后的登录页面和默认地址;
表单的登录配置;
禁用CSRF。
4.4试运行
重启服务,访问之前开发的电脑等界面,可以正常访问;如果你访问一个路径,比如/monitor,你将跳转到Spring Boot管理员提供的登录页面。
【使用Spring|使用Spring Boot管理监控应用程序状态】使用配置好的用户名和密码(admin/111111)登录,成功登录后进入管理服务器页面。
推荐阅读
- SpringBoot项目|2022最新SpringBoot2.X仿B站项目part1笔记
- 微信小程序|计算机毕业设计springboot+vue基本安卓/微信小程序的健康管理系统 uniapp
- MySQL中使用序列Sequence的方式总结
- 一文教会你在MySQL中使用DateTime
- 分享Sql|分享Sql Server 存储过程使用方法
- 手机软键盘搜索按钮(react环境)
- 使用高德地图|使用高德地图 iOS SDK进行基于LBS的开发
- JavaScript|【JavaScript 进阶教程】对象新增方法 defineProperty 与 keys 的说明与使用
- matlab|使用MATLAB进行BP神经网络数值预测
- 一个非常好的Linux服务监控工具(使用docker部署titpetric/netdata)