Spring Boot Actuator监控程序运行状态
使用Spring Boot Actuator查看运行指标
Actuator 是由 Spring Boot 提供用于程序运维的相关工具。使用该工具可以很方便地对程序状态进行监控,包括各种指标、流量以及数据库状态等。集成该工具过后,可以通过 HTTP 端点以及 JMX Bean 的方式获取它收集到的信息。启用 Spring Boot Actuator 只需要添加对应的依赖项即可。Spring Boot Actuator 的依赖项如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
注意:监控的内容涉及程序的安全性,在正式使用过程中,请务必再另外加上spring-boot-start-security依赖。
依赖项添加成功之后,可以通过 /actuator 路径查看到当前可用的 Actuator 端点,默认开启的有 health 以及 info。默认内容如下:
{
"_links":{
"self":{
"href":"http://localhost:8080/actuator","templated":false
},
"health":{
"href":"http://localhost:8080/actuator/health","templated": false
},
"health-path":{
"href":"http://localhost:8080/actuator/health/{*path}","templated":true
},
"info":{
"href":"http://localhost:8080/actuator/info","templated":false
}
}
}
- auditevents:公开当前应用程序的审核事件信息。
- beans:显示应用程序中所有 Spring Bean 的完整列表。
- caches:公开可用的缓存。
- conditions:显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。
- configprops:显示所有的整理列表 @ConfigurationProperties。
- env:公开 Spring 的属性 ConfigurableEnvironment。
- flyway:显示所有已应用的 Flyway 数据库迁移。
- health:显示应用程序运行状况信息。
- httptrace:显示 HTTP 跟踪信息(默认情况下,最近的 100 个 HTTP 请求-响应)。
- info:显示应用程序信息。
- integrationgraph:显示 Spring Integration 图。
- loggers:显示和修改应用程序中记录器的配置。
- liquibase:显示已应用的所有 Liquibase 数据库迁移。
- metrics:显示当前应用程序的“指标”信息。
- mappings:显示所有 @RequestMapping 路径的整理列表。
- scheduledtasks:显示应用程序中的计划任务。
- sessions:允许从 Spring Session 支持的会话存储中检索和删除用户会话。
- shutdown:使应用程序正常关闭。
- threaddump:执行线程转储。
通过在 application.yml 中修改相关配置可以启用或者关闭相应端点,配置示例如下:
- management.endpoints.jmx.exposure.exclude:JMX 排除项。
- management.endpoints.jmx.exposure.include:JMX 包含项(默认值 *)。
- management.endpoints.web.exposure.exclude:web 端点排除项。
- management.endpoints.web.exposure.include:web 端点包含项(默认 info,health)。
掌握以上内容便可以使用 Actuator 开放端点,以向外提供监控数据查询的途径。
集成Prometheus
仅仅提供数据查询的接口,并不便于完成对程序的监控。下面将通过整合 Prometheus,完善对程序的监控。Prometheus 是一款开源的系统监控和警报工具,它有以下特点:- 一个多维数据模型,它包含由指标名以及键-值对(Key Value Pair)区分的时序数据。
- PromQL,一种灵活的查询语言。
- 不依赖分布式存储,单服务节点是自洽的。
- 通过HTTP拉取时序数据。
- 通过网关支持时序数据的推送。
- 通过服务发现或静态配置发现监控目标。
- 多种图形和仪表盘支持模式。
使用 Prometheus 可以实现对 Actuator 提供的指标数据的收集、搜索以及展示。该工具是以独立服务的形式运行,因此需要单独部署。推荐使用 Docker 进行部署,步骤如下:
(1)拉取Prometheus镜像:
docker pull prom/prometheus
(2)编写Prometheus的配置文件prometheus.yml:
#全局配置
global:
#拉取间隔,默认1分钟
scrape_interval:
external_labels:
monitor: 'demo-monitor'
#拉取配置
scrape_configs:
#任务名
- job_name: 'prometheus'
scrape_interval:5s
static_configs:
#采集地址
- targets:['localhost:9090']
- job_name:'demo'
#釆集指标的路径
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
- targets:['localhost:8080']
(3)启动容器:
docker run --rm -p 9090:9090 /
-v c:/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml /
prom/prometheus
- --rm:表示将清理历史运行数据。
- -p:用于指定端口映射。
- -v:用于文件挂载,此处将 Windows 系统下的 C:/prometheus/prometheus.yml 挂载到容器中的 /etc/prometheus/prometheus.yml。
(4)完成指令的输入之后
可以通过 http://localhost:9090 访问 Prometheus 的管理界面以确认服务的运行情况。在表达式输入框内输入指标名或者构造 PromQL 后,单击 Execute即可获取对应数值以及简易的图表信息,如图 1 所示。(5)为Spring Boot启用prometheus端口
引入依赖如下:<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>

图1 Prometheus控制台界面
在 application.properties 中加入配置启用端点:
management.endpoints.web.exposure.include=*
# 或者
management.endpoints.web.exposure.include=prometheus
(6)确认 Prometheus 是否可以成功拉取指标数据
通过 Status→Targets 可以查看所监控服务的运行情况,如图 2 和图 3 所示。
图2 查看所监控服务的运行情况

图3 监控服务健康情况
Grafana实现可视化监控
Prometheus 为开发人员提供了指标的记录、搜索以及展示,已经具备了基础的监控功能。不过并不是所有人对于 PromQL 以及各项指标都了如指掌,Prometheus 所提供的图表功能也略显单薄。Grafana 可以填补 Prometheus 这一空隙,它是一款开源的度量分析与可视化套件,通过访问数据源以展示各种自定义报表。它的 UI 十分灵活,有丰富的插件和模板。它功能强大,常用在时序数据的监控方面。
与Prometheus类似,Grafana也是一个需要独立部署的服务。同样推荐使用Docker进行部署,步骤如下:
(1)拉取镜像
docker pull grafana/grafana
(2)创建文件夹
用于存储 Grafana数据的文件夹 grafana(3)在启动时将Grafana挂载上去
docker run –rm -p 3000:3000 --name=grafana -v c:/grafana:/var/lib/grafana
grafana/grafana
(4)访问 Grafana
路径为 http://localhost:3000,如图 4 所示。
图4 Grafana登录页面
默认登录账号和密码为 admin/admin,第一次登录将会弹出重置密码的提示,如图 5 所示。

图5 重置密码提示
(5)完成密码的重置后将跳转至主页,开始设置数据源
通过单击左侧“Configuration”中的“Data Sources”添加数据源,如图 6 所示。
图6 配置数据源
在 HTTP 栏填入 URL 并选择 Access 为 Browser 后单击 Save&Test 按钮,如图 7 所示。

图7 Grafana数据源配置页面
(6)配置仪表盘
Grafana 拥有众多的社区为开发人员提供帮助,仪表盘可以使用社区里的模板配置。通过单击左侧菜单“Create”中的“Import”,进入导入配置页面,如图 8 所示。
图8 导入Dashboard配置
仪表盘模板可以通过 https://grafana.com/grafana/dashboards 页面查到。可以使用 Spring Boot 为关键字检索推荐的模板,如图 9 所示。

图9 官方以及社区所创作的Dashboard模板
将对应 ID 或 URL 填入配置页的输入框,选择 Prometheus 作为数据源即可完成仪表盘模板的导入。
(7)完成导入
完成导入后,便可以使用仪表盘查看程序的各项运行指标,如图 10 所示。至此,基于Spring Boot Actuator、Prometheus以及Grafana的可视化监控功能搭建完成。

图10 社区提供的SLS仪表盘
声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。