《SpringBoot 3入门与应用实战》第 15 章 生产级特性 使用监控体系 阅读笔记一 参考资料二 笔记总结15.5 使用监控体系Spring Boot Admin 的核心作用是管理和简单监控 Spring Boot 应用的状态所以其最大的局限性就是只能监控 Spring Boot 应用在真实的项目开发和生产环境中我们更希望使用专业的监控体系来全方位监控我们开发的系统。本章的最后我们就来介绍当下比较成熟且流行的监控体系PrometheusGrafana。15.5.1 监控系统 PrometheusPrometheus 是一个成熟的主流的监控预警系统同时 Prometheus 还是一个时间序列数据库所谓时序数据库是指数据库中的所有数据都带有“时刻”的概念即一条数据的保存时间天然集成到数据本身。由于监控数据中包含时刻信息因此 Prometheus 可以完成指定时间区间的监控指标数据趋势统计。Prometheus主要具备以下特点独特的多维数据模型其中包含由指标名称和键值对标识的时间序列数据。专用的指标查询语言 PromQL这种查询语言可以进行指标数据的灵活查询。Prometheus 不依赖分布式存储自身就是时序数据库不需要额外安装第三方数据库。Prometheus 默认使用 HTTP通过 pull拉模式采集时间序列。Prometheus 可以借助服务注册与发现机制动态发现需要监控的目标可以用来监控 K8S 集群。支持整合多种可视化平台例如下面要介绍的 Grafana下面我们简单快速地安装 Prometheus利用 1Panel 可以在 Linux 服务器中快速安装 Prometheus。1Panel 安装 Prometheus 教程15.5.2 Actuator 输出到 Prometheus接下来我们需要给 Spring Boot 应用引入 Prometheus 的支持由于默认情况下 Actuator 返回的都是 JSON 格式的数据而 Prometheus 需要接收 key-value 形式的数据因此需要导入一个 Micrometer 适配 Prometheus 的依赖。当整合该依赖后重启应用再次访问 /actuator 接口可以发现多了一个 /actuator/prometheus 端点我们访问这个端点可以得到一组非常多的指标数据粗略概括一下可以发现Prometheus 需要的指标格式为指标名称{限制条件}指标值。随后再找到 Prometheus 的配置文件在 scrape_configs 节点中添加当前 Spring Boot 应用的监控端点即可。为了验证监控指标是否收集到 Prometheus我们可以切换到 Query 页面输入 tomcat_sessions_active_current_sessions 指标名称并单击右侧的 “Execute” 按钮可以发现下方的 Table 选项卡中展示了当前嵌入式 Tomcat 中的会话数量为0随后再输入 process_cpu_usage 指标名称并点击 “Execute” 按钮可以发现这次获得的值是一个浮点数切换到 Graph 选项卡可以得到一个当前主机 CPU 使用占比的折线图。15.5.3 可视化监控平台 Grafana虽然 Prometheus 可以完成指标数据的展示但是这种需要输入指标名称来获取数据值的方式未免有些复杂和烦琐我们更希望通过一个可视化平台来直观地查看尽可能多的监控指标数据。Grafana 是一个开源的数据可视化平台通过 Grafana 接入 Prometheus 就可以更好地展示监控指标数据的具体值和变动趋势。安装 Grafana 同样可以使用 1Panel。1Panel 安装 Grafana 教程默认的登录用户名和密码均为admin第一次使用admin登录后Grafana会推荐更改密码简单修改后提交即可进入Grafana的主页面。Grafana 只是一个数据可视化平台而数据源来自 Prometheus所以接下来我们要把 Prometheus 配置到 Grafana 中。接下来要根据 Prometheus 中已经收集的监控指标数据来绘制可视化仪表盘 (Dashboard)。如果我们对这些指标完全掌控那么可以尝试自行绘制但即便如此绘制的过程也很烦琐因此可以使用 Grafana 的 Dashboard 市场中现有的成品直接导入。可以直观地看出当前监控的Spring Boot应用已经运行的时间、内存占用情况、CPU运行情况、JVM堆内存情况等。细心的读者可能会发现监控面板中左上角的 Application 值为 None这其实是指代当前监控 Spring Boot 的名称我们只需要在application.yml 中添加一个配置management.metrics.tags.applicationmonitoring-demo。配置完毕后重新启动工程等待大约 15 秒后刷新 Grafana 面板可以发现刚才配置的 Spring Boot 名称成功显示到 Application 中。15.5.4 利用 Grafana 实现监控告警Prometheus 和 Grafana 都内置了监控告警的功能。Prometheus 自带的 Alertmanager 组件可以实现监控告警不过使用 Alertmanager 需要了解告警规则的编写相对而言操作复杂度会高一些Grafana 自带的监控功能支持可视化配置告警规则上手难度相对低也更容易理解。初次添加后该监控规则的判定结果为 Normal代表当前状态正常无须告警。告警状态变为 Pending意为不确定当前是否应该告警这个状态下会遵循我们配置的最大等待时间如果在等待后判定结果仍然符合告警规则则告警状态会变为 Firing代表已经推送告警信息。15.6 小结Spring Boot 能快速流行和被广泛使用完备和高可扩展性的监控体系是非常有分量的筹码之一。作为 Spring Boot 中整合生产级监控指标管理的场景启动器Spring Boot Actuator 默认提供了非常多的监控端点和监控指标且大部分支持HTTP和 JMX 协议的访问不过出于对安全的考虑Spring Boot Actuator 默认禁用了绝大部分 HTTP 端点我们在实际项目上线时需要做好HTTP 监控端点的防护后再开启。通过 HTTP 访问监控端点配合 Spring Boot Admin 可以更好地管理和浏览 Spring Boot 应用的运行状态和相关管理。Spring Boot Actuator 可以配合 Prometheus 和 Grafana 完成完善的监控和告警体系。