首页 > Java > java教程 > 基本的 Java 可观察性工具:提高应用程序性能

基本的 Java 可观察性工具:提高应用程序性能

Patricia Arquette
发布: 2025-01-04 18:42:39
原创
703 人浏览过

ssential Java Observability Tools: Boost Application Performance

作为畅销书作家,我邀请您在亚马逊上探索我的书。不要忘记在 Medium 上关注我并表示您的支持。谢谢你!您的支持意味着全世界!

作为一名拥有多年经验的 Java 开发人员,我逐渐认识到应用程序可观察性的重要性。这不仅仅是在问题出现时解决问题;这是关于始终清楚地了解应用程序的行为、性能和运行状况。在本文中,我将分享我对五个强大工具的见解,这些工具显着增强了我监控和优化 Java 应用程序的能力。

千分尺:您的度量瑞士军刀

Micrometer 已成为我测量应用程序指标的首选工具。其供应商中立的方法意味着我可以在不同的监控系统之间切换,而无需更改我的代码。无论我使用 Prometheus、Graphite 还是 InfluxDB,Micrometer 都能满足我的需求。

我最喜欢 Micrometer 的是它的维度指标模型。它允许我向指标添加标签,从而在分析数据时提供非常宝贵的上下文。这是我如何使用 Micrometer 来计数事件的简单示例:

Counter counter = Metrics.counter("api.requests", "endpoint", "/users");
counter.increment();
登录后复制
登录后复制

此代码为 API 请求创建一个计数器,并带有指定端点的标签。我可以轻松添加更多标签来提供额外的上下文,例如 HTTP 方法或用户类型。

Micrometer 还支持其他指标类型,例如仪表、计时器和分布摘要。我经常使用计时器来跟踪方法执行时间:

Timer timer = Metrics.timer("method.execution", "class", "UserService", "method", "createUser");
timer.record(() -> userService.createUser(user));
登录后复制
登录后复制

记录了createUser方法的执行时间,并用类和方法名称进行标记,以便于识别。

Spring Boot 执行器:生产就绪监控

对于我的 Spring Boot 应用程序来说,Spring Boot Actuator 是不可或缺的。它提供了丰富的生产就绪功能,我可以通过最少的配置来启用这些功能。

我最喜欢的执行器端点之一是健康端点。它让我可以快速了解应用程序的运行状况:

@Component
public class DatabaseHealthIndicator implements HealthIndicator {
    @Override
    public Health health() {
        if (isDatabaseHealthy()) {
            return Health.up().withDetail("database", "Operational").build();
        }
        return Health.down().withDetail("database", "Not responding").build();
    }
}
登录后复制
登录后复制

此自定义运行状况指示器检查数据库状态并通过 /actuator/health 端点报告。

执行器的指标端点是另一个宝石。它公开了广泛的指标,从 JVM 统计数据到自定义业务指标。我经常将它与千分尺结合使用:

@RestController
public class UserController {
    private final Counter userCreationCounter;

    public UserController(MeterRegistry registry) {
        this.userCreationCounter = registry.counter("users.created");
    }

    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        // User creation logic
        userCreationCounter.increment();
        return user;
    }
}
登录后复制
登录后复制

每次创建用户时,此代码都会增加一个计数器,然后我可以通过 /actuator/metrics 端点进行监控。

OpenTelemetry:可观测性的未来

OpenTelemetry 彻底改变了我在应用程序中实现可观察性的方式。其用于跟踪、指标和日志记录的统一 API 意味着我可以跨不同服务和语言标准化我的可观察性堆栈。

以下是我在 Java 应用程序中设置 OpenTelemetry 的典型方法:

Counter counter = Metrics.counter("api.requests", "endpoint", "/users");
counter.increment();
登录后复制
登录后复制

此设置创建了一个跟踪器和一个跨度,我可以用它们来跟踪一段代码的执行。 OpenTelemetry 的美妙之处在于它可以与各种后端系统无缝协作,因此我可以将此数据发送到 Jaeger、Zipkin 或任何其他兼容系统。

Elastic APM:深入洞察应用程序性能

Elastic APM 在理解 Java 应用程序的性能特征方面改变了我的游戏规则。它提供方法级分析和详细事务跟踪的能力帮助我识别并解决了无数性能问题。

将 Elastic APM 集成到 Spring Boot 应用程序中非常简单:

Timer timer = Metrics.timer("method.execution", "class", "UserService", "method", "createUser");
timer.record(() -> userService.createUser(user));
登录后复制
登录后复制

