如何使用 InfluxDB 进行 SpringBoot 应用程序实时监控
作者:Suyash Joshi / 开发者
2024 年 9 月 5 日
导航至
企业 Java 开发者深知生产环境中应用程序性能迟缓带来的挫败感。在复杂的微服务架构中诊断问题可能是一场耗时的噩梦。幸运的是,流行的 Java 框架 SpringBoot 提供了强大的可观测性堆栈,以简化实时监控和分析。通过利用 SpringBoot Actuator、Micrometer 与 InfluxDB 以及 Grafana 等库和工具的强大功能,您可以轻松快速地收集有意义的见解。
在本文中,我们将探讨如何在“纸牌游戏”应用程序/游戏的简单用例中进行设置。作为参考,您还可以在 GitHub 上找到完整的示例。
项目设置
首先,在初始化 SpringBoot 项目后,我们必须添加必要的依赖项。在这里,我们将使用 Maven 项目的 pom.xml 文件来完成。最重要的依赖项是 Spring Boot Actuator 和带有 InfluxDB 注册表的 Micrometer。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-influx</artifactId>
<version>1.13.1</version>
</dependency>
SpringBoot Actuator
Spring Boot Actuator 提供了生产就绪的功能,可帮助您监控和管理应用程序。默认情况下,它公开了基本的端点,如 /actuator/health 和 /actuator/info。但是,您可以根据需要通过编辑 “application.properties” 文件安全地启用更多端点,该文件如下所示
# SpringBoot Actuator Endpoints configuration
management.endpoints.web.exposure.include=health,info,metrics
Micrometer 与 InfluxDB
Micrometer 是一个独立的库,可与 Springboot 良好集成,以实现应用程序 instrumentation(检测)。一旦您在项目的 pom.xml 文件中添加了 micrometer-influx 依赖项(如上所示),下一步是编辑 application.properties 文件以配置 micrometer。这样,它就可以将相关的指标暴露给 InfluxDB bucket,用于数据记录和监控目的。在这里,您还需要 InfluxDB “token”、URL、“org” 和 “bucket” 信息,您可以在 InfluxDB 门户上找到这些信息。
# InfluxDB Micrometer Registry Configuration for v2
management.metrics.tags.application=PickACard
management.metrics.export.influx.api-version=v2
management.metrics.export.influx.batch-size=10000
management.metrics.export.influx.compressed=true
management.metrics.export.influx.connect-timeout=1s
management.metrics.export.influx.enabled=true
management.metrics.export.influx.num-threads=2
management.metrics.export.influx.read-timeout=10s
management.metrics.export.influx.step=1m
management.metrics.export.influx.bucket=YOUR\_INFLUXDB\_BUCKET
management.metrics.export.influx.org=YOUR\_INFLUXDB\_ORG
management.metrics.export.influx.token=YOUR\_INFLUXDB\_TOKEN
management.metrics.export.influx.uri=YOUR\_INFLUXDB\_URI
应用程序架构
架构逻辑围绕三个关键类:“CardController.java”、“DeckOfCardService.java” 和 “InfluxDBConfig.java” 展开。CardController 作为入口点,处理来自用户的 HTTP 请求。当向 /card 端点发出请求时,控制器调用 DeckOfCardService,后者与外部 Deck of Cards API 交互,以获取随机卡牌并通过 index.html 网页以 SVG 图像的形式返回给客户端。 同时,InfluxDBConfig.java 类根据 application.properties 文件配置 Micrometer 与 InfluxDB 的集成。当应用程序处理请求时,Micrometer 会收集诸如响应时间和请求计数等指标,并将它们发送到 InfluxDB Bucket 进行存储。然后,这些指标在 Grafana 中可视化,使开发人员能够实时监控应用程序的性能。
关键 Micrometer 概念
指标 (Metrics):描述应用程序行为的数据点,例如 HTTP 请求计数、响应时间和内存使用情况
仪表 (Meters):记录指标的工具
- 计时器 (Timers):测量事件的持续时间(例如,请求处理时间)
- 计数器 (Counters):测量递增的值(例如,HTTP 请求数)
- 计量器 (Gauges):表示可以上升或下降的单个值(例如,内存使用情况)
标签 (Tags):为指标添加上下文的标签(键值对)(例如,HTTP 状态代码)
注册表 (Registry):指标存储的位置,例如 InfluxDB 的 InfluxMeterRegistry
我们的示例应用程序有一个简单的纸牌游戏,它使用提供随机纸牌的第三方 HTTP API。在这里,我使用的是免费 API;但是,如果您使用付费服务,监控 API 调用将变得更加重要。通过配置 SpringBoot Actuator 和 Micrometer 与 InfluxDB,在下面的代码片段中,我们可以监控自定义指标 “card” 以跟踪每个请求花费的时间、请求的结果以及应用程序正在使用的内存量等。
@Controller
public class CardController {
@GetMapping("/card")
@ResponseBody
public Mono<String> getRandomCard() {
return deckOfCardService.getRandomCardSvg();
}
}
使用 InfluxDB 和 Grafana 进行日志记录和监控
一旦您的 Spring Boot 应用程序运行起来,它将开始将指标推送到您配置的 InfluxDB bucket。然后,您可以使用 InfluxDB Dashboard 查看相同的内容,或者将其与流行的可视化工具(如 Grafana)连接,并为您所有相关的指标创建自定义仪表板。在这里,我们可以看到端点被调用的次数、时间以及结果。
结论
通过有效使用 Spring Boot Actuator、Micrometer 与 InfluxDB 以及 Grafana,您可以深入了解应用程序的性能。这种积极主动的方法有助于防止问题,并确保流畅的用户体验,尤其是在 Kubernetes 集群等复杂环境中。跟踪关键应用程序性能指标和健康指标使您能够采用 DevOps 思维模式,从而让您自信地部署到生产环境。
鼓励您在 GitHub 上探索示例应用程序,并记住您可以免费开始使用 InfluxDB Cloud。如果您有任何问题或反馈,请随时通过我们的社区 Slack 或 社区论坛与我们联系