如何使用 InfluxDB 对实时 SpringBoot 应用进行监控

导航到

企业级 Java 开发者深知在生产环境中应用性能缓慢的烦恼。在复杂的微服务架构中诊断问题可能是一场耗时且痛苦的噩梦。幸运的是,流行的 Java 框架 SpringBoot 提供了一个强大的可观测性堆栈,简化了实时监控和分析。通过利用诸如 SpringBoot ActuatorMicrometer with InfluxDBGrafana 等库和工具的力量,您可以轻松快速地收集有意义的见解。

在本文中,我们将探讨如何在“卡片游戏”应用/游戏的简单用例中设置所有这些内容。为了参考目的,您还可以在 GitHub 上找到完整的示例。 Card-App-Screenshot

项目设置

首先,在初始化 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 with InfluxDB

Micrometer 是一个独立的库,与 Springboot 集成良好,以启用应用程序仪表化。一旦在项目的 pom.xml 文件中添加了 micrometer-influx 依赖项,如上所示,下一步就是编辑 application.properties 文件以配置 Micrometer。这样,它就可以将相关指标公开到 InfluxDB 存储桶中,用于数据记录和监控目的。这里,您还需要 InfluxDB 的“令牌”、“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,该服务与外部扑克牌API交互以获取一张随机卡片,并通过index.html网页将其作为SVG图像返回给客户端。 同时,InfluxDBConfig.java类根据application.properties文件配置Micrometer与InfluxDB的集成。随着应用程序处理请求,Micrometer收集诸如响应时间和请求次数等指标,并将它们发送到InfluxDB Bucket进行存储。这些指标随后在Grafana中可视化,允许开发者在实时中监控应用程序的性能。

关键Micrometer概念

指标:描述应用程序行为的数值点,例如HTTP请求数、响应时间和内存使用情况

仪表:记录指标的仪器

  • 计时器:测量事件持续时间(例如,请求处理时间)
  • 计数器:测量增加的值(例如,HTTP请求数量)
  • 表计:表示可以上下变化的单一值(例如,内存使用情况)

标签:为指标添加上下文的标签(键值对),例如HTTP状态代码

注册表:指标存储的地方,例如InfluxDB的InfluxMeterRegistry

我们的示例应用程序使用第三方HTTP API,该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仪表板查看这些指标,或者将其连接到流行的可视化工具,例如Grafana,并为您所有的相关指标创建一个自定义仪表板。在这里,我们可以看到端点被调用多少次、在什么时间调用以及结果。

结论

通过有效地使用Spring Boot Actuator、Micrometer与InfluxDB以及Grafana,您可以获得有关应用程序性能的宝贵见解。这种主动方法有助于预防问题并确保用户有良好的体验,尤其是在Kubernetes集群等复杂环境中。跟踪关键的应用性能指标和健康指标,使您能够采取DevOps思维模式,从而在信心满满地将应用程序部署到生产环境中。

鼓励您探索GitHub上的示例应用程序https://github.com/InfluxCommunity/SpringBoot-InfluxDB-Demo,并记住您可以从InfluxDB Cloud免费开始使用。如果您有任何问题或反馈,请通过我们的社区Slack社区论坛与我们联系