在 Windows 上排查 .NET Framework 跟踪问题
如果 IIS 托管的 .NET Framework 应用程序的跟踪功能未按预期工作,请先从常规故障排除步骤开始,然后再处理具体情况。
一般故障诊断
完成以下步骤:
验证先决条件:
- 检查 .NET 的版本兼容性:请确保您的应用程序可在 .NET Framework 4.5.2 或更高版本上运行。
请确认 Instana 代理正在运行:
- 在 Windows 上打开“任务管理器”,查找 Instana 代理进程。
- 在 Instana 用户界面中查看代理状态。
验证 Instana PCP是否正在运行:
InstanaPCP.exe打开“任务管理器”,然后搜索.- 如果未运行, 请重启 Instana 代理。
验证环境变量:如果跟踪功能无法正常工作,请检查环境变量是否为:
- 设置正确。
- 拼写正确。
- 请根据应用程序的部署环境进行适当设置。
- 有效、可被进程或应用程序访问且正确。
请检查 IL-Rewriter,以确认其是否已正确加载:
请检查应用程序日志中是否包含 IL-Rewriter 的初始化消息。 成功时的预期输出:
*Initializing Instana IL-Rewriter for .NET Framework* *Logging path is not set* *Loading configuration-file /app/instana_tracing/instrumentation.json*注意: 路径可能因您的环境而异。如果未显示 IL‑Rewriter 相关行,请确保所有必需
COR的环境变量均已正确设置,且应用程序能够访问这些变量。- COR_ENABLE_PROFILING
- COR_PROFILER
检查 Windows 事件查看器日志 :使用 Windows 事件查看器日志来排查错误:
- 打开“事件查看器”。
- Go 前往 Windows Logs > Application。
- 查找与您的应用程序相关的错误或警告。
- 检查与 Instana 相关的事件。
事件包含详细信息,包括时间戳和错误代码,这些信息有助于诊断问题。
针对具体情况的故障排除
如果常规故障排除无法解决您的问题,请参考以下故障排除方案:
情况 1:缺少轨迹或跨度
症状: 应用程序显示指标但无追踪记录,部分服务会报告数据,而其他服务则不会,或者在部署或更新后追踪功能停止工作。
故障诊断步骤:
请确认该应用程序的.NET 版本是否受支持:
- .NET Framework 4.5.2 或更高版本
- 请确认代理
configuration.yaml文件中已启用跟踪功能。 - 使用 Log Collector 或通过手动收集方式收集跟踪日志。
检查 Instana 的跟踪日志并分析结果:
- 如果日志为空或未显示任何跟踪信息,则说明该应用程序未生成跨度。
- 如果日志中存在跟踪记录但缺少某些信息(例如主机名),则问题出在.NET 的跟踪层上。
- 如果日志中存在相关记录,且其中包含用户界面中缺失的信息,则说明问题发生在 Instana 后端或代理端。
情况 2:应用程序崩溃或无法启动
症状: 当 Instana 代理正在运行时,应用程序在启动时崩溃。
故障诊断步骤:
请确认该应用程序的.NET 版本是否受支持:
- .NET Framework 4.5.2 或更高版本
- 使用 “日志收集器 ”或通过手动收集方式收集“事件查看器”日志。
请检查 Instana 事件查看器的日志 :
- 确定日志中是否出现了错误或警告。 一个事件包含详细信息,包括时间戳和错误代码,这些信息有助于诊断问题。
InstanaPCP.exe如果出现提示错误的信息,则表示 InstanaPCP 已崩溃。 请查看之前的事件,并进一步调查该问题。
- 收集该应用程序的崩溃转储文件。
情况 3:代理无法检测到.NET 应用程序
症状:Instana 代理未对 .NET 应用程序进行监控,且该应用程序未显示在用户界面中。
故障诊断步骤:
- 请确认 Instana 代理程序是以管理员身份运行的。
- 请确认 Instana 代理具有访问该应用程序的权限。
请确认 Instana PCP 是否正在运行:
InstanaPCP在 Windows 上打开任务管理器,然后搜索。
使用 Log Collector 或手动收集方式收集 Instana 代理日志。
在 Instana 代理日志中,必须包含以下行:
com.instana.agent-process-handling - <version> | | InstanaPCP.exe passed early window; marked RUNNING
请在代理日志中确认传感器已成功激活:
com.instana.sensor-clr - <version> | | Activated Sensor- 请确保在启动 Instana 代理后,再启动.NET 进程。
场景 4:启用跟踪后, InstanaPCP 或应用程序的 CPU 占用率过高
症状: 启用跟踪功能后, InstanaPCP 或 .NET 应用程序的 CPU 使用率异常升高。
故障诊断步骤:
收集日志
使用日志收集器收集日志
Log Collector 是一款用于从 Instana 收集日志的独立应用程序。 您可以在以下位置触发日志收集器:
日志收集器会收集以下日志:
- 应用程序跟踪日志
- Instana PCP日志
- CLR 调试日志
- 事件查看器日志
- Instana 代理调试日志
- Instana 代理记录日志
从 Instana 用户界面运行日志收集器
- 在导航菜单中,选择 “分析 ”> “基础设施 ”,或在 Instana 用户界面的 “更多 ”菜单中搜索该代理。
- 单击要监控的“.NET ”进程。
在“.NET ”进程仪表盘上,单击 “设置 .NET 调试环境 ”。
此步骤将在主机上启动 Log Collector 应用程序,并为 .NET 日志收集设置所需的环境变量。
- 请重新启动您的.NET Framework 应用程序,以确保已加载更新后的环境变量。注意: 若要将 InstanaPCP 日志纳入收集范围,请同时重启 Instana 代理。
- 拨打一些电话或向应用程序发送请求以生成日志。
点击下载.NET 日志。
注意: 只有在调试环境成功设置后 ,“下载.NET 日志 ”按钮才会显示。
日志收集器会从多个来源收集日志,包括应用程序跟踪日志(如果 [agent-dir]\etc\instana\com.instana.agent.main.sender.File.cfg 已进行配置)、 InstanaPCP 日志(如果代理已重启)、CLR调试日志、事件查看器日志以及 Instana 代理日志。 收集到的日志会被压缩成一个 .zip 文件,并下载到您的系统中。
从控制台运行日志收集器
如果用户界面出现故障,您可以通过控制台触发日志收集器:
Go 到 Instana 代理程序文件夹中的日志收集器路径。 请使用最新版本:
C:\instana-agent\data\repo\com\instana\dotnet-logcollector-win-x64\<latest_version>\dotnet-logcollector-win-x64-<version>运行以下命令以准备日志收集:
logcollector.exe -m prepare -i "C:\Program Files\Instana\instana-agent"- 重新启动应用程序,并向该应用程序发起请求。
过一会儿,运行 collect 命令:
logcollector.exe -m collect -i "C:\Program Files\Instana\instana-agent" -o "C:\output\log.zip"注意: 请确保以管理员身份运行这些命令。
手动收集日志
或者,您可以手动收集日志。 完成以下步骤:
启用调试日志:
请使用以下选项之一添加环境变量:
注意: 请确保路径有效、进程或应用程序能够访问,且路径正确。请在系统级别手动设置以下环境变量:
INSTANA_NET_LOG_PATH: "C:\dc_net_log" INSTANA_NET_LOG_LEVEL: DEBUG INSTANA_NET_FF_LOG_LEVEL: DEBUG INSTANA_NET_PCP_LOG_LEVEL: DEBUG INSTANA_TRACER_ENTEREXIT_LOGGING: 1 INSTANA_EXTENDED_DEBUG: 1以管理员身份打开命令提示符,并运行以下命令以添加环境变量:
setx INSTANA_NET_LOG_PATH "C:\dc_net_log" /M setx INSTANA_NET_LOG_LEVEL "DEBUG" /M setx INSTANA_NET_FF_LOG_LEVEL "DEBUG" /M setx INSTANA_NET_PCP_LOG_LEVEL "DEBUG" /M setx INSTANA_TRACER_ENTEREXIT_LOGGING "1" /M setx INSTANA_EXTENDED_DEBUG "1" /M
请配置以下注册表项: Windows :
CLRDebugLog: "C:\dc_clr_debug_log\clr_"- 请重新启动应用程序。
收集 Instana 代理日志:
- 停止代理
<instana_install_dir>/bin/stop.sh程序;或者,如果代理程序是以服务形式启动的,则停止该服务。 清除日志:运行以下命令,删除日志目录中的所有文件,以便重新开始:
rm -rf <instana_install_dir>/data/log/*- 将日志级别设置为“调试”:在代理
configuration.yaml程序文件中更改日志级别的严重性。 如需了解更多信息,请参阅 “设置代理配置文件”。 - 启动代理
<instana_install_dir>/bin/start.sh程序 或 启动服务。 - 重现问题:让问题自然发生,并让代理程序运行约15分钟。
收集日志:运行以下命令,将日志目录压缩以便提交:
cd <instana_install_dir>/data/logs zip -r instana_agent_debug_logs.zip *PowerShell:
Compress-Archive * instana_agent_debug_logs.zip
- 停止代理
收集 Instana 的跟踪日志:
com.instana.agent.main.sender.File.cfgGo 转到[agent-dir]\etc\instana并打开该文件。在文件中添加以下几行:
prefix=instanaTraces type=traces此配置将生成一个日志文件,其中
[agent-dir]/data/log包含所有带有 "instanaTraces" 前缀的跟踪记录。- 重新启动 instana 代理程序。
- 重新启动应用程序,并运行约15分钟。
从以下路径收集日志:
- 由该变量指定的路径
INSTANA_NET_LOG_PATH instana-agent-installation-folder/data/log
- 由该变量指定的路径
收集 CLR 调试日志:
- 打开注册表编辑器。
- 转至
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Instana\ C:\temp\clr_将该注册表键CLRDebugLog作为字符串(带值)添加,例如:或者,以管理员身份打开命令提示符,并运行以下命令:
reg add "HKLM\SOFTWARE\Instana" /v CLRDebugLog /t REG_SZ /d "C:\temp\clr_" /f
收集 Windows 事件查看器日志:
打开“事件查看器”:
- 按下 Win + R。
- 输入
eventvwr.msc. - 按下 Enter 键。
Go 在您要导出的日志中:
- Windows 日志: Windows 日志 > 应用程序
- 应用程序和服务日志
- 在 “操作” 面板中,选择 “将所有事件另存为 ”。
- 选择一个位置并保存为
.evtx.
开具支持凭单
如果完成这些故障排除步骤后问题仍然存在,请在提交支持工单之前收集 MustGather 的数据。 MustGather 这些数据有助于 IBM 支持团队更高效地诊断您的问题。
如需了解更多信息,请访问: MustGather: Instana .NET Tracer - Windows。