排查 Java Web 项目中Azure 应用程序见解的问题

本文提供针对 Application Insights Java 2.x 的 Q&A 格式常见问题的故障排除解决方案。

注意

本文档适用于不再推荐使用的 Application Insights Java 2.x。

有关最新版本的文档,可参阅 Application Insights Java 3.x

使用 Java 中的 Azure Application Insights 时有疑问或遇到问题? 请参考下面的提示。

生成错误

在 Eclipse 或 Intellij Idea 中,通过 Maven 或 Gradle 添加 Application Insights SDK 时,会收到生成或校验和验证错误

如果依赖 <版本> 元素使用的是包含通配符的模式(例如 <version>[2.0,)</version> ,在 Maven 或 version:'2.+' Gradle 中),请尝试改为指定特定版本,例如 2.6.4

无数据

我成功添加了 Application Insights 并运行了应用,但我从未在门户中看到过数据

  • 等待大约一分钟,然后选择“ 刷新”。 图表会定期自行刷新,但你也可以手动刷新。 刷新间隔取决于图表的时间范围。

  • 请确保已在ApplicationInsights.xml文件(项目的资源文件夹中)中定义检测密钥,或将其配置为环境变量。

  • 验证 XML 文件中是否有 <DisableTelemetry>true</DisableTelemetry> 节点。

  • 如有必要,请在防火墙中打开 TCP 端口 80 和 443,以便传出流量。dc.services.visualstudio.com 请参阅防火墙例外的完整列表。

  • 在 Microsoft Azure 开始面板中查看服务状态映射。 如果有一些警报指示,请等待它们返回到 “确定”,然后关闭并重新打开 Application Insights 应用程序边栏选项卡。

  • 通过在ApplicationInsights.xml文件的根节点下添加 <SDKLogger> 元素(在项目中的资源文件夹中),启用日志记录 然后检查前面包含是否有任何可疑日志的 AI: INFO/WARN/ERROR 条目。

  • 确保 Java SDK 已成功加载正确的 ApplicationInsights.xml 文件。 检查控制台的输出消息中是否有“已成功找到配置文件”语句。

  • 如果未找到配置文件,请检查输出消息以查看配置文件的搜索位置。 确保 ApplicationInsights.xml 位于其中一个搜索位置。 根据经验法则,可以将配置文件放置在 Application Insights SDK JAR 的附近。 例如,在 Tomcat 中,文件夹为 WEB-INF/classes。 在开发过程中,可以将ApplicationInsights.xml放置在 Web 项目的资源文件夹中。

  • 查看 GitHub 问题页 ,了解 SDK 的已知问题。

  • 请务必使用相同版本的 Application Insights 核心、Web、代理和日志记录追加程序,以避免任何版本冲突问题。

注意

本文最近更新为使用术语 Azure Monitor 日志 而不是 Log Analytics。 日志数据仍存储在 Log Analytics 工作区中,并且仍由同一 Log Analytics 服务收集和分析。 我们正在更新术语,以更好地反映 Azure Monitor 中的日志角色。 有关详细信息,请参阅 Azure Monitor 术语更改

我曾经看到过数据,但它已停止

  • 是否达到了数据点的每月配额? 打开“设置>配额”和“定价”以了解。如果是这样,可以升级计划,或支付更多容量的费用。 有关详细信息,请参阅 定价方案

  • 最近是否升级了 SDK? 确保项目目录中仅存在唯一 SDK jar。 不应存在两个不同的 SDK 版本。

  • 是否正在查看正确的 AI 资源? 请务必将应用程序的 iKey 与预期遥测的资源匹配。 它们应相同。

未按预期看到所有数据

  • 打开“使用情况”和“估计成本”页,并检查采样是否正在运行。 (如果传输百分比为 100%,表示当前未执行采样。)可将 Application Insights 服务设置为只接受来自应用的一部分遥测数据。 此设置可帮助你保持每月遥测配额。

  • 是否已启用 SDK 采样? 如果是,将按为所有适用类型指定的速率对数据进行采样。

  • 是否正在运行较旧版本的 Java SDK? 从版本 2.0.1 开始,我们引入了容错机制来处理间歇性网络和后端故障,以及本地驱动器上的数据持久性。

  • 检查是否过度遥测导致了限制。 如果启用 INFO 日志记录,则会看到“应用受到限制”日志消息。 我们的当前限制是每秒大约 32,000 个遥测项。

Java 代理无法捕获依赖项数据

  • 是否已 配置 Java 代理

  • 确保 Java 代理 jar 文件和 AI-Agent.xml 文件都放置在同一文件夹中。

  • 确保自动收集支持尝试自动收集的依赖项。 目前,我们仅支持 MySQL、Microsoft SQL Server、Oracle DB 和 Azure Redis 缓存依赖项集合。

无使用情况数据

我看到有关请求和响应时间的数据,但没有页面视图、浏览器或用户数据

