Solución de problemas con métricas de almacenamiento

Completado

Es importante comprender las métricas de almacenamiento para saber qué métricas se deben examinar y lo que indican sobre el estado de una cuenta de almacenamiento. Con las métricas de Azure Storage puede analizar las tendencias de uso de sus aplicaciones y diagnosticar los posibles problemas de la cuenta de almacenamiento.

En esta unidad obtendrá información sobre las métricas en Azure Monitor, sabrá qué datos que notifica y cómo se pueden usar las métricas que se proporcionan para identificar problemas en el modo en que las aplicaciones usan Azure Storage.

Información sobre las métricas

Las métricas de almacenamiento se capturan automáticamente, por lo que no es necesario habilitar ningún tipo de configuración para empezar a recopilarlas. Azure Storage genera estas métricas y se almacenan en una plataforma de datos de Azure Monitor. Azure Monitor recopila métricas de capacidad y métricas de transacción tanto en el nivel de cuenta de almacenamiento como en el nivel de servicio de almacenamiento (por ejemplo, Blob Storage o File Storage).

Métricas de capacidad

Las métricas de capacidad describen el almacenamiento de datos (por ejemplo, los bytes almacenados o los bytes disponibles para el almacenamiento). Los valores de las métricas de capacidad se actualizan diariamente (hasta 24 horas). El intervalo de agregación define el intervalo de tiempo para el que se presentan los valores de las métricas. El intervalo de agregación que se admite en las métricas de capacidad es una hora (PT1H).

Métricas de transacciones

Las métricas de transacción describen la actividad de la cuenta (por ejemplo, el número de transacciones o el número de bytes leídos). Se emiten en todas las solicitudes enviadas a una cuenta de almacenamiento de Azure Storage a Azure Monitor. En caso de que no haya actividad en la cuenta de almacenamiento, no habrá ningún dato en las métricas de transacciones del período. El intervalo de agregación define el intervalo de tiempo en el que se presentan los valores de las métricas. Los intervalos de agregación compatible para todas las métricas de transacciones son PT1H y PT1M.

Anatomía de un valor de métrica

Para obtener valores de métricas, proporcione un intervalo de tiempo, un espacio de nombres de métrica, un nombre de métrica y el tipo de agregación. Esta es una descripción de cada elemento:

Elemento Descripción
Intervalo de horas El período de tiempo que quiere capturar (por ejemplo, ayer o el último mes).
Intervalo de tiempo La granularidad del tiempo reflejada por un valor de métrica. (por ejemplo, un valor que refleja 1 hora o 1 día).
Espacio de nombres de métricas El espacio de nombres de la métrica. Esto especifica si se va a obtener una métrica en el nivel de cuenta de almacenamiento o en el nivel de un servicio de almacenamiento específico (por ejemplo, File Storage).
Nombre de métrica La métrica que le interesa (por ejemplo, salida).
Agregación Cómo quiere que se calcule ese valor. En la mayoría de los casos, elegirá una suma o un promedio.

Para ver las métricas que admiten dimensiones, puede filtrar las métricas con el valor de dimensión deseado. Las dimensiones son pares nombre-valor que transportan datos adicionales para describir el valor de la métrica. Por ejemplo, el tipo de autenticación es una dimensión de las transacciones. Si está interesado en ver solo las transacciones autorizadas mediante una clave de cuenta, puede usar la dimensión de autenticación y el filtro en la clave de cuenta.

La dimensión ResponseType revela la tasa de éxito y error y los motivos del error, como tiempos de espera, limitaciones, errores de red, errores de autorización, etc. Esta información puede proporcionar una buena idea sobre el motivo por el que el rendimiento de las aplicaciones se está viendo afectado. Por ejemplo, errores frecuentes de limitación y tiempo de espera pueden indicar un alto nivel de contención en recursos limitados, así que es posible que tenga que rediseñar el sistema para usar el nivel Premium en lugar del Estándar para las cuentas de almacenamiento. También podría tener que distribuir la carga entre varias cuentas de almacenamiento o seleccionar otra organización para cualquier contenedor de blobs y tablas que use la aplicación.

Visualización y análisis de las métricas

Puede obtener valores de métrica mediante Azure Portal, PowerShell, la CLI de Azure o mediante el código destinado a bibliotecas cliente de Azure.

Azure Portal

En la unidad anterior se presentan diferentes formas de ver las métricas en Azure Portal. Puede definir los elementos que aparecen en esas vistas mediante el Explorador de métricas. En el Explorador de métricas, puede especificar el intervalo de tiempo, el espacio de nombres de métrica, la métrica y la agregación para cada valor que quiera analizar. También puede filtrar por dimensiones. Puede crear gráficos basados en estas métricas y, a continuación, anclarlos a paneles para facilitar el acceso en el futuro.

En la imagen siguiente se muestra una configuración de métricas que obtiene el número total de transacciones de las últimas 24 horas. Cada punto de datos refleja 15 minutos de datos.

Screenshot that shows getting a transaction metric in Metrics Explorer.

En la imagen siguiente se muestra la dimensión de API que se usa para obtener solo transacciones de lectura.

Screenshot that shows applying a dimension in Metrics Explorer.

Línea de comandos y scripts

Para obtener métricas, ejecute comandos con la línea de comandos u organice comandos en un script que pueda ejecutar más adelante como parte de una tarea programada (PowerShell) o un trabajo (CLI de Azure).

PowerShell

Puede obtener los valores de métrica mediante el cmdlet Get-AzMetric. En este ejemplo se obtiene el número total de transacciones de lectura de una cuenta de almacenamiento.

$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"

Azure CLI

Puede obtener los valores de métrica mediante el comando az monitor metrics list. En este ejemplo se obtiene el número total de transacciones de lectura de una cuenta de almacenamiento.

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

Código de aplicación

Puede obtener valores de métrica si escribe el código que use cualquiera de los SDK de Azure. En el ejemplo siguiente se usa el SDK de Azure para .NET para obtener la cantidad media de almacenamiento de blobs que se usa en una cuenta de almacenamiento durante un período de tiempo 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.
    }
}