部署Spring Boot Admin实现基础的服务器监控和告警
Spring Boot Admin
Spring Boot Actuator模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。这个模块是一个采集应用内部信息暴露给外部的模块。支持HTTP和JMX两种方式访问。
Spring Boot Admin(SBA)是在Actuator模块的基础上实现的UI界面,提供直观的UI和仪表盘方便开发者观察应用状态和简单的健康监控。
启动Spring Boot Admin服务
build.grdle中依赖设置为最新的Spring Boot 2.7.4和Spring Boot Admin 2.7.6。
1
2
3
4
5
6
<!-- pom.xml -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.7.6</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
// build.gradle
apply plugin: 'io.spring.dependency-management'
dependencies {
implementation("org.springframework.boot:spring-boot:2.7.4")
implementation("org.springframework.boot:spring-boot-starter:2.7.4")
implementation("org.springframework.boot:spring-boot-starter-web:2.7.4")
implementation("org.springframework.boot:spring-boot-starter-actuator:2.7.4")
implementation("de.codecentric:spring-boot-admin-starter-server:2.7.6")
}
创建应用启动类MonitorApplication.class。
1
2
3
4
5
6
7
8
@SpringBootApplication()
@EnableAdminServer()
public class MonitorApplication {
public static void main(String[] args) {
SpringApplication.run(MonitorApplication.class, args);
}
}
默认监听8080端口,启动之后通过 http://127.0.0.1:8080查看面板。首页如下如所示:
应用接入Spring Boot Admin
项目中接入SBA也很简单,启动时会自动注入配置并注册到SBA。
在应用程序目录中引入Client包。
1
2
// build.gradle
implementation("de.codecentric:spring-boot-admin-starter-client:2.7.6")
1
2
3
4
5
6
<!-- pom.xml -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.7.6</version>
</dependency>
设置启动配置和参数。一下提供基础的简单配置。更多配置见 Client Options
1
2
3
4
5
6
7
8
9
#===================================== Spring Boot Admin ======================================
spring.boot.admin.client.url=http://127.0.0.1:9005
spring.boot.admin.client.instance.prefer-ip=true
spring.boot.admin.client.instance.service-url=http://127.0.0.1:2789
spring.boot.admin.client.instance.metadata.tags.environment=services-my
# Spring Security
spring.boot.admin.client.instance.metadata.user.name=
spring.boot.admin.client.instance.metadata.user.password=
management.endpoints.web.exposure.include=*
启动测试程序。
Spring Cloud服务发现
上例中通过引入client包并注册到SBA。本例主要演示通过Spring Cloud全家桶的服务发现自动注册到SBA。SBA支持全部Spring Cloud的服务发现组件。
首先确定你的项目中引入了Spring Cloud依赖。
1
2
// build.gradle
implementation("org.springframework.cloud:spring-cloud-starter:...")
1
2
3
4
5
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
配置在application.yml文件即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
spring:
cloud:
discovery:
client:
simple:
instances:
test:
- uri: http://instance1.intern:8080
metadata:
management.context-path: /actuator
- uri: http://instance2.intern:8080
metadata:
management.context-path: /actuator
健康状态告警
SBA内置许多通知方式,例如:Microsoft Teams、邮件。也允许用户自定义通知,通过继承实现 AbstractEventNotifier。本小节主要以钉钉告警通知为例,更多其他类型的告警通知配置见 Spring Boot Admin Notifications
相比于普罗米修斯这种重量级的监控和日志收集方案,SBA无法追溯查看历史数据,仅仅是针对状态变更的当前状态做一个告警和通知。作为重量级监控方案的补充,更灵活使用。
钉钉告警通知
属性名 | 描述 | 缺省值 |
---|---|---|
spring.boot.admin.notify.dingtalk.enabled | 是否开启钉钉通知 | true |
spring.boot.admin.notify.dingtalk.webhook-url | 钉钉机器人的webhookUrl | |
spring.boot.admin.notify.dingtalk.secret | 钉钉机器人的密钥 | |
spring.boot.admin.notify.dingtalk.message | 通知文本,支持SpEL表达式 | ”#{instance.registration.name} #{instance.id} is #{event.statusInfo.status}” |
其他
SBA的另外一大亮点就是支持定义端点,允许嵌入外部网页。有助于用户扩展自定义的监控维度,也有助于支持各种各样的其他第三方库的监控管理后台,例如:Dubbo Admin。
参考资料
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 TinyZ Zzh (包含链接: https://tinyzzh.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。 如有任何疑问,请 与我联系 (tinyzzh815@gmail.com) 。
评论