排查 Linux 上Microsoft Defender for Endpoint的性能问题

希望体验 Defender for Endpoint? 注册免费试用版

本文档介绍如何使用可用的诊断工具缩小与 Linux 上的 Defender for Endpoint 相关的性能问题的范围,以便能够了解和缓解现有资源短缺以及使系统陷入此类情况的过程。 性能问题主要是由一个或多个硬件子系统中的瓶颈引起的,具体取决于系统上的资源利用率情况。 有时,应用程序对磁盘 I/O 资源很敏感,可能需要更多 CPU 容量,有时某些配置是不可持续的,并且可能会触发太多新进程,并打开过多的文件描述符。

根据正在运行的应用程序和设备特征,在 Linux 上运行 Defender for Endpoint 时,可能会遇到性能不佳的问题。 具体而言,在短时间内访问许多资源(如 CPU、磁盘和内存)的应用程序或系统进程可能会导致 Linux 上的 Defender for Endpoint 的性能问题。

警告

在开始之前, 请确保其他安全产品当前未在设备上运行。 多个安全产品可能会发生冲突并影响主机性能。

使用实时保护统计信息排查性能问题

适用于:

  • 仅与防病毒相关的性能问题

实时保护 (RTP) 是 Linux 上的 Defender for Endpoint 的一项功能,可持续监视和保护设备免受威胁。 它由文件和进程监视以及其他启发式方法组成。