已成功将应用设置为从服务器发送遥测数据。 现在,下一步是将网页设置为从 Web 浏览器发送遥测数据

或者,如果客户端是手机或其他设备中的应用,可以从该处发送遥测数据。

使用相同的检测密钥来设置客户端和服务器遥测。 数据将显示在同一 Application Insights 资源中,你将能够关联来自客户端和服务器的事件。

禁用遥测

如何禁用遥测数据收集?

遵循以下解决方案之一:

  • 在代码中禁用收集:

    TelemetryConfiguration config = TelemetryConfiguration.getActive();
    config.setTrackingIsDisabled(true);
    
  • 更新 ApplicationInsights.xml (在项目的资源文件夹中)。 在根节点下添加以下 XML 元素:

    <DisableTelemetry>true</DisableTelemetry>
    

    如果使用 XML 方法,则必须在更改值时重启应用程序。

更改目标

如何更改项目要将数据发送到的 Azure 资源?

  • 获取新资源的检测密钥。

  • 如果使用用于 Eclipse 的 Azure 工具包将 Application Insights 添加到项目,请右键单击 Web 项目,选择“Azure>配置 Application Insights”,然后更改密钥。

  • 如果已将检测密钥配置为环境变量,请确保使用新的 iKey 更新环境变量的值。

  • 否则,请在项目的资源文件夹中更新ApplicationInsights.xml中的密钥

通过 SDK 调试数据

如何知道 SDK 正在执行什么操作?

若要获取有关 API 中发生的情况的详细信息,请在ApplicationInsights.xml配置文件的根节点中添加 <SDKLogger> 元素。

ApplicationInsights.xml

<SDKLogger> 元素中,还可以指示记录器输出到文件:

<SDKLogger type="FILE"><!-- or "CONSOLE" to print to stderr -->
    <Level>TRACE</Level>
    <UniquePrefix>AI</UniquePrefix>
    <BaseFolderPath>C:/agent/AISDK</BaseFolderPath>
</SDKLogger>

Spring Boot Starter

若要使用 Application Insights Spring Boot 初学者启用使用 Spring Boot 应用的 SDK 日志记录,请将以下行添加到 application.properties 文件:

azure.application-insights.logger.type=file
azure.application-insights.logger.base-folder-path=C:/agent/AISDK
azure.application-insights.logger.level=trace

或者,可以打印到标准错误流:

azure.application-insights.logger.type=console
azure.application-insights.logger.level=trace

Java 代理

若要启用 JVM 代理日志记录, 请更新AI-Agent.xml文件

<AgentLogger type="FILE"><!-- or "CONSOLE" to print to stderr -->
    <Level>TRACE</Level>
    <UniquePrefix>AI</UniquePrefix>
    <BaseFolderPath>C:/agent/AIAGENT</BaseFolderPath>
</AgentLogger>

Java 命令行属性

自版本 2.4.0

若要使用命令行选项而不是更改配置文件来启用日志记录,请运行以下命令:

java -Dapplicationinsights.logger.file.level=trace \
    -Dapplicationinsights.logger.file.uniquePrefix=AI \
    -Dapplicationinsights.logger.baseFolderPath="C:/my/log/dir" \
    -jar MyApp.jar

或者,运行以下命令以打印到标准错误流:

java -Dapplicationinsights.logger.console.level=trace -jar MyApp.jar

Azure 开始屏幕

我正在查看 Azure 门户。 地图是否告知有关应用的信息?

不会,它只显示世界各地的 Azure 服务器的运行状况。

如何实现从 Azure 启动板(主屏幕)查找有关应用的数据?

假设为 Application Insights 设置应用,请选择“浏览>Application Insights”,然后选择为应用创建的应用资源。 若要在将来更快地实现该应用,请将应用固定到启动板。

Intranet 服务器

是否可以在 Intranet 上监视服务器?

可以,前提是该服务器可以通过公共 Internet 将遥测数据发送到 Application Insights 门户。

你可能需要在服务器的防火墙中打开某些传出端口,以允许 SDK 向门户发送数据。

数据保留

数据在门户中保留多长时间? 是否安全?

请参阅数据保留和隐私

调试日志记录

Application Insights 使用 org.apache.http。 此命名空间在命名空间 com.microsoft.applicationinsights.core.dependencies.http下的 Application Insights 核心 jar 中重新定位。 此重定位使 Application Insights 能够处理相同 org.apache.http 版本存在于一个代码库中的方案。

注意

如果为应用中的所有命名空间启用 DEBUG级别日志记录,则所有正在执行的模块(包括 org.apache.http 重命名为) com.microsoft.applicationinsights.core.dependencies.http都将遵循该日志记录。 Application Insights 无法为这些调用应用筛选,因为日志调用是由 Apache 库进行的。 DEBUG-level 日志记录会生成大量日志数据,不建议用于实时生产实例。

后续步骤

我为 Java 服务器应用设置了 Application Insights。 我还能执行什么操作?

获取帮助

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区