收集群集的诊断数据

适用于:Azure Stack HCI 版本 22H2 和 21H2;Windows Server 2022、Windows Server 2019、Windows Server 2016

使用存储空间直通中的各种诊断工具,可以收集所需的数据来排查 Azure Stack HCI 和 Windows Server 群集的问题。 本文重点介绍如何安装和使用 SDDC 诊断工具来收集相关信息,以帮助对群集进行诊断。

由于日志和其他信息非常密集,本文中提供的信息有助于排查已上报且可能需要将数据发送到 Microsoft 进行会审的高级问题。

通过 Windows Admin Center 安装和使用诊断工具

可以使用 Windows Admin Center(1812 和更高版本)来执行以下操作:

  • 安装 SDDC 诊断工具并使其保持最新
  • 计划每日诊断运行(这些运行对系统影响很小,通常在后台运行不超过五分钟,并且在群集上占用的空间不超过 500MB)
  • 查看事先收集的诊断信息(如果你需要将其提供给支持部门或自行进行分析)

若要安装 SDDC 诊断工具并开始收集数据,请执行以下步骤:

  1. 启动 Windows Admin Center 并选择“工具”>“诊断”。 如果尚未安装诊断工具,请单击“安装”按钮。

    单击“安装”以安装 SDDC 诊断工具。

  2. 若要开始收集诊断数据,请单击“收集”。 此时应会出现一条消息,指出“正在收集诊断信息。 这可能需要几分钟时间。”在初始数据收集后,如果想要每 24 小时自动收集一次数据,请将滑块更改为“开”"。

    单击“收集”以收集诊断数据。

  3. 只有在看到以下屏幕截图之后,数据收集才算完成。 若要查看收集的诊断信息,请选择“下载(.zip)”或“在文件工具中打开” 。

    若要查看诊断信息,可以下载 .zip 文件或在文件工具中打开。

使用 PowerShell 安装 Get-SDDCDiagnosticInfo

可以使用 Get-SDDCDiagnosticInfo PowerShell cmdlet(也称为 Get-PCStorageDiagnosticInfo,以前称为 Test-StorageHealth)收集日志,并对故障转移群集(群集、资源、网络、节点)、存储空间(物理磁盘、机箱、虚拟磁盘)、群集共享卷、SMB 文件共享和重复数据删除功能执行运行状况检查。

可通过两种方法安装该脚本:PowerShell 库和 GitHub。 下面概述了这两种方法。

PowerShell 库是 GitHub 存储库的快照。 请注意,从 PowerShell 库安装项需要最新版本的 PowerShellGet 模块,Windows 10、Windows Management Framework (WMF) 5.0 或基于 MSI 的安装程序(适用于 PowerShell 3 和 4)中提供了此模块。

在此过程中,我们还会安装最新版本的 Microsoft 网络诊断工具,因为 Get-SDDCDiagnosticInfo 依赖于此工具。 此清单模块包含由 Microsoft 核心网络产品小组维护的网络诊断和故障排除工具。

在 PowerShell 中以管理员身份运行以下命令可以安装该模块:

Install-PackageProvider NuGet -Force
Install-Module PrivateCloud.DiagnosticInfo -Force
Import-Module PrivateCloud.DiagnosticInfo -Force
Install-Module -Name MSFT.Network.Diag

若要更新该模块,请在 PowerShell 中运行以下命令:

Update-Module PrivateCloud.DiagnosticInfo

GitHub

GitHub 存储库是该模块的最新版本,因为我们在此存储库中不断地将程序更新换代。 若要从 GitHub 安装该模块,请从存档下载最新的模块,并将 PrivateCloud.DiagnosticInfo 目录提取到 $env:PSModulePath 指向的正确 PowerShell 模块路径

# Allowing Tls12 and Tls11 -- e.g. github now requires Tls12
# If this is not set, the Invoke-WebRequest fails with "The request was aborted: Could not create SSL/TLS secure channel."
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$module = 'PrivateCloud.DiagnosticInfo'
Invoke-WebRequest -Uri https://github.com/PowerShell/$module/archive/master.zip -OutFile $env:TEMP\master.zip
Expand-Archive -Path $env:TEMP\master.zip -DestinationPath $env:TEMP -Force
if (Test-Path $env:SystemRoot\System32\WindowsPowerShell\v1.0\Modules\$module) {
    rm -Recurse $env:SystemRoot\System32\WindowsPowerShell\v1.0\Modules\$module -ErrorAction Stop
    Remove-Module $module -ErrorAction SilentlyContinue
} else {
    Import-Module $module -ErrorAction SilentlyContinue
}
if (-not ($m = Get-Module $module -ErrorAction SilentlyContinue)) {
    $md = "$env:ProgramFiles\WindowsPowerShell\Modules"
} else {
    $md = (gi $m.ModuleBase -ErrorAction SilentlyContinue).PsParentPath
    Remove-Module $module -ErrorAction SilentlyContinue
    rm -Recurse $m.ModuleBase -ErrorAction Stop
}
cp -Recurse $env:TEMP\$module-master\$module $md -Force -ErrorAction Stop
rm -Recurse $env:TEMP\$module-master,$env:TEMP\master.zip
Import-Module $module -Force

