排查 Java Web 项目中Azure 应用程序见解的问题
本文提供针对 Application Insights Java 2.x 的 Q&A 格式常见问题的故障排除解决方案。
使用 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 反馈社区。