了解如何监视文件共享性能对于确保应用程序尽可能高效运行至关重要。 本文介绍了如何使用 Azure Monitor 分析 Azure 文件存储指标,例如可用性、延迟和利用率。
请参阅监视 Azure 文件存储,详细了解可为 Azure 文件存储收集的监视数据以及如何使用这些数据。
Azure 文件存储 支持的指标
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 提供 Azure.Monitor.Query .NET SDK 来读取指标定义和值。 使用 Azure.Identity 进行无密码身份验证。DefaultAzureCredential 有关详细信息,请参阅 Azure 服务的无密码连接。
首先,安装所需的 NuGet 包:
dotnet add package Azure.Identity
dotnet add package Azure.Monitor.Query
在这些示例中,请将 <resource-ID> 占位符替换为整个存储帐户的资源 ID 或 Azure 文件服务的资源 ID。 你可以在 Azure 门户中存储帐户的“属性”页上找到这些资源 ID。
列出帐户级指标定义
以下示例演示如何列出帐户级别的指标定义:
using Azure;
using Azure.Identity;
using Azure.Monitor.Query;
using Azure.Monitor.Query.Models;
public static async Task ListStorageMetricDefinition()
{
var resourceId = "<resource-ID>";
var client = new MetricsQueryClient(new Uri("https://management.chinacloudapi.cn/"), new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = AzureAuthorityHosts.AzureChina }));
AsyncPageable<MetricDefinition> metricDefinitions = client.GetMetricDefinitionsAsync(resourceId, metricsNamespace);
await foreach (var metricDefinition in metricDefinitions)
{
Console.WriteLine(metricDefinition.Id);
Console.WriteLine(metricDefinition.ResourceId);
Console.WriteLine(metricDefinition.Name);
Console.WriteLine(metricDefinition.Unit);
}
}
读取帐户级别指标值
以下示例演示如何读取帐户级别的 UsedCapacity 数据:
public static async Task ReadStorageMetricValue()
{
var resourceId = "<resource-ID>";
var client = new MetricsQueryClient(new Uri("https://management.chinacloudapi.cn/"), new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = AzureAuthorityHosts.AzureChina }));
Response<MetricsQueryResult> result = await client.QueryResourceAsync(
resourceId,
new[] { "UsedCapacity" },
new MetricsQueryOptions
{
Granularity = TimeSpan.FromHours(1),
Aggregations = { MetricAggregationType.Average },
TimeRange = new QueryTimeRange(TimeSpan.FromHours(3))
});
foreach (MetricResult metric in result.Value.Metrics)
{
Console.WriteLine(metric.Name);
Console.WriteLine(metric.Unit);
foreach(var item in metric.TimeSeries)
{
Console.WriteLine("Metadata:");
foreach(var metadata in item.Metadata)
{
Console.WriteLine($"{metadata.Key}: {metadata.Value}");
}
Console.WriteLine("Values:");
foreach(var value in item.Values)
{
Console.WriteLine($"TimeStamp: {value.TimeStamp}, Average: {value.Average}");
}
}
}
}
读取多维指标值
对于多维指标,如果需要读取基于特定维度值的指标数据,则需定义元数据筛选器。
以下示例演示如何读取支持多维值的指标上的指标数据:
public static async Task ReadStorageMetricValueTest()
{
// Resource ID for Azure Files
var resourceId = "<resource-ID>";
var client = new MetricsQueryClient(new Uri("https://management.chinacloudapi.cn/"), new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = AzureAuthorityHosts.AzureChina }));
// Define a dimension filter to read metric data on specific dimension values
// More conditions can be added with the 'or' and 'and' operators, example: ApiName eq 'GetFile' or ApiName eq 'PutRange'
Response<MetricsQueryResult> result = await client.QueryResourceAsync(
resourceId,
new[] { "Transactions" },
new MetricsQueryOptions
{
Granularity = TimeSpan.FromHours(1),
Aggregations = { MetricAggregationType.Average },
TimeRange = new QueryTimeRange(TimeSpan.FromHours(3)),
Filter = "ApiName eq 'GetFile'"
});
foreach (MetricResult metric in result.Value.Metrics)
{
Console.WriteLine(metric.Name);
Console.WriteLine(metric.Unit);
foreach(var item in metric.TimeSeries)
{
Console.WriteLine("Metadata:");
foreach(var metadata in item.Metadata)
{
Console.WriteLine($"{metadata.Key}: {metadata.Value}");
}
Console.WriteLine("Values:");
foreach(var value in item.Values)
{
Console.WriteLine($"TimeStamp: {value.TimeStamp}, Average: {value.Average}");
}
}
}
使用 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和吞吐量能反映工作量活动的整体情况,但它们可能掩盖突发和峰值。 配置文件共享提供 按最大IOPS计算的事务 数和 按最大MiB/s 计带宽的指标,显示你的工作负载在高峰负载下的表现,更准确地反映实际性能需求。 利用这些指标分析工作负载,有助于你了解大规模的真实能力,并建立基线,了解更高吞吐量和IOPS的影响,从而优化Azure文件共享的配置。
下图显示了在 1 小时内生成 263 万个事务的工作负载。 当263万笔交易除以3600秒时,平均为730 IOPS。
将平均IOPS与 最大IOPS 交易量进行比较显示,在峰值负载下,工作负载达到了1840 IOPS,这更能体现工作负载在大规模化中的表现。
选择“添加指标”,以在单个图形合并流入量和流出量指标。 结果显示在一小时内传输了 76.2 GiB (78,028 MiB),可以得出在同一小时内的平均吞吐量为 21.67 MiB。
与 最大MiB/s带宽相比,工作负载峰值达到123 MiB/s。
相关内容