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

适用于:

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

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

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

警告

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

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

适用于:

  • 仅与 AV 相关的性能问题

实时保护 (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 的排除项。

    注意

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

  5. 在 Linux 上配置Microsoft Defender for Endpoint,其中包含导致性能问题的进程或磁盘位置的排除项,并重新启用实时保护。

    有关详细信息,请参阅 并验证 Microsoft Defender for Endpoint 在Linux上的排除

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

适用于:

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

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

注意

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

若要运行客户端分析器来排查性能问题,请参阅 在 macOS 和 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的缺失事件或警报问题。

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

  • mdatp_audisp_plugin进程中的 CPU 资源消耗量较高

  • /var/log/audit/audit.log 变大或频繁轮换。

这些问题可能发生在具有许多事件淹没 AuditD 的服务器上。

注意

作为最佳做法,我们建议将 AuditD 日志配置为在达到最大文件大小限制时轮换。

这将防止 AuditD 日志累积到单个文件中,并且可以将轮换的日志文件移出以节省磁盘空间。

若要实现此目的,可以将 max_log_file_action 的值设置为在 auditd.conf 文件中轮换

如果 AuditD 有多个使用者,或者规则过多,并且Microsoft Defender for Endpoint和第三方使用者组合在一起,或者高工作负荷会生成大量事件,则可能会发生这种情况。

若要排查此类问题,请首先在受影响的示例服务器上 收集 MDEClientAnalyzer 日志

注意

作为一般的最佳做法,建议将 Microsoft Defender for Endpoint 代理更新为最新版本,并在进一步调查之前确认问题仍然存在。

存在可能影响 AuditD 子系统 CPU 压力的其他配置。

具体而言,在 auditd.conf 中, 可以将 disp_qos 的值设置为“有损”,以减少 CPU 使用率过高。

但是,这意味着某些事件可能会在 CPU 消耗高峰期间被删除。

XMDEClientAnalyzer

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

  • auditd_info.txt
  • auditd_log_analysis.txt

auditd_info.txt

包含常规 AuditD 配置,将显示:

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

  • enabled=2的 Auditctl -s 输出

    • 建议审核处于不可变模式, (需要重启才能使任何配置更改) 生效。
  • 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技术社区