Risolvere i problemi con le metriche di archiviazione

Completato

È importante comprendere le metriche di archiviazione in modo da sapere quali metriche esaminare e cosa indicano tali metriche relativamente allo stato di un account di archiviazione. Usando Archiviazione di Azure metriche, è possibile analizzare le tendenze di utilizzo delle applicazioni e diagnosticare i possibili problemi con l'account di archiviazione.

In questa unità verranno presentate le metriche di Monitoraggio di Azure, le informazioni segnalate da questo servizio e come usare le metriche fornite per identificare i problemi relativi all'uso di Archiviazione di Azure da parte delle applicazioni.

Informazioni sulle metriche

Archiviazione metriche vengono acquisite automaticamente, quindi non è necessario abilitare alcuna impostazione per iniziare a raccoglierle. Archiviazione di Azure genera queste metriche e vengono archiviate in una piattaforma dati di Monitoraggio di Azure. Monitoraggio di Azure raccoglie le metriche di capacità e le metriche delle transazioni sia a livello di account di archiviazione che a livello di servizio di archiviazione, ad esempio BLOB Archiviazione o File Archiviazione.

Metriche relative alla capacità

Le metriche di capacità descrivono l'archiviazione dei dati, ad esempio byte archiviati, byte ancora disponibili per l'archiviazione. I valori delle metriche della capacità vengono aggiornati ogni giorno (fino a 24 ore). L'intervallo di tempo definisce l'intervallo di tempo per cui vengono presentati i valori delle metriche. L'intervallo di tempo supportato per tutte le metriche relative alla capacità è un'ora (PT1H).

Metriche relative alle transazioni

Le metriche delle transazioni descrivono l'attività dell'account, ad esempio il numero di transazioni o il numero di byte letti. Le metriche di transazione vengono generate su per tutte le richieste a un account di archiviazione da Archiviazione di Azure a Monitoraggio di Azure. In caso non siano presenti attività nell'account di archiviazione, non ci saranno dati per le metriche di transazione nel periodo. L'intervallo di tempo definisce l'intervallo di tempo per cui vengono presentati i valori delle metriche. Gli intervalli di tempo supportati per tutte le metriche di transazioni sono PT1H e PT1M.

Anatomia di un valore di metrica

È possibile ottenere i valori delle metriche fornendo un intervallo di tempo, un intervallo di tempo, uno spazio dei nomi delle metriche, un nome della metrica e il tipo di aggregazione. Ecco una descrizione di ogni elemento:

Elemento Descrizione
Intervallo di tempo Periodo di tempo che si desidera acquisire (ad esempio, ieri o l'ultimo mese).
Intervallo di tempo Granularità del tempo riflessa da un valore di metrica. ad esempio un valore che riflette un'ora o un giorno.
Spazio dei nomi delle metriche Spazio dei nomi della metrica. Specifica se ottenere una metrica a livello di account di archiviazione o a livello di un servizio di archiviazione specifico, ad esempio File Archiviazione.
Nome metrica Metrica a cui si è interessati ( ad esempio: uscita).
Aggregazione Come si vuole calcolare tale valore. Nella maggior parte dei casi, si sceglierà una somma o una media.

Per le metriche che supportano le dimensioni, è possibile applicare un filtro specificando il valore di dimensione desiderato. Le dimensioni sono coppie nome/valore contenenti dati aggiuntivi per descrivere il valore della metrica. Ad esempio, il tipo di autenticazione è una dimensione per le transazioni. Se si è interessati a visualizzare solo le transazioni autorizzate usando una chiave dell'account, è possibile usare la dimensione di autenticazione e filtrare in base alla chiave dell'account.

La dimensione ResponseType indica la percentuale di esito positivo e negativo e i motivi dell'errore, ad esempio timeout, limitazione, errori di rete, errore di autorizzazione e così via. Queste informazioni possono essere utili per comprendere il motivo dei problemi di prestazioni delle applicazioni. Ad esempio, casi frequenti di limitazione e di errori di timeout possono indicare un livello elevato di contesa di risorse limitate e potrebbe essere necessario riprogettare il sistema in modo da usare il livello Premium al posto di quello Standard per gli account di archiviazione. Può anche essere necessario suddividere il carico tra più account di archiviazione oppure selezionare un'organizzazione diversa per le tabelle e i contenitori BLOB usati dall'applicazione.

Visualizzare e analizzare le metriche

È possibile ottenere i valori delle metriche usando il portale di Azure, PowerShell, l'interfaccia della riga di comando di Azure o usando codice per le librerie client di Azure.

Azure portal

Nell'unità precedente sono stati presentati diversi modi per visualizzare le metriche nel portale di Azure. È possibile definire gli elementi da includere in tali visualizzazioni usando Esplora metriche. In Esplora metriche è possibile specificare l'intervallo di tempo e la relativa granularità, lo spazio dei nomi delle metriche, la metrica e l'aggregazione per ogni valore da analizzare. È anche possibile filtrare in base alle dimensioni. Si possono creare grafici in base a queste metriche e quindi aggiungerli ai dashboard per semplificare l'accesso in futuro.

L'immagine seguente mostra una configurazione delle metriche che ottiene il numero totale di transazioni nelle ultime 24 ore. Ogni punto dati riflette 15 minuti di dati.

Screenshot that shows getting a transaction metric in Metrics Explorer.

L'immagine seguente mostra la dimensione API usata per ottenere solo le transazioni di lettura.

Screenshot that shows applying a dimension in Metrics Explorer.

Riga di comando e script

È possibile ottenere le metriche eseguendo comandi con la riga di comando o disponendo i comandi in uno script che è possibile eseguire in un secondo momento come parte di un'attività pianificata (PowerShell) o di un processo (interfaccia della riga di comando di Azure).

PowerShell

È possibile ottenere i valori delle metriche usando il cmdlet Get-AzMetric. Questo esempio ottiene il numero totale di transazioni di lettura per un account di archiviazione.

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

Interfaccia della riga di comando di Azure

È possibile ottenere i valori delle metriche usando il comando az monitor metrics list. Questo esempio ottiene il numero totale di transazioni di lettura per un account di archiviazione.

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

Codice dell'applicazione

È possibile ottenere i valori delle metriche scrivendo codice che usa uno degli SDK di Azure. Nell'esempio seguente viene usato Azure SDK per .NET per ottenere la quantità media di archiviazione BLOB usata in un account di archiviazione in un periodo di tempo specificato.

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