如果需要在脱机群集上获取此模块,请下载 zip,将其移到目标服务器节点,然后安装该模块。

使用 PowerShell 收集日志

启用事件通道并完成安装过程后,可以使用模块中的 Get-SDDCDiagnosticInfo PowerShell cmdlet 来获取:

  • 存储运行状况报告,以及有关不正常组件的详细信息
  • 按池、卷和已删除重复数据的卷提供的存储容量报告
  • 来自所有群集节点的事件日志以及摘要错误报告

假设你的存储群集名为“CLUS01”。

若要针对远程存储群集执行收集操作,请运行以下命令:

Get-SDDCDiagnosticInfo -ClusterName CLUS01

若要在群集存储节点本地执行收集操作,请运行以下命令:

Get-SDDCDiagnosticInfo

若要将结果保存到指定文件夹,请运行以下命令:

Get-SDDCDiagnosticInfo -WriteToPath D:\Folder

以下示例是对真实群集执行此操作的大致命令形式:

New-Item -Name SDDCDiagTemp -Path d:\ -ItemType Directory -Force
Get-SddcDiagnosticInfo -ClusterName S2D-Cluster -WriteToPath d:\SDDCDiagTemp

可以看到,该脚本还会验证当前群集状态:

数据收集 PowerShell 屏幕截图。

正在将所有数据写入 SDDCDiagTemp 文件夹:

文件资源管理器屏幕截图中的数据。

该脚本完成后,它将在用户目录中创建一个 ZIP:

PowerShell 屏幕截图中的数据 zip。

让我们在文本文件中生成报告:

#find the latest diagnostic zip in UserProfile
    $DiagZip=(get-childitem $env:USERPROFILE | where Name -like HealthTest*.zip)
    $LatestDiagPath=($DiagZip | sort lastwritetime | select -First 1).FullName
#expand to temp directory
    New-Item -Name SDDCDiagTemp -Path d:\ -ItemType Directory -Force
    Expand-Archive -Path $LatestDiagPath -DestinationPath D:\SDDCDiagTemp -Force
#generate report and save to text file
    $report=Show-SddcDiagnosticReport -Path D:\SDDCDiagTemp
    $report | out-file d:\SDDCReport.txt

此处提供了示例报告示例 zip 的链接供参考。

Get-SDDCDiagnosticInfo 输出

下面是包含在 Get-SDDCDiagnosticInfo 的 zip 输出中的文件。

运行状况摘要报告

运行状况摘要报告保存为:

  • 0_CloudHealthSummary.log

此文件是在分析所有收集的数据后生成的,旨在提供系统的快速摘要。 该结构包含:

  • 系统信息
  • 存储运行状况概述(启动的节点数、联机资源数、联机群集共享卷数、不正常的组件数等)
  • 有关不正常组件(脱机、出现故障或联机但挂起的群集资源)的详细信息
  • 固件和驱动程序信息
  • 池、物理磁盘和卷详细信息
  • 存储性能(收集性能计数器)

该报告会持续更新,以包含更多有用信息。 有关最新信息,请参阅 GitHub README

日志和 XML 文件

该脚本运行各种日志收集脚本,并将输出保存为 XML 文件。 我们会收集群集和运行状况日志、系统信息 (MSInfo32)、未筛选的事件日志(故障转移群集、dis 诊断、Hyper-V、存储空间等)和存储诊断信息(操作日志)。 有关收集哪些信息的最新信息,请参阅 GitHub README(我们收集的内容)

如何通过 Get-SDDCDiagnosticInfo 使用 XML 文件

可以从 Get-SDDCDiagnosticInfo cmdlet 收集的数据中提供的 XML 文件使用数据。 这些文件包含有关虚拟磁盘、物理磁盘、基本群集信息和其他 PowerShell 相关输出的信息。

若要查看这些输出的结果,请打开 PowerShell 窗口并运行以下步骤。

ipmo storage
$d = import-clixml <filename>
$d

后续步骤

通过在此处提交问题,提供有关你想要查看的内容的反馈。 还可以通过提交拉取请求,对脚本做出有用的更改。