在这篇博客中,我们将看到如何使用一个简单的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服务器接收来自不同应用程序的所有数据,并在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服务器。
在这里插入图片描述
选择任何云供应商(最好是最新版本的Elastic Stack),单击“创建部署”。您还可以选择通过添加额外的硬件层(暖层、冷层)来单击自定义部署。
创建部署之后,您需要复制APM服务器URL和秘密令牌。
部署的左菜单
- 点击左侧菜单中的APM链接,如上图所示。
- 我们需要APM服务器URL,秘密令牌。
下载代码:
关注公众号,回复apm
克隆之后,请注意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代理,并将其放在项目的根文件夹下。
代理设置有三种方式:
- 使用- javaagent标志。
- 使用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。
使用相关性,您可以观察到特定字段的较慢性能和错误率。它使用Elasticsearch的重要术语聚合来提供这些信息。
您可以创建特定的阈值、延迟警报、从错误面板中查找错误、使用@CaptureSpan注释为特定方法创建跨域。
除此之外,您还可以启用日志相关性来查找属于特定跟踪的日志,反之亦然。Elastic提供ECS日志库,从应用程序执行结构化日志记录,并直接将其导入Elasticsearch。
结论开始使用弹性Java APM是很容易的。支持大多数应用服务器和框架。您还可以使用公共API手动创建跟踪和事务。