在 Windows 上排查 .NET Framework 跟踪问题

如果 IIS 托管的 .NET Framework 应用程序的跟踪功能未按预期工作,请先从常规故障排除步骤开始,然后再处理具体情况。

一般故障诊断

完成以下步骤:

  1. 验证先决条件:

    • 检查 .NET 的版本兼容性:请确保您的应用程序可在 .NET Framework 4.5.2 或更高版本上运行。
    • 请确认 Instana 代理正在运行:

      • 在 Windows 上打开“任务管理器”,查找 Instana 代理进程。
      • 在 Instana 用户界面中查看代理状态。
    • 验证 Instana PCP是否正在运行:

  2. 验证环境变量:如果跟踪功能无法正常工作,请检查环境变量是否为:

    • 设置正确。
    • 拼写正确。
    • 请根据应用程序的部署环境进行适当设置。
    • 有效、可被进程或应用程序访问且正确。
  3. 请检查 IL-Rewriter,以确认其是否已正确加载:

    1. 请检查应用程序日志中是否包含 IL-Rewriter 的初始化消息。 成功时的预期输出:

      *Initializing Instana IL-Rewriter for .NET Framework* 
      *Logging path is not set* 
      *Loading configuration-file /app/instana_tracing/instrumentation.json*
      注意: 路径可能因您的环境而异。
    2. 如果未显示 IL‑Rewriter 相关行,请确保所有必需 COR 的环境变量均已正确设置,且应用程序能够访问这些变量。

      • COR_ENABLE_PROFILING
      • COR_PROFILER
  4. 检查 Windows 事件查看器日志 :使用 Windows 事件查看器日志来排查错误:

    1. 打开“事件查看器”。
    2. Go 前往 Windows Logs > Application
    3. 查找与您的应用程序相关的错误或警告。
    4. 检查与 Instana 相关的事件。

    事件包含详细信息,包括时间戳和错误代码,这些信息有助于诊断问题。

针对具体情况的故障排除

如果常规故障排除无法解决您的问题,请参考以下故障排除方案:

情况 1:缺少轨迹或跨度

症状: 应用程序显示指标但无追踪记录,部分服务会报告数据,而其他服务则不会,或者在部署或更新后追踪功能停止工作。

故障诊断步骤:

  1. 请确认该应用程序的.NET 版本是否受支持:

    • .NET Framework 4.5.2 或更高版本
  2. 请确认代理 configuration.yaml 文件中已启用跟踪功能。
  3. 使用 Log Collector 或通过手动收集方式收集跟踪日志。
  4. 检查 Instana 的跟踪日志并分析结果:

    • 如果日志为空或未显示任何跟踪信息,则说明该应用程序未生成跨度。
    • 如果日志中存在跟踪记录但缺少某些信息(例如主机名),则问题出在.NET 的跟踪层上。
    • 如果日志中存在相关记录,且其中包含用户界面中缺失的信息,则说明问题发生在 Instana 后端或代理端。

情况 2:应用程序崩溃或无法启动

症状: 当 Instana 代理正在运行时,应用程序在启动时崩溃。

故障诊断步骤:

  1. 请确认该应用程序的.NET 版本是否受支持:

    • .NET Framework 4.5.2 或更高版本
  2. 使用 “日志收集器 ”或通过手动收集方式收集“事件查看器”日志。
  3. 请检查 Instana 事件查看器的日志

    • 确定日志中是否出现了错误或警告。 一个事件包含详细信息,包括时间戳和错误代码,这些信息有助于诊断问题。
    • InstanaPCP.exe如果出现提示错误的信息,则表示 InstanaPCP 已崩溃。 请查看之前的事件,并进一步调查该问题。
  4. 收集该应用程序的崩溃转储文件。

情况 3:代理无法检测到.NET 应用程序

症状:Instana 代理未对 .NET 应用程序进行监控,且该应用程序未显示在用户界面中。

故障诊断步骤:

  1. 请确认 Instana 代理程序是以管理员身份运行的。
  2. 请确认 Instana 代理具有访问该应用程序的权限。
  3. 请确认 Instana PCP 是否正在运行:

    • InstanaPCP在 Windows 上打开任务管理器,然后搜索。
  4. 使用 Log Collector手动收集方式收集 Instana 代理日志。

    • Instana 代理日志中,必须包含以下行:

      com.instana.agent-process-handling - <version> |  | InstanaPCP.exe passed early window; marked RUNNING
  5. 请在代理日志中确认传感器已成功激活:

    com.instana.sensor-clr - <version> |  | Activated Sensor
  6. 请确保在启动 Instana 代理后,再启动.NET 进程。

场景 4:启用跟踪后, InstanaPCP 或应用程序的 CPU 占用率过高

症状: 启用跟踪功能后, InstanaPCP 或 .NET 应用程序的 CPU 使用率异常升高。

故障诊断步骤:

  1. 请通过查看“任务管理器”来确定该问题是与应用程序相关,还是与 InstanaPCP 相关。
  2. 如果问题出在 InstanaPCP:

    • 为 InstanaPCP 启用调试日志。 请参阅 “收集日志”
    • 检查日志中是否存在关于缺少性能计数器或异常的重复消息。
  3. 如果问题是应用程序内存突增:

    • 使用 “日志收集器 ”或手动收集日志 ,以收集事件日志和.NET 日志。
    • 检查事件日志和.NET 日志中是否存在与内存相关的异常。
    • 请确认该问题是否由 Instana 的监控功能引起。
    • 请收集一个.NET 转储文件,以便进一步分析。

收集日志

Instana 提供了两种收集日志的方法:

使用日志收集器收集日志

Log Collector 是一款用于从 Instana 收集日志的独立应用程序。 您可以在以下位置触发日志收集器:

