利用儲存體計量進行疑難排解

已完成

請務必了解儲存體計量,使您能夠知道要檢查哪些計量,以及這些計量會指出儲存體帳戶狀態的哪些資訊。 使用 Azure 儲存體 計量,您可以分析應用程式的使用趨勢,並診斷記憶體帳戶的可能問題。

在本單元中,您將了解 Azure 監視器中的計量、其回報的資訊,以及如何使用其所提供的計量來找出應用程式使用 Azure 儲存體方面的問題。

了解計量

儲存體 計量會自動擷取,因此您不需要啟用任何種類的設定,即可開始收集計量。 Azure 儲存體 會產生這些計量,並儲存在 Azure 監視器數據平臺中。 Azure 監視器會收集記憶體帳戶層級和記憶體服務等級的容量計量和交易計量(例如:Blob 儲存體 或檔案 儲存體)。

容量計量

容量計量描述數據記憶體(例如:儲存的位元組、仍可用於記憶體的位元組)。 容量計量值會每天重新整理(最多 24 小時)。 時間精細度會定義用來呈現計量值的時間間隔。 所有容量計量支援的時間精細度為一小時 (PT1H)。

交易計量

交易計量描述帳戶活動(例如:交易數目或讀取的位元元組數目)。 對於儲存體帳戶的每個要求,系統都會發出從 Azure 儲存體到 Azure 監視器的交易計量。 在您的儲存體帳戶上沒有活動的情況下,該期間內交易計量上不會有資料。 時間精細度會定義用來呈現計量值的時間間隔。 所有交易計量支援的時間精細度為 PT1H 和 PT1M。

計量值的結構

您可以藉由提供時間範圍、時間間隔、計量命名空間、計量名稱和匯總類型來取得計量值。 以下是每個元素的描述:

元素 描述
時間範圍 您想要擷取的時間週期(例如:昨天或上個月)。
時間間隔 計量值所反映的時間細微性 (例如:反映一小時或一天的值)。
計量命名空間 計量的命名空間。 這會指定是要取得記憶體帳戶層級的計量,還是在特定記憶體服務的層級取得計量(例如:檔案 儲存體)。
度量名稱 您感興趣的計量(例如:輸出)。
彙總 您想要計算該值的方式。 在大部分情況下,您會選擇總和或平均。

針對支援維度的計量,您可使用所需的維度值來篩選計量。 維度是名稱/值對,其中包含用於描述計量值的額外資料。 例如,驗證類型是交易的維度。 如果您只想要查看使用帳戶密鑰授權的交易,您可以使用驗證維度並篩選帳戶密鑰。

ResponseType 維度顯示成功率和失敗率,以及失敗的原因,例如逾時、節流、網路錯誤、授權失敗等。 此資訊可讓您取得應用程式效能為何有問題之原因的良好見解。 例如,頻繁節流和逾時錯誤可能表示有限資源發生高層級的競爭,而且您可能需要將系統重新架構,以針對儲存體帳戶使用進階層,而不是標準層。 您可能也需要將負載分散到多個儲存體帳戶,或為應用程式所使用的任何 Blob 容器和資料表選取不同的組織。

檢視及分析計量

您可以使用 Azure 入口網站、PowerShell、Azure CLI,或使用以 Azure 用戶端程式庫為目標的程式碼來取得計量值。

Azure 入口網站

上一個單元提供在 Azure 入口網站中檢視計量的不同方式。 您可以使用計量瀏覽器,定義出現在那些檢視中的元素。 在計量瀏覽器中,您可以為每個要分析的值,指定時間範圍、時間間隔、計量命名空間、計量和彙總。 您也可以依維度進行篩選。 您可以根據這些計量建立圖表,然後將其釘選到儀表板,以便日後輕鬆存取。

下圖顯示用於取得過去 24 小時內交易總數的計量設定。 每個資料點都會反映 15 分鐘的資料。

Screenshot that shows getting a transaction metric in Metrics Explorer.

下圖顯示僅用於取得讀取交易的 API 維度。

Screenshot that shows applying a dimension in Metrics Explorer.

命令列和指令碼

您可以使用命令行執行命令,或在腳本中排列命令,以便稍後在排程工作 (PowerShell) 或作業 (Azure CLI) 中執行命令,以取得計量。

PowerShell

您可以使用 Get-AzMetric Cmdlet 來取得計量值。 此範例會取得儲存體帳戶的讀取交易總數。

$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

您可以使用 az monitor metrics list 命令來取得計量值。 此範例會取得儲存體帳戶的讀取交易總數。

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

應用程式程式碼

您可以撰寫使用任何 Azure SDK 的程式碼來取得計量值。 下列範例會使用 Azure SDK for .NET,取得在指定時間間隔內儲存體帳戶所使用 Blob 儲存體的平均數量。

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