在 Windows Server 2019 中,存储空间直通记录并存储虚拟机、服务器、驱动器、卷、网络适配器等的大量性能历史记录。 在 PowerShell 中可以轻松查询和处理性能历史记录,因此你可以快速从原始数据中得到如下所述问题的实际答案:
- 上周是否出现了任何 CPU 高峰?
- 是否有任何物理磁盘出现异常的延迟?
- 哪些 VM 目前消耗的存储 IOPS 最多?
- 我的网络带宽是否饱和?
- 此卷何时会耗尽可用空间?
- 在过去一个月,哪些 VM 使用的内存最多?
cmdlet 旨在用于编写脚本。 它通过管道接受来自 或 等 cmdlet 的输入以处理关联,你可以将其输出传送到 、 和 等实用工具 cmdlet,以快速编写强大的查询。
本主题将提供并解释 6 个示例脚本来回答上述 6 个问题。 这些脚本提供了一些模式,你可以应用这些模式以基于各种数据和时间范围查找峰值、查找平均值、绘制趋势线、运行离群值检测,等等。 它们作为免费的入门代码提供,允许你复制、扩充和重用。
此示例使用 时间范围内的 系列来显示群集中每台服务器的最大(“高水位线”)、最小和平均 CPU 使用率。 它还执行简单的四分位数分析,以显示过去 8 天内 CPU 使用率超过 25%、50% 和 75% 的小时数。
在以下屏幕截图中,我们看到 Server-02 在上周出现了无法解释的高峰:
的输出可以顺利地传送到内置的 cmdlet,我们只需指定 属性即可。 指定 、 和 标志后, 毫不费力地为我们提供了前三列。 若要执行四分位数分析,我们可以将参数传送给 并统计 (大于)25、50 或 75 的值有多少个。 最后一步是使用 和 帮助器函数进行美化 – 当然这是可选操作。
脚本如下:
此示例使用 时间范围内的 系列来查找统计离群值,这些离群值定义为每小时平均延迟比群体平均值高于 3σ(三个标准偏差)以上的驱动器。
在以下屏幕截图中,我们没有看到离群值:
首先,我们通过检查 是否持续为 来排除空闲或接近空闲的驱动器。 对于每个处于活动状态的 HDD,我们将其 时间范围(由 10 秒间隔的 360 个测量值组成)通过传送给 ,以获得其在过去一小时的平均延迟。 这就建立了我们的群体。
我们使用广为人知的公式来查找群体的平均值 和标准偏差 。 对于每个处于活动状态的 HDD,我们将其平均延迟与群体平均值进行比较,然后除以标准偏差。 我们保留原始值,以便可以对结果运行 ,但使用 和 帮助器函数来美化显示的内容 – 当然这是可选操作。
如果任一驱动器的延迟超过 3σ 以上,则以红色将它标识为 ;否则标识为绿色。
脚本如下:
性能历史记录也可以近实时回答问题。 每隔 10 秒就会实时提供新的测量值。 此示例使用 时间范围内的 系列来识别群集中每个主机上消耗最多存储 IOPS 的最繁忙(有时称为“最嘈杂”)虚拟机,并显示它们的读/写活动明细。
以下屏幕截图显示了按存储活动列出的排名前 10 的虚拟机:
与 不同, cmdlet 无法感知群集 – 它只返回本地服务器上的 VM。 为了从每个服务器并行查询,我们将调用包装在 中。 对于每个 VM,我们将获得 、 和 测量值。 如果不指定 参数的话,我们将获得每个 VM 的 单一数据点。
来自每个服务器的结果作为 一起返回,我们可以对其运行 ,然后运行 。 请注意, 使用 属性(指示结果的来源位置)修饰结果,我们可以输出这种结果以了解 VM 在哪个位置运行。
脚本如下:
此示例使用 时间范围内的 系列来查找网络饱和迹象,这种迹象定义为超过理论最大带宽的 90%。 对于群集中的每个网络适配器,它会将过去一天内观察到的最高带宽使用率与此适配器声称的链接速度进行比较。
在以下屏幕截图中,我们看到 Fabrikam NX-4 Pro #2 在过去一天出现峰值:
我们重复上述 技巧,对每台服务器运行 并将结果传送给 。 在此过程中,我们抓取了两个相关属性: 字符串(例如“10 Gbps”,以及原始 整数(例如 10000000000)。 我们使用 获取过去一天的平均值和峰值(提醒: 时间范围内的每个度量代表 5 分钟)并乘以每字节 8 位,以进行对等比较。
脚本如下:
为了查看宏观趋势,性能历史记录最长会保留 1 年。 此示例使用 时间范围内的 系列来判断存储空间的填充速度并估计它何时会填满。
在以下屏幕截图中,我们看到“备份”卷上占用的空间每日增加大约 15 GB:
按照此速度,再过 42 天,它的容量就会填满。
时间范围每日有一个数据点。 虽然严格地说,只需绘制两个点就能拟合一条趋势线,但在实践中,最好要求绘制更多的点,例如绘制 14 天的点。 我们使用 设置 (x, y) 点的数组,x 在 [1, 14] 范围内。 有了这些点,就可以实现简单的线性最小二乘算法来查找参数化最佳拟合线 y = ax + b 的 和 。 欢迎回到高中复读。
将卷的 属性除以趋势(斜率 ),可以根据当前存储占用量的增长速度,粗略地估计该卷在几天后将被填满。 、 和 帮助器函数美化输出。
脚本如下:
由于性能历史记录是为整个群集统一收集和存储的,因此无论 VM 在主机之间移动多少次,你都不需要将不同计算机中的数据拼接在一起。 此示例使用 时间范围内的 系列来识别过去 35 天内消耗最多内存的虚拟机。
以下屏幕截图显示了上个月内存使用量排名前 10 的虚拟机:
重复上面介绍的 技巧在每台服务器上运行 。 我们使用 获取每个 VM 的每月平均值,然后依次使用 和 获取榜单。 (或许这就是我们的“头号通缉犯”名单?)
脚本如下: