Résoudre les problèmes au moyen de métriques de stockage

Effectué

Il est important de comprendre la nature des métriques de stockage afin de savoir celles qu’il faut examiner et ce qu’elles indiquent sur l’état d’un compte de stockage. Les métriques de Stockage Azure vous permettent d’analyser les tendances d’utilisation de vos applications et de diagnostiquer les problèmes potentiels liés à votre compte de stockage.

Dans cette leçon, vous allez découvrir les métriques dans Azure Monitor, les informations dont il se sert pour générer des rapports. Vous verrez également comment utiliser les métriques qu’il fournit pour identifier les problèmes liés à la façon dont vos applications utilisent Stockage Azure.

Comprendre les métriques

Les métriques de Stockage sont capturées automatiquement. Vous n’avez donc pas besoin d’activer un type de paramètre pour commencer à les collecter. Le Stockage Azure génère ces métriques et elles sont stockées dans une plateforme de données Azure Monitor. Azure Monitor collecte les métriques de capacité et de transaction au niveau du compte de stockage et du service de stockage (par exemple : Stockage Blob ou Stockage Fichier).

Métriques de capacité

Les métriques de capacité décrivent le stockage des données (par exemple : octets stockés, octets toujours disponibles pour le stockage). Les valeurs de métriques de capacité sont actualisées quotidiennement (jusqu’à 24 heures). Le fragment de temps définit l’intervalle de temps pour lequel des valeurs de mesures sont présentées. Le fragment de temps pris en charge pour toutes les mesures de capacité est d’une heure (PT1H).

Métriques de transaction

Les métriques de transaction décrivent l’activité du compte (par exemple : nombre de transactions ou nombre d’octets lus). Des métriques de transaction sont émises lors de chacune des requêtes adressées à un compte de stockage entre Stockage Azure et Azure Monitor. En l'absence d'activité sur votre compte de stockage, il n'y aura pas de données sur les métriques de transaction au cours la période. Le fragment de temps définit l’intervalle de temps auquel des valeurs de mesures sont présentées. Les fragments de temps pris en charge pour toutes les mesures de transaction sont PT1H et PT1M.

Anatomie d’une valeur de métrique

Vous pouvez obtenir des valeurs de métrique en fournissant l’intervalle de temps, l’espace de noms de la métrique, le nom de la métrique et le type d’agrégation. Voici une description de chaque élément :

Élément Description
Plage temporelle Période pendant laquelle vous souhaitez capturer des données (par exemple : hier ou le mois dernier).
Intervalle de temps La granularité du temps reflétée par une valeur de métrique. (Par exemple : une valeur qui reflète 1 heure ou 1 jour).
Espace de noms de la métrique L’espace de noms de la métrique. Cela indique s’il faut obtenir une métrique au niveau du compte de stockage ou au niveau d’un service de stockage spécifique (par exemple : Stockage Fichier).
Nom de métrique La métrique qui vous intéresse (par exemple : sortie).
Agrégation Comment vous souhaitez que cette valeur soit calculée. Dans la plupart des cas, vous choisissez une somme ou une moyenne.

Pour les métriques prenant en charge des dimensions, vous pouvez les filtrer avec la valeur de dimension souhaitée. Les dimensions sont des paires nom-valeur qui transmettent des données supplémentaires pour décrire la valeur de la métrique. Par exemple, le type d’authentification est une dimension pour les transactions. Si vous souhaitez voir uniquement les transactions autorisées à l’aide d’une clé de compte, vous pouvez utiliser la dimension d’authentification et filtrer selon la clé de compte.

La dimension ResponseType indique le taux de réussite et d’échec, les raisons de l’échec (dépassements de délai d’attente, limitation, erreurs réseau, échecs d’autorisation), etc. Ces informations peuvent vous donner des insights sur les causes de la baisse des performances de vos applications. Par exemple, des erreurs fréquentes de limitation et de délai d’attente peuvent indiquer un haut niveau de contention pour des ressources limitées. Dans ce cas, vous devrez peut-être revoir l’architecture de votre système de manière à passer du niveau Standard au niveau Premium pour vos comptes de stockage. Vous devrez peut-être également répartir la charge sur plusieurs comptes de stockage ou sélectionner une autre organisation pour tous les conteneurs d’objets blob et les tables que votre application utilise.

Afficher et analyser les métriques

Vous pouvez obtenir des valeurs de métrique à l’aide du Portail Azure, de PowerShell, d’Azure CLI ou en utilisant du code qui cible des bibliothèques clientes Azure.

Portail Azure

La leçon précédente a présenté différentes méthodes d’affichage des métriques dans le Portail Azure. Vous pouvez définir les éléments qui apparaissent dans ces vues à l’aide de Metrics Explorer. Dans Metrics Explorer, vous pouvez spécifier l’intervalle de temps, l’espace de noms de la métrique, la métrique et l’agrégation pour chaque valeur que vous souhaitez analyser. Vous pouvez également filtrer par dimensions. Vous pouvez créer des graphiques basés sur ces métriques, puis les épingler à des tableaux de bord pour faciliter l’accès à l’avenir.

L’image suivante montre une configuration de métrique qui obtient le nombre total de transactions au cours des 24 dernières heures. Chaque point de données reflète 15 minutes de données.

Screenshot that shows getting a transaction metric in Metrics Explorer.

L’image suivante montre la dimension d’API utilisée pour obtenir des transactions de lecture uniquement.

Screenshot that shows applying a dimension in Metrics Explorer.

Ligne de commande et scripts

Vous pouvez obtenir des métriques en exécutant des commandes sur la ligne de commande ou en organisant des commandes dans un script que vous pouvez exécuter ultérieurement dans le cadre d’une tâche planifiée (PowerShell) ou d’un travail (Azure CLI).

PowerShell

Vous pouvez obtenir des valeurs de métrique à l’aide de la cmdlet Get-AzMetric. Cet exemple obtient le nombre total de transactions de lecture pour un compte de stockage.

$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

Vous pouvez obtenir des valeurs de métrique à l’aide de la commande az monitor metrics list. Cet exemple obtient le nombre total de transactions de lecture pour un compte de stockage.

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

Code de l’application

Vous pouvez obtenir des valeurs de métrique en écrivant du code qui utilise l’un des kits de développement logiciel (SDK) Azure. L’exemple suivant utilise le Kit de développement logiciel (SDK) Azure pour .NET pour obtenir la quantité moyenne de stockage Blob utilisée dans un compte de stockage sur une période spécifiée.

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.
    }
}