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

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

警告

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

可在 Application Insights Java 3.x 中找到最新版本的文档。

Java 中的 Azure 应用程序 Insights 有疑问或问题? 下面是一些提示。

生成错误

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

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

无数据

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

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

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

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

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

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

  • 通过在 ApplicationInsights.xml文件的根节点下添加 <SDKLogger> 元素来启用日志记录, (项目) 中的 resources 文件夹中。 然后检查任何可疑日志的开头条目AI: INFO/WARN/ERROR

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

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

  • 查看 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 Cache for Redis 依赖项集合。

无使用情况数据

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

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

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

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

禁用遥测

如何禁用遥测收集?

请遵循以下解决方案之一:

  • 在代码中禁用集合:

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

    <DisableTelemetry>true</DisableTelemetry>
    

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

更改目标

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

  • 获取新资源的检测密钥

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

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

  • 否则,请在项目的 resources 文件夹中更新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 初学者

若要使用 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.httpApplication 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 反馈社区提交产品反馈。