首页 > 编程笔记

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
        }
    }
}

Actuator 的可用端点 ID 如下所示:
通过在 application.yml 中修改相关配置可以启用或者关闭相应端点,配置示例如下:

掌握以上内容便可以使用 Actuator 开放端点,以向外提供监控数据查询的途径。

集成Prometheus

仅仅提供数据查询的接口,并不便于完成对程序的监控。下面将通过整合 Prometheus,完善对程序的监控。Prometheus 是一款开源的系统监控和警报工具,它有以下特点:

使用 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

参数说明:

(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控制台界面
图1 Prometheus控制台界面

在 application.properties 中加入配置启用端点:

management.endpoints.web.exposure.include=*
# 或者
management.endpoints.web.exposure.include=prometheus

启动过后可以通过路径 http://localhost:8080/actuator/prometheus 查看端口是否成功开启。

(6)确认 Prometheus 是否可以成功拉取指标数据

通过 Status→Targets 可以查看所监控服务的运行情况,如图 2 和图 3 所示。
图2 查看所监控服务的运行情况
图2 查看所监控服务的运行情况
 
图3 监控服务健康情况
图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登录页面
图4 Grafana登录页面

默认登录账号和密码为 admin/admin,第一次登录将会弹出重置密码的提示,如图 5 所示。
图7.7 重置密码提示  (5)完成密码的重置后将跳转至主页,开始设置数据源。通过单击左侧“Configuration”中的“Data Sources”添加数据源,如图7.8所示。
图5 重置密码提示

(5)完成密码的重置后将跳转至主页,开始设置数据源

通过单击左侧“Configuration”中的“Data Sources”添加数据源,如图 6 所示。
图6 配置数据源
图6 配置数据源

在 HTTP 栏填入 URL 并选择 Access 为 Browser 后单击 Save&Test 按钮,如图 7 所示。
图7 Grafana数据源配置页面
图7 Grafana数据源配置页面

(6)配置仪表盘

Grafana 拥有众多的社区为开发人员提供帮助,仪表盘可以使用社区里的模板配置。通过单击左侧菜单“Create”中的“Import”,进入导入配置页面,如图 8 所示。
图8 导入Dashboard配置
图8 导入Dashboard配置

仪表盘模板可以通过 https://grafana.com/grafana/dashboards 页面查到。可以使用 Spring Boot 为关键字检索推荐的模板,如图 9 所示。
图9 官方以及社区所创作的Dashboard模板
图9 官方以及社区所创作的Dashboard模板

将对应 ID 或 URL 填入配置页的输入框,选择 Prometheus 作为数据源即可完成仪表盘模板的导入。

(7)完成导入

完成导入后,便可以使用仪表盘查看程序的各项运行指标,如图 10 所示。

至此,基于Spring Boot Actuator、Prometheus以及Grafana的可视化监控功能搭建完成。
图10 社区提供的SLS仪表盘
图10 社区提供的SLS仪表盘

优秀文章