从Java应用程序中使用Azure Application Insights
让我们从Java应用程序中使用Application Insights。
对于应用程序开发者来说,监视应用程序的实际运行情况非常重要。因此,他们通常会准备各种处理异常和记录日志的方法。
这次要介绍的是 Application Insights,在不需要修改代码的情况下,可以获取应用程序的各种指标数据,是非常优秀的工具。它可以收集并存储日志,性能以及异常等记录。
公式文档的入口在下方。它现在被视为Azure Monitor的一个功能位置。
Azure Application Insights 是什么 – Azure Monitor | 微软文档
数据模型
首先,我认为理解在Application Insights中收集的数据模型可以帮助我们把握整体的情况。Application Insights收集的数据被抽象化处理,支持主要的编程语言(C#/Java/JavaScript/Python/Node.js)。
关于收集哪些数据,代表性的物品如下。
Azure Application Insights遥测的数据模型- Azure Monitor | 微软文档
举个例子,如果在Java应用程序中进行Application Insights的配置,这些信息就会被收集,并且会持续地发送给Azure上的Application Insights。在Azure门户上提供了各种可视化方式来查看这些信息,还可以使用查询语言来搜索数据。
Java的应用洞察
现在有两个版本,一个是2.6系列,另一个是3.0系列。
前者需要将库包含在应用程序中进行打包,因此需要对现有资产进行修改。虽然已经进行了维护,但不是最新的,建议使用3.0版本。如果想获取自定义指标,则在另一个机会中可能需要使用它。
目前最新版本是3.0系列。它使用Java代理程序来实现,可以在不修改现有资产的情况下对其进行与Application Insights的兼容。
使用方法很简单,只需将 -javaagent:path/to/applicationinsights-agent-3.0.3.jar 添加到 JVM 参数中。稍后会进行说明,配置密钥需要使用环境变量等方式。
我认为您可以从以下的Github上下载最新版本。目前,最新版本是3.0.3,适用于Java8及以上版本。
- https://github.com/microsoft/ApplicationInsights-Java/releases
另外,代理方式的文件如下所示。
Azure 监视器应用洞察 Java – Azure 监视器 | 微软文档
有什么被收集?
刚才的文件中也提到了,我适当地引用一下,它会对主要组件进行匹配,并自动收集它们的指标。
请求
JMS 消费者
Kafka 消费者
Netty/WebFlux
Servlets
Spring 计划任务
记录
java.util.logging
Log4j(包括MDC属性)
SLF4J/Logback(包括MDC属性)
依赖关系
Apache HttpClient 和 HttpAsyncClient
java.net.HttpURLConnection
JMS
Netty 客户端 / OkHttp
JDBC
试试看实际情况
如果不是一个相当不错的应用程序,数据也无法收集起来,所以我决定在Spring Pet Clicnc应用程序中尝试一下。请从以下位置克隆并设置环境。
Application Insights 可以在 Azure 门户上创建,并获取连接字符串包含仪表板密钥。Application Insights 不仅限于在 Azure 上运行的应用程序,还可以从本地和其他平台进行使用。由于遥测数据的传输是基于 HTTP 的,所以非常方便使用。
执行 “mvn spring-boot:run” 命令会启动应用程序,然后我们可以尝试在浏览器中访问。相同的界面将会显示出来。
完成后,进行以下设置。
设置pom.xml中Maven插件的JVM参数配置。
<configuration>
<jvmArguments>-javaagent:c:\yourpath\applicationinsights-agent-3.0.3.jar</jvmArguments>
</configuration>
然后将连接字符串设置为环境变量。
set APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=...
观察一下
让我们再次执行并操作网络。过一段时间后,您将能够在Azure 门户上查看已发送的遥测数据。让我们来看一些典型的数据。
直播指标
要确认是否正常运行,请打开实时指标。您可以实时查看应用程序的情况。尽管有时候可能不支持某些语言,但在Java 3.0系列中是支持的。
搜索
要确认记录了哪些内容,可以查看事务搜索。就像下面的图像一样,可以看到已记录了请求/依赖的遥测数据。
应用程序地图
xù dì tú)
自己的应用程序以及外部组件的依赖关系将以地图形式显示。以Spring宠物诊所为例,因为外部组件只有内部的数据库,所以显示的内容会受到限制。但如果依赖于存储设备、CosmosDb或外部API等,则当然会将它们映射成地图形式。
失败
在这里将记录异常。无法处理的异常或带有异常对象的日志会被记录在这里。在Spring宠物诊所中,有一个能够引发异常的页面,请尝试访问该页面。
在这个例子中,没有太多有意义的信息,但可以查看错误的顶级或者深入了解错误。
详细 – xì
当您进行下钻操作时,可以显示如下所示的详细信息页面。您可以以图表形式查看从哪个请求调用了哪个外部组件。这对于确定引起错误的请求以及异常源头非常有帮助,可以帮助您进行原因分析。
搜索日志
可以通过日志搜索来查看记录的原始数据。可以使用KQL(查询语言)按照每个遥测进行搜索,也可以将其可视化为图形。以下是获取请求的示例。
只是闲聊一下,如果搜索日志,可以确认发出了什么样的SQL语句。
您还可以查看虚拟机的统计信息。
总结
这次我试用了Azure Application Insights,对于应用程序开发人员来说,添加它不会有任何损失,所以务必进行设置。像WebApps/Functions等可以从门户中进行设置,几乎什么都不需要做(我认为已经是基于3.0的代理程序,但还未确认)。
可以免费使用一定量,建议尝试不同的功能。但需要有一定数据积累才会变得有趣。