如何为 Java 应用进行 APM

原创
07/01 16:24
阅读数 25



导语



在我之前的文章 “Solutions:应用程序性能监控/管理(APM)实践”,我已经详细介绍了 APM 以及如何针对 Java 应用进行 APM。在那篇文章中的  Baidu 天气服务由于一些原因现在不能正常工作。在今天的文章中,我将使用 Elastic 官方发布的 Java 例子来做详细的描述。我将一步一步地介绍如何进行设置。


安装


在今天的练习中,我们将使用 docker 来部署 Elastic Stack。首先,我们到如下的地址来下载 docker-compose.yml 文件:

curl -sLO https://raw.githubusercontent.com/elastic/apm-contrib/master/stack/docker-compose.yml


在 docker-compose.yml 所处的同一个目录下,我们创建一个如下的文件 .env:

$ pwd/Users/liuxg/data/apm-docker$ ls -altotal 24drwxr-xr-x    4 liuxg  staff   128 Jul  1 11:25 .drwxr-xr-x  136 liuxg  staff  4352 Jul  1 11:16 ..-rw-r--r--    1 liuxg  staff    21 Jul  1 11:25 .env-rw-r--r--    1 liuxg  staff  5391 Jul  1 11:16 docker-compose.yml$ cat .envSTACK_VERSION=7.13.2


在上面的 .env 文件中,我们修改变量 STACK_VERSION 为我们所喜欢的 Elastic Stack 版本。


接下来,我们使用如下的命令来启动 Elastic Stack:

docker-compose up



Java Demo 应用


在这一节,我们来下载 Elastic 官方推荐的 Java Demo 应用来进行展示。我们首先来创建一个目录 demos,并在该目录下打入如下的命令:

git clone https://github.com/elastic/opbeans-java


这是一个 Java 编写的 Spring boot 应用。你需要安装 Java 的编译环境以及 Maven 来对它进行编译。等代码下载完毕后,我们进行 opbeans-java 目录,并打入如下的命令来进行编译:

cd opbeans-java/opbeansmvn package


在上面,我们可以看到一个叫做 opbeans-0.0.1-SNAPSHOT.jar 的 jar 文件以及被成功生成,并在 target 目录下:

$ ls target/opbeans-0.0.1-SNAPSHOT.jartarget/opbeans-0.0.1-SNAPSHOT.jar


这样我们就完成了对 Java 应用的编译工作。


将 APM 数据流式传送到 Elastic Stack


接下来,我将描述如何把 APM 的数据传送至 Elastic Stack。首先,我们打开 Kibana:


选择上面的 APM:


由于我们已经安装好 Elastic Stack 了,所以我们直接跳过前面的部分来直接配置 Java APM agent。我们首先点击上面的 Maven Central 链接来下载 agent jar,并把相应的文件保存于 opbean-java/opbean 目录下:


我们也可以直接使用如下的命令来获得:

wget -O elastic-apm-agent-1.24.0.jar https://search.maven.org/remotecontent\?filepath\=co/elastic/apm/elastic-apm-agent/1.24.0/elastic-apm-agent-1.24.0.jar


上面的命令适合于在云上的部署。这样在我们的目录中会发现一个新下载的 elastic-apm-agent-1.24.0.jar 文件:

$ pwd/Users/liuxg/demos/apm/opbeans-java/opbeans$ lselastic-apm-agent-1.24.0.jar pom.xmlmvnw                         srcmvnw.cmd                     target


我们接下来按照 Kibana 中所提示的那样:


我们在 terminal 中输入如下的命令:

java -javaagent:./elastic-apm-agent-1.24.0.jar \     -Delastic.apm.service_name=opbeans-java \     -Delastic.apm.server_urls=http://localhost:8200 \     -Delastic.apm.secret_token= \     -Delastic.apm.environment=production \     -Delastic.apm.application_packages=co.elastic.apm.opbeans \     -jar ./target/opbeans-0.0.1-SNAPSHOT.jar


一旦我们成功运行,我们可以看到如下的画面:


从上面的过程中,我们可以看出来,我们并没有对我们的 Java 应用做任何的修改。我们只是通过在命令行中添加一下参数从而使得 Java agents 能够收集 APM 信息。这种操作我们称之为 instrument,也即插庄。


在上面,我们成功地启动了 Java Spring Boot 应用。我们带自己的浏览器,并输入地址:http://localhost:8080/


我们在上面的界面中进行一些操作从而能够生产一些请求。我们将在后面的 APM 应用中来分析这些请求的性能。


我们再回到 Kibana 的界面:


点击上面的  Check APM Server status 按钮。我们可以看到我们已经成功地收到数据了。


点击上面的 Launch APM 或者 直接启动 APM 应用我们就可以查看到这个 Spring Boot 的应用性能。


为了能够在下面的分析中看到一些错误的信息,我们故意在 Spring Boot 的应用中访问不存在的地址:http://localhost:8080/is-it-coffee-time


可视化 APM 数据


我们重新回到上面的 APM 应用中:


在上面,我们可以看到有两个 Services。上面显示了一些粗略的信息。我们点击上面的 opbeans-java 链接。我们可以看到这个应用的 APM overview 情况。


从上面,我们可以看到各种指标信息。比如针对 Transanctions 来说,我们看到对我们影响最大的一个 API 接口是 APIRestController#orders,而且它还有一些错误:


点击上面的链接:


从上面,我们可以看出来有一个 transactoin 所花的时间较长。其中的原因是因为有一个错误。我们点击上面的 span:


我们可以看到更为详细的信息:


我们点击上面的 Transactions 链接:


我们点击上面的 Erros:


点击上面的 Broken pipe:


我们可以看到更为详细的错误信息。


我们点击 JVM:


点击上面的 liuxg 链接:


我们可以看到 JVM 的运行状况。


我们点击 Service Map:


我们可以看到 opbeans-java 访问 h2 数据库。点击上面的 Service Details。它会带我们回到 Service overview 页面:


正文完



 作者:刘晓国

本文编辑:喝咖啡的猫



嗨,互动起来吧!

喜欢这篇文章么?

欢迎留下你想说的,留言 100% 精选哦!

Elastic 社区公众号长期征稿,如果您有 Elastic  技术的相关文章,也欢迎投稿至本公众号,一起进步! 投稿请添加微信:medcl123



招聘信息

Job board


社区招聘栏目是一个新的尝试,帮助社区的小伙伴找到心仪的职位,也帮助企业找到所需的人才,为伯乐和千里马牵线搭桥。有招聘需求的企业和正在求职的社区小伙伴,可以联系微信 medcl123 提交招聘需求和发布个人简历信息。


Elastic中文社区公众号 (elastic-cn)

为您汇集 Elastic 社区的最新动态、精选干货文章、精华讨论、文档资料、翻译与版本发布等。

喜欢本篇内容就请给我们点个[在看]吧



本文分享自微信公众号 - Elastic中文社区(elastic-cn)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部