Solucionar problemas com as métricas de armazenamento

Concluído

É importante entender as métricas de armazenamento para saber quais métricas examinar e o que elas indicam sobre o estado de uma conta de armazenamento. Usando as métricas do Armazenamento do Microsoft Azure, você pode analisar as tendências de uso de seus aplicativos e diagnosticar possíveis problemas com sua conta de armazenamento.

Nesta unidade, você aprenderá sobre as métricas do Azure Monitor, quais informações ele reporta e como você pode usar as métricas que ele fornece para identificar problemas com a forma como seus aplicativos estão usando o Armazenamento do Azure.

Entender as métricas

As métricas de armazenamento são capturadas automaticamente, portanto, você não precisa ativar nenhum tipo de configuração para começar a coletá-las. O Armazenamento do Microsoft Azure gera essas métricas e elas são armazenadas em uma plataforma de dados do Azure Monitor. O Azure Monitor coleta métricas de capacidade e transação tanto no nível da conta de armazenamento quanto no nível do serviço de armazenamento (por exemplo: Armazenamento de Blobs ou Armazenamento de Arquivos).

Métricas de capacidade

As métricas de capacidade descrevem o armazenamento de dados (por exemplo: bytes armazenados, bytes ainda disponíveis para armazenamento). Os valores de métricas de capacidade são atualizados diariamente (até 24 horas). O intervalo de agregação define o intervalo de tempo para o qual os valores das métricas são apresentados. O intervalo de agregação compatível com todas as métricas de capacidade é uma hora (PT1H).

Métricas de transação

As métricas de transação descrevem a atividade da conta (por exemplo: número de transações ou número de bytes lidos). As métricas de transação são emitidas, do Armazenamento do Azure para o Azure Monitor, em cada solicitação a uma conta de armazenamento. Caso não haja nenhuma atividade em sua conta de armazenamento, não haverá nenhum dado nas métricas de transações no período. O intervalo de agregação define o intervalo de tempo para o qual os valores das métricas são apresentados. Os intervalos de agregação para todas as métricas de transação são PT1H e PT1M.

A anatomia de um valor métrico

Você pode obter valores de métricas fornecendo um intervalo de tempo, um namespace de métricas, um nome de métrica e o tipo de agregação. Veja aqui uma descrição de cada elemento:

Elemento Descrição
Intervalo de horas O período que você deseja capturar (por exemplo: ontem ou no último mês).
Intervalo de tempo A granularidade do tempo refletida por um valor de métrica. (por exemplo: um valor que reflete uma hora ou um dia).
Namespace da métrica O namespace da métrica. Isso especifica se a métrica deve ser obtida no nível da conta de armazenamento ou no nível de um serviço de armazenamento específico (por exemplo: Armazenamento de arquivos).
Nome da métrica A métrica na qual você está interessado (por exemplo: saída).
Agregação Como você deseja que esse valor seja calculado. Na maioria dos casos, você escolherá uma soma ou uma média.

Para métricas com suporte para dimensões, você pode filtrar a métrica com valor da dimensão desejado. As dimensões são pares nome-valor que carregam dados adicionais para descrever o valor da métrica. Por exemplo, o tipo de autenticação é uma dimensão para transações. Se você estiver interessado em ver apenas as transações que foram autorizadas usando uma chave de conta, poderá utilizar a dimensão de autenticação e filtrar por chave de conta.

A dimensão ResponseType revela a taxa de sucesso e falha e os motivos da falha, como tempos limite, limitação da largura de banda, erros de rede, falha de autorização e assim por diante. Caso o desempenho de seus aplicativos não esteja adequado, essas informações podem fornecer uma boa ideia da razão. Por exemplo, erros frequentes de limitação e tempo limite podem indicar um alto nível de contenção que ocorre em recursos limitados e talvez seja necessário rearquitetar o sistema para usar a camada Premium em vez da camada Padrão para suas contas de armazenamento. Talvez você também precise distribuir a carga entre várias contas de armazenamento ou selecionar uma organização diferente para os contêineres de blob e tabelas que seu aplicativo esteja usando.

Exibir e analisar métricas

Você pode obter valores de métrica usando o portal do Azure, o PowerShell, a CLI do Azure ou códigos direcionados às bibliotecas de cliente do Azure.

Portal do Azure

A unidade anterior apresentou diferentes maneiras de exibir métricas no portal do Azure. Você pode definir os elementos que aparecem nessas visualizações usando o Metrics Explorer. No Metrics Explorer, você pode especificar o intervalo de tempo, período, namespace de métrica, a métrica e a agregação para cada valor que deseja analisar. Você também pode filtrar por dimensões. Você pode criar gráficos com base nessas métricas e fixá-los em painéis para facilitar o acesso futuro.

A seguinte imagem mostra uma configuração de métrica que obtém o número total de transações nas últimas 24 horas. Cada ponto de dados reflete 15 minutos de dados.

Screenshot that shows getting a transaction metric in Metrics Explorer.

A seguinte imagem mostra a dimensão da API sendo usada para obter apenas transações de leitura.

Screenshot that shows applying a dimension in Metrics Explorer.

Linha de comando e scripts

Você pode obter métricas executando comandos com a linha de comando ou organizando comandos em um script que pode ser executado posteriormente como parte de uma tarefa agendada (PowerShell) ou trabalho (CLI do Azure).

PowerShell

Você pode obter valores de métrica usando o cmdlet Get-AzMetric. Este exemplo mostra o número total de transações de leitura para uma conta de armazenamento.

$resourceId = "<resource-ID>"
$dimFilter = [String](New-AzMetricFilter -Dimension ApiName -Operator eq -Value "GetBlob" 3> $null)
Get-AzMetric -ResourceId $resourceId -MetricName Transactions -TimeGrain 01:00:00 -MetricFilter $dimFilter -AggregationType "Total"

CLI do Azure

Você pode obter valores de métrica usando o comando az monitor metrics list. Este exemplo mostra o número total de transações de leitura para uma conta de armazenamento.

az monitor metrics list --resource <resource-ID> --metric "Transactions" --interval PT1H --filter "ApiName eq 'GetBlob' " --aggregation "Total" 

Código do aplicativo

Você pode obter valores de métrica escrevendo código que usa qualquer um dos SDKs do Azure. O seguinte exemplo usa o SDK do Azure para .NET para obter a quantidade média de armazenamento de Blobs usada em uma conta de armazenamento em um período de tempo especificado.

public static async Task ReadStorageMetricValueTest()
{
    // Resource ID for blob storage
    var resourceId = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}/blobServices/default";

    var subscriptionId = "<subscription-ID}";
    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;

    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)
    {
       // process value here.
    }
}