如何在Spring Boot中集成Elastic APM进行应用性能监控

本文涉及的产品
应用实时监控服务ARMS - 应用监控,每月50GB免费额度
简介: 如何在Spring Boot中集成Elastic APM进行应用性能监控

如何在Spring Boot中集成Elastic APM进行应用性能监控

在现代应用程序中,性能监控和故障排除是确保应用程序稳定性和性能的重要方面。Elastic APM(应用性能监控)是一种开源解决方案,能够实时收集和分析应用程序性能数据。本文将介绍如何在Spring Boot项目中集成Elastic APM,实现对应用程序的全面性能监控。

什么是Elastic APM

Elastic APM是Elastic Stack(也称为ELK Stack)的一部分,用于监控软件应用程序的性能和可用性。它可以捕获应用程序的响应时间、错误、数据库查询、外部HTTP请求等详细信息,帮助开发者快速定位和解决性能瓶颈和错误。

在Spring Boot中集成Elastic APM

为了在Spring Boot项目中使用Elastic APM,我们需要以下几个步骤:

  1. 添加Elastic APM依赖
  2. 配置Elastic APM
  3. 启动Elastic APM Server
  4. 验证集成效果

1. 添加Elastic APM依赖

首先,我们需要在pom.xml中添加Elastic APM的依赖:

<dependencies>
    <dependency>
        <groupId>co.elastic.apm</groupId>
        <artifactId>elastic-apm-agent</artifactId>
        <version>1.25.0</version>
    </dependency>
</dependencies>

2. 配置Elastic APM

接下来,我们需要配置Elastic APM。在Spring Boot项目的src/main/resources目录下创建一个elasticapm.properties文件,并添加以下配置:

# Elastic APM Server URL
elastic.apm.server_urls=http://localhost:8200

# Application name
elastic.apm.service_name=my-spring-boot-app

# Application environment
elastic.apm.environment=production

# Secret token for APM Server
elastic.apm.secret_token=

# Enable distributed tracing
elastic.apm.distributed_tracing=true

然后,在Spring Boot的启动类中添加Elastic APM的Java Agent。修改src/main/java/cn/juwatech/Application.java文件:

package cn.juwatech;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
   

    public static void main(String[] args) {
   
        // Add Elastic APM agent
        ElasticApmAttacher.attach();

        SpringApplication.run(Application.class, args);
    }
}

3. 启动Elastic APM Server

为了接收和处理来自应用程序的性能数据,我们需要启动Elastic APM Server。可以使用Docker来快速启动APM Server:

docker run -d --name=apm-server -p 8200:8200 -e ELASTIC_APM_SECRET_TOKEN= -e ELASTIC_APM_SERVER_URLS=http://localhost:8200 docker.elastic.co/apm/apm-server:7.12.0

4. 验证集成效果

现在,我们可以启动Spring Boot应用程序并验证Elastic APM的集成效果。在应用程序启动并运行一段时间后,访问Elastic APM UI查看性能数据。默认情况下,Elastic APM UI在Kibana中可用,您可以通过以下URL访问:

http://localhost:5601/app/apm

使用Spring Boot Controller演示

为了展示Elastic APM的监控效果,我们可以创建一个简单的Spring Boot控制器。创建一个名为HelloController的控制器类:

package cn.juwatech.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
   

    @GetMapping("/hello")
    public String sayHello() {
   
        return "Hello, Elastic APM!";
    }
}

启动Spring Boot应用程序并访问http://localhost:8080/hello,然后在Elastic APM UI中查看监控数据。

5. 自定义监控

Elastic APM还允许我们添加自定义的监控数据。可以通过APM Agent的API来实现这一点。比如,我们可以在控制器中添加自定义事务和跨度:

package cn.juwatech.controller;