以下步骤可用于排查和缓解这些问题:

  1. 使用以下方法之一禁用实时保护,并观察性能是否提高。 此方法有助于缩小 Linux 上的 Defender for Endpoint 是否导致了性能问题的范围。 如果设备不由组织管理,则可以从命令行禁用实时保护:

    mdatp config real-time-protection --value disabled
    
    Configuration property updated
    

    如果设备由组织管理,则管理员可以按照 在 Linux 上为 Defender for Endpoint 设置首选项中的说明禁用实时保护。

    注意

    如果在关闭实时保护时性能问题仍然存在,则问题的根源可能是终结点检测和响应 (EDR) 组件。 在这种情况下,请按照本文使用 Microsoft Defender for Endpoint 客户端分析器排查性能问题部分中的步骤进行操作。

  2. 若要查找触发最多扫描的应用程序,可以使用 Linux 上的 Defender for Endpoint 收集的实时统计信息。

    注意

    此功能在版本 100.90.70 或更高版本中可用。

    此功能默认在 和 InsiderFast 通道上Dogfood启用。 如果使用的是其他更新通道,可以从命令行启用此功能:

    mdatp config real-time-protection-statistics --value enabled
    

    此功能需要启用实时保护。 若要检查实时保护的状态,请运行以下命令:

    mdatp health --field real_time_protection_enabled
    

    验证条目 real_time_protection_enabled 是否为 true。 否则,请运行以下命令以启用它:

    mdatp config real-time-protection --value enabled
    
    Configuration property updated
    

    若要收集当前统计信息,请运行:

    mdatp diagnostic real-time-protection-statistics --output json
    

    注意

    使用 --output json (记下双短划线) 可确保输出格式已准备好进行分析。

    此命令的输出显示所有进程及其关联的扫描活动。

  3. 在 Linux 系统上,使用 命令下载示例 Python 分析程序 high_cpu_parser.py

    wget -c https://raw.githubusercontent.com/microsoft/mdatp-xplat/master/linux/diagnostic/high_cpu_parser.py
    

    此命令的输出应类似于以下内容:

    --2020-11-14 11:27:27-- https://raw.githubusercontent.com/microsoft.mdatp-xplat/master/linus/diagnostic/high_cpu_parser.py
    Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.xxx.xxx
    Connecting to raw.githubusercontent.com (raw.githubusercontent.com)| 151.101.xxx.xxx| :443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 1020 [text/plain]
    Saving to: 'high_cpu_parser.py'
    100%[===========================================>] 1,020    --.-K/s   in 0s
    
  4. 键入以下命令:

    mdatp diagnostic real-time-protection-statistics --output json | python high_cpu_parser.py
    

    上面的输出是性能问题的主要贡献者列表。 第一列是 PID) (进程标识符,第二列是进程名称,最后一列是扫描的文件数(按影响排序)。 例如,命令的输出如下所示:

    ... > mdatp diagnostic real-time-protection-statistics --output json | python high_cpu_parser.py | head
    27432 None 76703
    73467 actool    1249
    73914 xcodebuild 1081
    73873 bash 1050
    27475 None 836
    1    launchd     407
    73468 ibtool     344
    549  telemetryd_v1   325
    4764 None 228
    125  CrashPlanService 164
    

    若要提高 Linux 上 Defender for Endpoint 的性能,请在行下 Total files scanned 找到编号最高的一个,并为其添加排除项。 有关详细信息,请参阅 在 Linux 上配置和验证 Defender for Endpoint 的排除项。

    注意

    应用程序将统计信息存储在内存中,并且仅跟踪文件活动,因为它已启动并启用实时保护。 在实时保护关闭之前或期间启动的进程不计算在内。 此外,仅对触发扫描的事件进行计数。

使用 Microsoft Defender for Endpoint 客户端分析器排查性能问题

适用于:

  • 所有可用的 Defender for Endpoint 组件(如 AV 和 EDR)的性能问题

Microsoft Defender for Endpoint客户端分析器 (MDECA) 可以收集跟踪、日志和诊断信息,以便排查 Linux 上载入设备上的性能问题。

注意

  • Microsoft Defender for Endpoint客户端分析器工具由Microsoft客户支持服务 (CSS) 定期用于收集信息,例如 (但不限于) IP 地址、电脑名称等信息,可帮助排查Microsoft Defender for Endpoint可能遇到的问题。 有关隐私声明的详细信息,请参阅 Microsoft隐私声明
  • 作为一般最佳做法,建议将 Microsoft Defender for Endpoint 代理更新到最新可用版本,并在进一步调查之前确认问题仍然存在。

若要运行客户端分析器来排查性能问题,请参阅 在 macOS 和 Linux 上运行客户端分析器

配置全局排除项以提高性能

在 Linux 上配置Microsoft Defender for Endpoint,其中包含导致性能问题的进程或磁盘位置的排除项。 有关详细信息,请参阅 并验证 Microsoft Defender for Endpoint 在Linux上的排除。 如果仍然遇到性能问题,请联系支持人员以获取进一步的说明和缓解措施。

解决 AuditD 性能问题

背景:

  • Linux OS 分发版上的Microsoft Defender for Endpoint使用 AuditD 框架收集某些类型的遥测事件。

  • 添加到 /etc/audit/rules.d/ 的规则捕获的系统事件将添加到 audit.log () ,并可能影响主机审核和上游集合。

  • Microsoft Defender for Endpoint在 Linux 上添加的事件将使用密钥进行mdatp标记。

  • 如果 AuditD 服务配置错误或脱机,则可能缺少某些事件。 若要排查此类问题,请参阅:排查 Linux 上Microsoft Defender for Endpoint的缺失事件或警报问题。

在某些服务器工作负载中,可能会观察到两个问题:

  • High CPU 进程中 mdatp_audisp_plugin 的资源消耗。

  • /var/log/audit/audit.log 变大或频繁旋转。

这些问题可能发生在具有许多事件淹没 AuditD 的服务器上。 如果 AuditD 有多个使用者,或者规则过多,Microsoft Defender for Endpoint和第三方使用者的组合,或者高工作负荷生成大量事件,则可能会出现此类问题。 若要排查此类问题,请首先在受影响的示例服务器上 收集 MDEClientAnalyzer 日志

作为最佳做法,我们建议将 AuditD 日志配置为在达到最大文件大小限制时轮换。 此配置可防止 AuditD 日志累积到单个文件中,并且可以将轮换的日志文件移出以节省磁盘空间。 为此,可以在 auditd.conf 文件中将 的值max_log_file_actionrotate设置为 。

注意

作为一般的最佳做法,建议将 Microsoft Defender for Endpoint 代理更新为最新版本,并在进一步调查之前确认问题仍然存在。 存在可能影响 AuditD 子系统 CPU 压力的其他配置。 具体而言,在 auditd.conf 中,可将 的值 disp_qos 设置为 lossy ,以减少高 CPU 消耗。 但是,这意味着某些事件可能会在 CPU 消耗高峰期间被删除。

XMDEClientAnalyzer

使用 XMDEClientAnalyzer 时,以下文件将显示输出,提供见解来帮助解决问题。

  • auditd_info.txt
  • auditd_log_analysis.txt

auditd_info.txt

包含常规 AuditD 配置并显示以下信息:

  • 哪些进程注册为 AuditD 使用者。

  • Auditctl -senabled=2 审核 (建议的输出处于不可变模式 (需要重启才能使任何配置更改生效。)

  • Auditctl -l输出 (显示当前加载到内核中的规则,这些规则可能与 中/etc/auditd/rules.d/mdatp.rules磁盘上存在的规则不同。还显示哪些规则与 Microsoft Defender for Endpoint.)

auditd_log_analysis.txt

包含重要的聚合信息,在调查 AuditD 性能问题时非常有用。

  • 哪个组件拥有最多报告的事件 (Microsoft Defender for Endpoint 事件将使用) 进行标记key=mdatp

  • 排名靠前的报告发起方。

  • 最常见的系统调用 (网络或文件系统事件,而其他) 。

  • 哪些文件系统路径最吵人。

若要缓解大多数 AuditD 性能问题,可以实施 AuditD 排除。 如果给定的排除项不能提高性能,则可以使用速率限制器选项。 这将完全减少 AuditD 生成的事件数。

注意

应仅针对低威胁和高噪音发起程序或路径进行排除。 例如,不要排除 /bin/bash,这可能会造成较大的盲点。 定义排除项时要避免的常见错误

排除类型

XMDEClientAnalyzer 支持工具包含可用于添加 AuditD 排除配置规则的语法。

AuditD 排除 - 支持工具语法帮助:

可用于添加 AuditD 排除配置规则的语法

按发起程序

  • -e/ -exe 完整二进制路径 > 删除此发起程序的所有事件

按路径

  • -d / -dir 目录 > 的完整路径 删除面向此目录的文件系统事件

示例:

如果 /opt/app/bin/app 写入 , /opt/app/cfg/logs/1234.log则可以使用支持工具通过各种选项排除:

-e /opt/app/bin/app

-d /opt/app/cfg

-x /usr/bin/python /etc/usercfg

-d /usr/app/bin/

更多示例:

./mde_support_tool.sh exclude -p <process id>

./mde_support_tool.sh exclude -e <process name>

若要排除多个项 - 将排除项连接到一行:

./mde_support_tool.sh exclude -e <process name> -e <process name 2> -e <process name3>

-x 标志用于排除特定发起程序对子目录的访问,例如:

./mde_support_tool.sh exclude -x /usr/sbin/mv /tmp

当 mv 进程访问时,上述内容将排除对 /tmp 子文件夹的监视。

速率限制器

XMDEClientAnalyzer 支持工具包含的语法可用于限制 auditD 插件报告的事件数。 此选项将全局设置 AuditD 的速率限制,导致所有审核事件下降。

注意

应谨慎使用此功能,因为会限制整个已审核子系统报告的事件数。 这也可以减少其他订阅者的事件数。

ratelimit 选项可用于启用/禁用此速率限制。

使: ./mde_support_tool.sh ratelimit -e true

禁用: ./mde_support_tool.sh ratelimit -e false

启用速率限制后,AuditD 中将添加一个规则来处理 2500 个事件/秒。

注意

如果需要帮助分析和缓解与 AuditD 相关的性能问题,或者需要大规模部署 AuditD 排除项方面的帮助,请联系Microsoft支持人员。

另请参阅

提示

想要了解更多信息? Engage技术社区中的Microsoft安全社区:Microsoft Defender for Endpoint技术社区