了解如何监视文件共享性能对于确保应用程序尽可能高效运行至关重要。 本文介绍了如何使用 Azure Monitor 分析 Azure 文件存储指标,例如可用性、延迟和利用率。
请参阅监视 Azure 文件存储,详细了解可为 Azure 文件存储收集的监视数据以及如何使用这些数据。
适用于
管理模型 |
计费模式 |
媒体层 |
冗余 |
中小企业 |
网络文件系统 (NFS) |
Microsoft.Storage |
预配版本 v1 |
SSD(高级) |
本地 (LRS) |
 |
 |
Microsoft.Storage |
预配版本 v1 |
SSD(高级) |
区域 (ZRS) |
 |
 |
Microsoft.Storage |
即用即付 |
HDD(标准) |
本地 (LRS) |
 |
 |
Microsoft.Storage |
即用即付 |
HDD(标准) |
区域 (ZRS) |
 |
 |
Microsoft.Storage |
即用即付 |
HDD(标准) |
异地 (GRS) |
 |
 |
Microsoft.Storage |
即用即付 |
HDD(标准) |
GeoZone (GZRS) |
 |
 |
支持的指标
Azure 文件存储的指标位于以下命名空间:
- Microsoft.Storage/storageAccounts
- Microsoft.Storage/storageAccounts/fileServices
有关 Azure 文件存储的可用指标列表,请查看 Azure 文件存储监视数据参考。
有关所有 Azure Monitor 支持指标(包括 Azure 文件存储)的列表,请参阅 Azure Monitor 支持的指标。
查看 Azure 文件存储指标数据
可以通过 Azure 门户、PowerShell、Azure CLI 或 .NET 查看 Azure 文件存储指标。
你可以使用 Azure Monitor Metrics Explorer 来分析 Azure 存储的指标,同时结合其他 Azure 服务的指标进行比较。 在 Azure Monitor 菜单中选择指标,以打开指标浏览器。 有关使用此工具的详细信息,请参阅使用 Azure Monitor 指标资源管理器分析指标。
对于支持维度的指标,可使用所需的维度值筛选指标。 有关 Azure 存储支持的维度的完整列表,请参阅指标维度。
列出指标定义
你可以列出存储帐户或 Azure 文件存储服务的指标定义。 请使用 Get-AzMetricDefinition cmdlet。
在本示例中,将 <resource-ID>
占位符替换为整个存储帐户的资源 ID 或 Azure 文件存储服务的资源 ID。 你可以在 Azure 门户中存储帐户的“属性”页上找到这些资源 ID。
$resourceId = "<resource-ID>"
Get-AzMetricDefinition -ResourceId $resourceId
读取指标值
你可以读取存储帐户或 Azure 文件存储服务的帐户级别指标值。 使用 Get-AzMetric cmdlet。
$resourceId = "<resource-ID>"
Get-AzMetric -ResourceId $resourceId -MetricNames "UsedCapacity" -TimeGrain 01:00:00
读取具有维度的指标值
当指标支持维度时,可以通过使用维度值来读取指标值并对其进行筛选。 使用 Get-AzMetric cmdlet。
$resourceId = "<resource-ID>"
Get-AzMetric -ResourceId $resourceId -MetricNames "UsedCapacity" -TimeGrain 01:00:00
$resourceId = "<resource-ID>"
$dimFilter = [String](New-AzMetricFilter -Dimension ApiName -Operator eq -Value "GetFile" 3> $null)
Get-AzMetric -ResourceId $resourceId -MetricName Transactions -TimeGrain 01:00:00 -MetricFilter $dimFilter -AggregationType "Total"
列出帐户级指标定义
你可以列出存储帐户或 Azure 文件存储服务的指标定义。 使用 az monitor metrics list-definitions 命令。
在本示例中,将 <resource-ID>
占位符替换为整个存储帐户的资源 ID 或 Azure 文件存储服务的资源 ID。 你可以在 Azure 门户中存储帐户的“属性”页上找到这些资源 ID。
az monitor metrics list-definitions --resource <resource-ID>
读取帐户级指标值
你可以读取存储帐户或 Azure 文件存储服务的指标值。 请使用 az monitor metrics list 命令。
az monitor metrics list --resource <resource-ID> --metric "UsedCapacity" --interval PT1H
读取具有维度的指标值
当指标支持维度时,可以通过使用维度值来读取指标值并对其进行筛选。 请使用 az monitor metrics list 命令。
az monitor metrics list --resource <resource-ID> --metric "Transactions" --interval PT1H --filter "ApiName eq 'GetFile' " --aggregation "Total"
Azure Monitor 提供 .NET SDK,用于读取指标定义和值。 示例代码演示如何通过不同的参数来使用 SDK。 对于存储指标,需使用 0.18.0-preview
或更高版本。
在这些示例中,将 <resource-ID>
占位符替换为整个存储帐户或 Azure 文件存储服务的资源 ID。 你可以在 Azure 门户中存储帐户的“属性”页上找到这些资源 ID。
将 <subscription-ID>
占位符值替换为你的订阅 ID。 有关如何获取 <tenant-ID>
、<application-ID>
和 <AccessKey>
的值的指南,请参阅使用门户创建可访问资源的 Microsoft Entra 应用程序和服务主体。
列出帐户级指标定义
以下示例演示如何列出帐户级别的指标定义:
public static async Task ListStorageMetricDefinition()
{
var resourceId = "<resource-ID>";
var subscriptionId = "<subscription-ID>";
var tenantId = "<tenant-ID>";
var applicationId = "<application-ID>";
var accessKey = "<AccessKey>";
MonitorManagementClient readOnlyClient = AuthenticateWithReadOnlyClient(tenantId, applicationId, accessKey, subscriptionId).Result;
IEnumerable<MetricDefinition> metricDefinitions = await readOnlyClient.MetricDefinitions.ListAsync(resourceUri: resourceId, cancellationToken: new CancellationToken());
foreach (var metricDefinition in metricDefinitions)
{
// Enumerate metric definition:
// Id
// ResourceId
// Name
// Unit
// MetricAvailabilities
// PrimaryAggregationType
// Dimensions
// IsDimensionRequired
}
}
读取帐户级别指标值
以下示例演示如何读取帐户级别的 UsedCapacity
数据:
public static async Task ReadStorageMetricValue()
{
var resourceId = "<resource-ID>";
var subscriptionId = "<subscription-ID>";
var tenantId = "<tenant-ID>";
var applicationId = "<application-ID>";
var accessKey = "<AccessKey>";
MonitorClient readOnlyClient = AuthenticateWithReadOnlyClient(tenantId, applicationId, accessKey, subscriptionId).Result;
Microsoft.Azure.Management.Monitor.Models.Response Response;
string startDate = DateTime.Now.AddHours(-3).ToUniversalTime().ToString("o");
string endDate = DateTime.Now.ToUniversalTime().ToString("o");
string timeSpan = startDate + "/" + endDate;
Response = await readOnlyClient.Metrics.ListAsync(
resourceUri: resourceId,
timespan: timeSpan,
interval: System.TimeSpan.FromHours(1),
metricnames: "UsedCapacity",
aggregation: "Average",
resultType: ResultType.Data,
cancellationToken: CancellationToken.None);
foreach (var metric in Response.Value)
{
// Enumerate metric value
// Id
// Name
// Type
// Unit
// Timeseries
// - Data
// - Metadatavalues
}
}
读取多维指标值
对于多维指标,如果需要读取基于特定维度值的指标数据,则需定义元数据筛选器。
以下示例演示如何根据支持多维的指标读取指标数据:
public static async Task ReadStorageMetricValueTest()
{
// Resource ID for Azure Files
var resourceId = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}/fileServices/default";
var subscriptionId = "<subscription-ID}";
// How to identify Tenant ID, Application ID and Access Key: https://docs.azure.cn/active-directory/develop/howto-create-service-principal-portal
var tenantId = "<tenant-ID>";
var applicationId = "<application-ID>";
var accessKey = "<AccessKey>";
MonitorManagementClient readOnlyClient = AuthenticateWithReadOnlyClient(tenantId, applicationId, accessKey, subscriptionId).Result;
Microsoft.Azure.Management.Monitor.Models.Response Response;
string startDate = DateTime.Now.AddHours(-3).ToUniversalTime().ToString("o");
string endDate = DateTime.Now.ToUniversalTime().ToString("o");
string timeSpan = startDate + "/" + endDate;
// It's applicable to define meta data filter when a metric support dimension
// More conditions can be added with the 'or' and 'and' operators, example: BlobType eq 'BlockBlob' or BlobType eq 'PageBlob'
ODataQuery<MetadataValue> odataFilterMetrics = new ODataQuery<MetadataValue>(
string.Format("BlobType eq '{0}'", "BlockBlob"));
Response = readOnlyClient.Metrics.List(
resourceUri: resourceId,
timespan: timeSpan,
interval: System.TimeSpan.FromHours(1),
metricnames: "BlobCapacity",
odataQuery: odataFilterMetrics,
aggregation: "Average",
resultType: ResultType.Data);
foreach (var metric in Response.Value)
{
//Enumerate metric value
// Id
// Name
// Type
// Unit
// Timeseries
// - Data
// - Metadatavalues
}
}
可以使用 Azure Monitor 来分析利用 Azure 文件存储的工作负载。 请执行这些步骤。
- 在 Azure 门户中导航到存储帐户。
- 在服务菜单中的监视下面,选择指标。
- 在“指标命名空间”下,选择“文件”。
现在,你可以根据要监视的内容选择指标。
监视可用性
在 Azure Monitor 中,当从应用程序或用户的角度来看存在明显错误时,或者在对警报进行故障排除时,可用性指标会很有用。
在将此指标用于 Azure 文件存储时,请务必始终将聚合视为平均值,而不是最大值或最小值。 使用 Average 会显示请求的百分比是否遇到错误,以及这些请求是否位于 Azure 文件的 SLA 中。
监视延迟
两个最重要的延迟指标是成功 E2E 延迟和成功服务器延迟。 这些是开始任何性能调查时要选择的理想指标。 平均值是建议的聚合。 如前所述,最大值和最小值有时可能具有误导性。
在以下图表中,蓝色线指示总延迟(成功 E2E 延迟)所用时间,粉色线指示仅 Azure 文件存储服务(成功服务器延迟)所用时间。
此图表显示具有装载的 Azure 文件共享的本地客户端,例如,从远程位置进行连接的典型用户。 客户端和 Azure 区域之间的物理距离与相应的客户端延迟密切相关,这表示 E2E 与服务器延迟之间的差异。
相比之下,下图显示了客户端和 Azure 文件共享位于同一区域中的情况。 请注意,客户端延迟仅为 0.17 毫秒,而第一个图表为 43.9 毫秒。 这说明了为什么必须最大程度地降低客户端延迟,才能实现最佳性能。
另一个可能表明存在问题的延迟指标是“成功服务器延迟”的频率增加或出现异常峰值。 这通常是因为超出了预配文件共享的预配上限(或即用即付文件共享的整体规模上限)导致的限制。 请参阅 了解 Azure 文件计费 以及 Azure 文件的可伸缩性和性能目标。
有关详细信息,请参阅高延迟、低吞吐量或低 IOPS 故障排除。
监视利用率
衡量传输的数据量(吞吐量)或服务操作量 (IOPS) 的利用率指标通常用于确定应用程序或工作负载正在执行的工作量。 事务指标可以确定针对不同时间粒度的 Azure 文件存储服务的操作或请求数。
如果使用流出量或流入量指标来确定入站或出站数据量,请使用总和聚合来确定在 1 分钟到 1 天时间粒度内传入和传出文件共享的总数据量。 其他聚合(如平均值、最大值和最小值)仅显示单个 I/O 大小的值。 这就是为什么大多数客户在使用 最大 聚合时通常会看到 1 MiB 的原因。 虽然了解最大、最小甚至平均 I/O 大小可能非常有用,但它无法显示工作负载的使用模式所生成的 I/O 大小的分布。
还可以选择对响应类型(成功、失败、错误)或 API 操作(读取、写入、创建、关闭)“应用拆分”,以显示其他详细信息,如下图所示。
要确定工作负载的每秒平均 I/O (IOPS),请先确定一分钟内事务总数,然后将该数字除以 60 秒。 例如,每 1 分钟/60 秒内发生 120,000 个事务 = 2,000 个平均 IOPS。
要确定工作负载的平均吞吐量,请将流入量和流出量指标合并得出传输数据总量(总吞吐量),然后将其除以 60 秒。 例如,1 分钟/60 秒的总吞吐量为 1 GiB = 17 MiB 平均吞吐量。
按最大 IOPS 和带宽(仅限预配)来监视利用率
预配的文件共享提供“事务(最大 IOPS)”和“带宽(最大 MiB/s)”指标,以显示工作负载在高峰时段的表现。 使用这些指标分析工作负荷有助于了解真正的大规模功能,并建立基线来了解更多吞吐量和 IOPS 的影响,以便以最佳方式预配 Azure 文件共享。
下图显示了在 1 小时内生成 263 万个事务的工作负载。 用 263 万个事务除以 3,600 秒,则得出平均值为 730 个 IOPS。
现在,在将平均 IOPS 与最大 IOPS 时的事务数进行比较时,我们会发现在峰值负载下达到 1,840 个 IOPS,这可以更好地表示工作负载的大规模能力。
选择“添加指标”,以在单个图形合并流入量和流出量指标。 结果显示在一小时内传输了 76.2 GiB (78,028 MiB),可以得出在同一小时内的平均吞吐量为 21.67 MiB。
与最大 MiB/秒的带宽相比,我们在峰值时达到 123 MiB/秒。
相关内容