日志收集器会收集以下日志:

  • 应用程序跟踪日志
  • Instana PCP日志
  • CLR 调试日志
  • 事件查看器日志
  • Instana 代理调试日志
  • Instana 代理记录日志

从 Instana 用户界面运行日志收集器

重要提示:.NET Core 传感器( 1.0.89 或更高版本)不支持通过 Instana 用户界面运行 Log Collector 工具。 如果您使用的是这些版本,请从控制台手动运行日志收集器来收集日志。
  1. 在导航菜单中,选择 “分析 ”> “基础设施 ”,或在 Instana 用户界面的 “更多 ”菜单中搜索该代理。
  2. 单击要监控的“.NET ”进程。
  3. 在“.NET ”进程仪表盘上,单击 “设置 .NET 调试环境 ”。

    此步骤将在主机上启动 Log Collector 应用程序,并为 .NET 日志收集设置所需的环境变量。

  4. 请重新启动您的.NET Framework 应用程序,以确保已加载更新后的环境变量。
    注意: 若要将 InstanaPCP 日志纳入收集范围,请同时重启 Instana 代理。
  5. 拨打一些电话或向应用程序发送请求以生成日志。
  6. 点击下载.NET 日志

    注意: 只有在调试环境成功设置后 ,“下载.NET 日志 ”按钮才会显示。

日志收集器会从多个来源收集日志,包括应用程序跟踪日志(如果 [agent-dir]\etc\instana\com.instana.agent.main.sender.File.cfg 已进行配置)、 InstanaPCP 日志(如果代理已重启)、CLR调试日志、事件查看器日志以及 Instana 代理日志。 收集到的日志会被压缩成一个 .zip 文件,并下载到您的系统中。

从控制台运行日志收集器

如果用户界面出现故障,您可以通过控制台触发日志收集器:

  1. Go 到 Instana 代理程序文件夹中的日志收集器路径。 请使用最新版本:

    C:\instana-agent\data\repo\com\instana\dotnet-logcollector-win-x64\<latest_version>\dotnet-logcollector-win-x64-<version>
  2. 运行以下命令以准备日志收集:

    logcollector.exe -m prepare -i "C:\Program Files\Instana\instana-agent"
  3. 重新启动应用程序,并向该应用程序发起请求。
  4. 过一会儿,运行 collect 命令:

    logcollector.exe -m collect -i "C:\Program Files\Instana\instana-agent" -o "C:\output\log.zip"
    注意: 请确保以管理员身份运行这些命令。

手动收集日志

或者,您可以手动收集日志。 完成以下步骤:

  1. 启用调试日志:

    1. 请使用以下选项之一添加环境变量:

      注意: 请确保路径有效、进程或应用程序能够访问,且路径正确。
      • 请在系统级别手动设置以下环境变量:

        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
    2. 请配置以下注册表项: Windows :

      CLRDebugLog: "C:\dc_clr_debug_log\clr_"
    3. 请重新启动应用程序。
  2. 收集 Instana 代理日志:

    1. 停止代理 <instana_install_dir>/bin/stop.sh 程序;或者,如果代理程序是以服务形式启动的,则停止该服务。
    2. 清除日志:运行以下命令,删除日志目录中的所有文件,以便重新开始:

      rm -rf <instana_install_dir>/data/log/*
    3. 将日志级别设置为“调试”:在代理 configuration.yaml 程序文件中更改日志级别的严重性。 如需了解更多信息,请参阅 “设置代理配置文件”
    4. 启动代理 <instana_install_dir>/bin/start.sh 程序 或 启动服务。
    5. 重现问题:让问题自然发生,并让代理程序运行约15分钟。
    6. 收集日志:运行以下命令,将日志目录压缩以便提交:

      cd <instana_install_dir>/data/logs
      zip -r instana_agent_debug_logs.zip *

      PowerShell:

      Compress-Archive * instana_agent_debug_logs.zip
  3. 收集 Instana 的跟踪日志:

    1. com.instana.agent.main.sender.File.cfgGo 转到 [agent-dir]\etc\instana 并打开该文件。
    2. 在文件中添加以下几行:

      prefix=instanaTraces
      type=traces

      此配置将生成一个日志文件,其中 [agent-dir]/data/log 包含所有带有 "instanaTraces" 前缀的跟踪记录。

    3. 重新启动 instana 代理程序。
    4. 重新启动应用程序,并运行约15分钟。
    5. 从以下路径收集日志:

      • 由该变量指定的路径 INSTANA_NET_LOG_PATH
      • instana-agent-installation-folder/data/log
  4. 收集 CLR 调试日志:

    1. 打开注册表编辑器。
    2. 转至 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Instana\
    3. C:\temp\clr_将该注册表键 CLRDebugLog 作为字符串(带值)添加,例如:
    4. 或者,以管理员身份打开命令提示符,并运行以下命令:

      reg add "HKLM\SOFTWARE\Instana" /v CLRDebugLog /t REG_SZ /d "C:\temp\clr_" /f
  5. 收集 Windows 事件查看器日志:

    1. 打开“事件查看器”:

      1. 按下 Win + R
      2. 输入 eventvwr.msc.
      3. 按下 Enter 键。
    2. Go 在您要导出的日志中:

      • Windows 日志: Windows 日志 > 应用程序
      • 应用程序和服务日志
    3. “操作” 面板中,选择 “将所有事件另存为 ”。
    4. 选择一个位置并保存为 .evtx.

开具支持凭单

如果完成这些故障排除步骤后问题仍然存在,请在提交支持工单之前收集 MustGather 的数据。 MustGather 这些数据有助于 IBM 支持团队更高效地诊断您的问题。

如需了解更多信息,请访问: MustGather: Instana .NET Tracer - Windows