从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)。

关于收集哪些数据,代表性的物品如下。

データ意味リクエストHTTPのリクエストを記録するトレースアプリケーションのログを記録する例外アプリケーションがスローした例外を記録するメトリックJavaの場合だと、JVMの情報が定期的に記録される依存関係アプリが依存する外部コンポーネントを記録する。JDBCとか

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” 命令会启动应用程序,然后我们可以尝试在浏览器中访问。相同的界面将会显示出来。

2021-05-02 10_18_21-PetClinic __ a Spring Framework demonstration - [InPrivate] - Microsoft​ Edge.png

完成后,进行以下设置。

设置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系列中是支持的。

2021-05-02 10_40_29-qiitaappinsights - Microsoft Azure および他 1 ページ - 職場 - Microsoft​ Edge.png

搜索

要确认记录了哪些内容,可以查看事务搜索。就像下面的图像一样,可以看到已记录了请求/依赖的遥测数据。

2021-05-02 10_42_21-qiitaappinsights - Microsoft Azure および他 1 ページ - 職場 - Microsoft​ Edge.png

应用程序地图

xù dì tú)

自己的应用程序以及外部组件的依赖关系将以地图形式显示。以Spring宠物诊所为例,因为外部组件只有内部的数据库,所以显示的内容会受到限制。但如果依赖于存储设备、CosmosDb或外部API等,则当然会将它们映射成地图形式。

2021-05-02 10_44_35-qiitaappinsights - Microsoft Azure および他 1 ページ - 職場 - Microsoft​ Edge.png

失败

在这里将记录异常。无法处理的异常或带有异常对象的日志会被记录在这里。在Spring宠物诊所中,有一个能够引发异常的页面,请尝试访问该页面。

在这个例子中,没有太多有意义的信息,但可以查看错误的顶级或者深入了解错误。

2021-05-02 10_49_06-qiitaappinsights - Microsoft Azure および他 1 ページ - 職場 - Microsoft​ Edge.png

详细 – xì

当您进行下钻操作时,可以显示如下所示的详细信息页面。您可以以图表形式查看从哪个请求调用了哪个外部组件。这对于确定引起错误的请求以及异常源头非常有帮助,可以帮助您进行原因分析。

2021-05-02 10_50_51-エンド ツー エンド トランザクションの詳細 - Microsoft Azure および他 1 ページ - 職場 - Microsoft​ Edge.png

搜索日志

可以通过日志搜索来查看记录的原始数据。可以使用KQL(查询语言)按照每个遥测进行搜索,也可以将其可视化为图形。以下是获取请求的示例。

2021-05-02 10_53_31-qiitaappinsights - Microsoft Azure および他 1 ページ - 職場 - Microsoft​ Edge.png

只是闲聊一下,如果搜索日志,可以确认发出了什么样的SQL语句。

2021-05-02 10_54_40-qiitaappinsights - Microsoft Azure および他 1 ページ - 職場 - Microsoft​ Edge.png

您还可以查看虚拟机的统计信息。

2021-05-02 10_55_31-qiitaappinsights - Microsoft Azure および他 1 ページ - 職場 - Microsoft​ Edge.png

总结

这次我试用了Azure Application Insights,对于应用程序开发人员来说,添加它不会有任何损失,所以务必进行设置。像WebApps/Functions等可以从门户中进行设置,几乎什么都不需要做(我认为已经是基于3.0的代理程序,但还未确认)。

可以免费使用一定量,建议尝试不同的功能。但需要有一定数据积累才会变得有趣。

广告
将在 10 秒后关闭
bannerAds