import co.elastic.apm.api.ElasticApm;
import co.elastic.apm.api.Span;
import co.elastic.apm.api.Transaction;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
   

    @GetMapping("/hello")
    public String sayHello() {
   
        Transaction transaction = ElasticApm.startTransaction();
        transaction.setName("Custom Transaction");
        transaction.setType(Transaction.TYPE_REQUEST);

        Span span = transaction.startSpan();
        span.setName("Custom Span");
        span.setType("custom");

        try {
   
            // Simulate some work
            Thread.sleep(100);
            return "Hello, Elastic APM!";
        } catch (InterruptedException e) {
   
            e.printStackTrace();
            return "Error!";
        } finally {
   
            span.end();
            transaction.end();
        }
    }
}

总结

通过以上步骤,我们成功地在Spring Boot项目中集成了Elastic APM,实现了对应用程序的性能监控。Elastic APM不仅能够捕获应用程序的基本性能指标,还可以通过自定义监控来满足更多的需求。在实际项目中,可以根据需求进一步优化和扩展Elastic APM的使用,例如配置更多的监控项、设置告警等。

相关实践学习
通过云拨测对指定服务器进行Ping/DNS监测
本实验将通过云拨测对指定服务器进行Ping/DNS监测,评估网站服务质量和用户体验。
相关文章
|
28天前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
3月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
105 1
|
18天前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
39 1
|
25天前
|
Java 测试技术 API
如何在 Apache JMeter 中集成 Elastic APM
如何在 Apache JMeter 中集成 Elastic APM
32 1
|
1月前
|
存储 前端开发 Java
Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
本文详细介绍如何在Spring Boot项目中集成MinIO对象存储系统与KKFileView文件预览工具,实现文件上传及在线预览功能。首先搭建MinIO服务器,并在Spring Boot中配置MinIO SDK进行文件管理;接着通过KKFileView提供文件预览服务,最终实现文档管理系统的高效文件处理能力。
175 11
|
18天前
|
Java Spring
springboot 学习十一:Spring Boot 优雅的集成 Lombok
这篇文章是关于如何在Spring Boot项目中集成Lombok,以简化JavaBean的编写,避免冗余代码,并提供了相关的配置步骤和常用注解的介绍。
62 0
|
3月前
|
监控 前端开发 JavaScript
ARMS集成监控代码
【8月更文挑战第24天】
65 6
|
3月前
|
消息中间件 安全 Java
Spring Boot 基于 SCRAM 认证集成 Kafka 的详解
【8月更文挑战第4天】本文详解Spring Boot结合SCRAM认证集成Kafka的过程。SCRAM为Kafka提供安全身份验证。首先确认Kafka服务已启用SCRAM,并准备认证凭据。接着,在`pom.xml`添加`spring-kafka`依赖,并在`application.properties`中配置Kafka属性,包括SASL_SSL协议与SCRAM-SHA-256机制。创建生产者与消费者类以实现消息的发送与接收功能。最后,通过实际消息传递测试集成效果与认证机制的有效性。
122 4
|
3月前
|
人工智能 Java API
JeecgBoot 低代码平台快速集成 Spring AI
Spring 通过 Spring AI 项目正式启用了 AI(人工智能)生成提示功能。本文将带你了解如何在 Jeecg Boot 应用中集成生成式 AI,以及 Spring AI 如何与模型互动,包含 RAG 功能。
117 3
|
3月前
|
测试技术 Java Spring
Spring 框架中的测试之道:揭秘单元测试与集成测试的双重保障,你的应用真的安全了吗?
【8月更文挑战第31天】本文以问答形式深入探讨了Spring框架中的测试策略,包括单元测试与集成测试的有效编写方法,及其对提升代码质量和可靠性的重要性。通过具体示例,展示了如何使用`@MockBean`、`@SpringBootTest`等注解来进行服务和控制器的测试,同时介绍了Spring Boot提供的测试工具,如`@DataJpaTest`,以简化数据库测试流程。合理运用这些测试策略和工具,将助力开发者构建更为稳健的软件系统。
49 0