Spring Boot中如何使用Ostara监控应用?
内容提要
本文介绍了使用Ostara监控Spring Boot应用程序的步骤,包括创建可监控的应用程序、验证运行情况和添加安全层。同时介绍了Ostara的安装和基本功能。
延伸解读
Ostara 与 Grafana 的定位差异
文章指出,Ostara 与常见的 Spring Actuator + Prometheus + Grafana 方案相比,设置更简单。Grafana 的图表更花哨,但 Ostara 不仅是可视化工具,还能与应用程序交互,例如启动线程剖析、下载堆转储,并在指标异常时发出通知。因此,如果团队希望快速搭建监控并直接操作应用,Ostara 是一个轻量替代;若追求丰富的图表展示,Grafana 仍更合适。
安全配置的注意事项
文章为执行器端点添加了基于 Spring Security 的基本认证,但明确提醒该设置不适合生产环境。默认凭证为 admin/admin123,且所有执行器端点仅要求 ADMIN 角色。在生产中,应使用强密码、限制端点暴露范围,并考虑更安全的认证机制。此外,启用所有执行器端点会暴露大量信息,需谨慎评估。
属性值屏蔽与日志级别调整
Spring Boot 3 默认会屏蔽执行器端点中的属性值,文章通过设置 management.endpoint.configprops.show-values 和 management.endpoint.env.show-values 为 when-authorized 来显示值。在日志记录仪页面更改日志级别时,可能会因 CSRF 保护而失败,文章建议对执行器端点禁用 CSRF 保护,或直接在代码中添加日志语句验证。这些调整有助于调试,但需注意安全影响。
Q&A
Ostara是什么?它和Spring Actuator、Prometheus、Grafana这些监控方案有什么不同?
Ostara是一个桌面应用程序,用于监视和管理Spring Boot应用程序。与常见的Spring Actuator、Prometheus和Grafana组合相比,Ostara的设置更简单,只需下载一个文件并启动即可。它提供清晰的可视化视图,并能在出现问题时发出通知,还能与应用程序交互,例如启动线程剖析和下载堆转储。
为了用Ostara监控Spring Boot应用,需要在项目中添加哪些依赖和配置?
需要添加Spring Web和Spring Boot Actuator组件。在pom文件中添加git-commit-id-plugin以生成构建信息,并在spring-boot-maven-plugin的执行中添加build-info目标。在application.properties中设置management.info.git.mode=full以启用完整的git信息。此外,添加一个带有两个虚拟端点的Rest控制器,并构建运行应用。
如何为Spring Boot的执行器端点添加基本的安全措施?
在pom中添加Spring Security依赖。在application.properties中配置用户名、密码和角色,例如spring.security.user.name=admin、spring.security.user.password=admin123、spring.security.user.roles=ADMIN。然后添加一个WebSecurity类,为执行器端点添加安全层,要求具有ADMIN角色才能访问/actuator/**,并启用HTTP基本认证。
如何安装Ostara并配置它来监控Spring Boot应用?
访问Ostara网站,点击下载按钮,选择平台(如Linux 64位)下载AppImage文件,双击启动。在Ostara中,建议先禁用发送使用统计和错误信息。然后创建实例,填写Actuator URL(如http://localhost:8080/actuator)、别名、应用名称,禁用SSL验证,选择Basic认证类型,输入用户名和密码。点击Test Connection,可能会遇到未经授权的错误,忽略并保存即可。
Ostara的Metrics页面有什么功能?如何设置一个指标通知?
Metrics页面允许启用预定义或自定义度量的通知。例如,打开http.server.requests指标,点击Add Metric Notification,填写名称、类型、标签、操作和值,即可创建通知。比如设置当EndPoint1被调用超过10次时触发通知。
Ostara的Loggers页面能做什么?如果更改日志级别时遇到禁止操作错误,如何解决?
Loggers页面显示可用的记录仪,可以更改所需的记录级别,便于分析错误。如果更改日志级别时遇到禁止操作错误,需要禁用执行器端点的CSRF保护。在WebSecurity类中添加.csrf(csrf -> csrf.ignoringRequestMatchers("/actuator/**"))即可解决。