此代码为每个用户检索请求创建一个事务,使我能够跟踪其在 Elastic APM 中的性能。

我特别欣赏的 Elastic APM 的一个功能是它的 JDBC 查询自动检测。它帮助我识别缓慢的数据库查询,而无需我进行任何额外的编码。

Jaeger:微服务的分布式跟踪

在我的微服务架构工作中,Jaeger 的价值无可估量。它的分布式跟踪功能使我能够理解跨多个服务的复杂请求流。

以下是我通常如何在 Spring Boot 应用程序中设置 Jaeger:

@Component
public class DatabaseHealthIndicator implements HealthIndicator {
    @Override
    public Health health() {
        if (isDatabaseHealthy()) {
            return Health.up().withDetail("database", "Operational").build();
        }
        return Health.down().withDetail("database", "Not responding").build();
    }
}
登录后复制
登录后复制

此设置为 getUser 方法创建了一个跨度,然后我可以在 Jaeger 的 UI 中对其进行可视化。当此方法调用其他服务时,Jaeger 会自动链接跨度,让我完整了解请求流程。

Jaeger 向我显示请求每个部分的时间安排的能力对于识别分布式系统中的性能瓶颈至关重要。

将它们放在一起

根据我的经验,最有效的可观察性策略结合了多种工具。我经常使用 Micrometer 来获取基本指标,使用 Spring Boot Actuator 来进行健康检查和操作信息,使用 OpenTelemetry 来实现跨服务的标准化可观测性,使用 Elastic APM 来获取深入的性能洞察,使用 Jaeger 来进行分布式跟踪。

以下是我如何在 Spring Boot 应用程序中组合这些工具的示例:

@RestController
public class UserController {
    private final Counter userCreationCounter;

    public UserController(MeterRegistry registry) {
        this.userCreationCounter = registry.counter("users.created");
    }

    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        // User creation logic
        userCreationCounter.increment();
        return user;
    }
}
登录后复制
登录后复制

在此设置中,我使用:

  • Spring Boot Actuator(Spring Boot 中默认启用)
  • 用于方法计时的千分尺(通过 @Timed 注释)
  • Jaeger 用于分布式跟踪(在控制器中)
  • 用于详细性能跟踪的弹性 APM(在服务中)

这种组合让我可以全面了解应用程序的行为和性能。

结论

可观察性在现代 Java 开发中并不是一种奢侈;这是必要的。我在这里讨论的工具 - Micrometer、Spring Boot Actuator、OpenTelemetry、Elastic APM 和 Jaeger - 已成为我的开发工具包不可或缺的一部分。

每种工具都有自己的优势。 Micrometer 提供灵活的指标收集,Spring Boot Actuator 提供生产就绪的功能,OpenTelemetry 标准化跨服务的可观察性,Elastic APM 提供深入的性能洞察,Jaeger 擅长分布式跟踪。

通过有效地利用这些工具,我已经能够构建更健壮、高性能和可维护的 Java 应用程序。我可以快速识别问题,了解复杂的系统行为,并做出有关优化和改进的数据驱动决策。

请记住,可观察性的目标不仅仅是收集数据,而是获得可操作的见解。当您在自己的项目中实现这些工具时,请重点关注与应用程序性能和业务目标最相关的指标和跟踪。

可观察性领域在不断发展,新的工具和技术不断出现。保持好奇心,不断学习,并毫不犹豫地尝试不同的方法。未来的您(和您的运营团队)将感谢您在应用程序中构建的见解。


101 本书

101 Books是一家人工智能驱动的出版公司,由作家Aarav Joshi共同创立。通过利用先进的人工智能技术,我们将出版成本保持在极低的水平——一些书籍的价格低至 4 美元——让每个人都能获得高质量的知识。

查看我们的书Golang Clean Code,亚马逊上有售。

请继续关注更新和令人兴奋的消息。购买书籍时,搜索 Aarav Joshi 以查找更多我们的书籍。使用提供的链接即可享受特别折扣

我们的创作

一定要看看我们的创作:

投资者中心 | 投资者中央西班牙语 | 投资者中德意志 | 智能生活 | 时代与回响 | 令人费解的谜团 | 印度教 | 精英开发 | JS学校


我们在媒体上

科技考拉洞察 | 时代与回响世界 | 投资者中央媒体 | 令人费解的谜团 | 科学与时代媒介 | 现代印度教

以上是基本的 Java 可观察性工具:提高应用程序性能的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板