APM 对java应用性能监控_Java应用性能监控

在这篇博客中,我们将看到如何使用一个简单的Java CRUD应用程序开始使用弹性Java APM。

Elasticsearch是一个基于java的分布式搜索引擎,用于构建搜索引擎、分析日志、存储指标、安全事件,甚至应用程序跟踪,支持对微服务环境进行分布式跟踪。

Elastic在2018年推出了一个开源的应用程序性能监控(APM),使用Elasticsearch 6.2,允许应用程序发布它们的跟踪信息。今天的APM有更多的特性,比如相关性。

在本博客中,我们将了解如何使用Java代理和为云上的APM部署配置所需的基础设施来配置Java应用程序的跟踪。Elastic APM也支持开放遥测,还有一个弹性输出器。但是,我们关注的是本机弹性APM Java语言代理。

分布式跟踪

分布式跟踪可以帮助您理解在基于分布式微服务的应用程序中发生的请求流。我们可以进行性能分析、根本原因分析、查找失败、错误和异常!

开发人员对微服务架构和其他生态系统工具如Docker、Kubernetes、Java框架如Quarkus、Micronaut和Spring Boot很感兴趣。

弹性APM的高层架构:

微服务应用程序本质上可以包含来自不同编程语言的服务,它们可以相互通信,共享信息。

弹性APM代理是Java Jar包、Nodejs包或Python包,配置为从应用程序收集数据。下面是数据流的高级架构图。

APM 对java应用性能监控_Java应用性能监控_02

APM服务器接收来自不同应用程序的所有数据,并在Elasticsearch中创建文档。

Java CRUD应用程序

关注公众号,回复apm

Javalin

我正在使用Javalin,这是一个轻量级的web框架,可以快速构建Java端点。Javalin运行在Jetty之上,Jetty是JVM上最常用、最稳定的web服务器之一。

Java应用程序存储学生的详细信息,如Id、姓名、年龄。如果您愿意,您可以添加额外的属性。

应用程序有两个接口:

  • /student: GET, POST, PUT, DELETE
  • /school/_count:查找学生的数量。

注意:你可以使用VS Code或IntelliJ来添加代码。无论哪种方式,项目的根都有一个pom.xml。

创建APM部署:

我正在使用弹性云来部署弹性APM部署。您可以开始一个试验并启动一个部署。另外,您还可以通过下载二进制文件来部署Elasticsearch、Kibana和APM服务器。

APM 对java应用性能监控_Java_03

在这里插入图片描述

选择任何云供应商(最好是最新版本的Elastic Stack),单击“创建部署”。您还可以选择通过添加额外的硬件层(暖层、冷层)来单击自定义部署。

创建部署之后,您需要复制APM服务器URL和秘密令牌。

APM 对java应用性能监控_Java应用性能监控_04

部署的左菜单

  • 点击左侧菜单中的APM链接,如上图所示。
  • 我们需要APM服务器URL,秘密令牌。

下载代码:

关注公众号,回复apm

APM 对java应用性能监控_Java_05

克隆之后,请注意resources文件夹下的文件。添加APM服务器URL、从控制台复制到server_urls和secret_token的秘密令牌。

elasticapm.properties

service_name=javalin
application_packages=com.example
server_urls=
secret_token=

Building application

在源文件的根文件夹中,您可以找到项目。很少有像javalin、sl4j和Jackson这样的依赖关系。
执行mvn clean, mvn install在目标文件夹下生成jar。

注意:你需要在你的机器上安装maven (java dev没有ant, maven, gradle在他们的笔记本电脑上!????)

启动应用程序:java -jar target/javalin-student-1.0-snapshot.jar

您可以使用REST客户端像postman 或curl来检查应用程序端点。

Create:

$ curl -X POST -H "Content-Type: application/json" http://localhost:8080/students -d '{ "id": "003","name": "Javalin","age": 15}'$ curl -X POST -H "Content-Type: application/json" http://localhost:8080/students -d '{ "id": "005","name": "Micronaut","age": 12}'$ curl -X POST -H "Content-Type: application/json" http://localhost:8080/students -d '{ "id": "001","name": "Quarkus","age": 16}'

Read:

$ curl -X GET http://localhost:8080/students
$ curl -X GET http://localhost:8080/students/003

Update:

$ curl -X PATCH -H "Content-Type: application/json" http://localhost:8080/students -d '{ "id": "001","name": "Quarkus","age": 32}' #updating age

Delete:

$ curl -X DELETE http://localhost:8080/students/001

Count:

$ curl -X GET http://locahost:8080/school/_count

跟踪应用程序

我们还没有开始跟踪应用程序。您需要从maven中央下载Java代理,并将其放在项目的根文件夹下。
代理设置有三种方式:

  1. 使用- javaagent标志。
  2. 使用apm-agent-attach-standalone.jar - Beta
    3.使用程序化的附加。-β
    我们将使用选项#1,即javaagent方法。
    您需要使用javaagent标志启动应用程序,如下面的示例所示。
    $ java -javaagent:elastic-apm-agent-1.22. jar -jar target/javalin-student-1.0-SNAPSHOT.jar
    注意:您还可以像文档中提到的那样配置受支持的应用服务器。

在Kibana查看监控信息

当您开始访问应用程序端点时,您应该看到Kibana -> Observability -> APM。
APM 对java应用性能监控_Java_06

使用相关性,您可以观察到特定字段的较慢性能和错误率。它使用Elasticsearch的重要术语聚合来提供这些信息。
APM 对java应用性能监控_Java_07

您可以创建特定的阈值、延迟警报、从错误面板中查找错误、使用@CaptureSpan注释为特定方法创建跨域。

除此之外,您还可以启用日志相关性来查找属于特定跟踪的日志,反之亦然。Elastic提供ECS日志库,从应用程序执行结构化日志记录,并直接将其导入Elasticsearch。

结论

开始使用弹性Java APM是很容易的。支持大多数应用服务器和框架。您还可以使用公共API手动创建跟踪和事务。