Azure Blob Storage の監視

Azure リソースに依存するクリティカルなアプリケーションとビジネス プロセスがある場合は、それらのリソースの可用性、パフォーマンス、操作を監視する必要があります。 この記事では、Azure Blob Storage によって生成される監視データと、Azure Monitor の機能を使用してこのデータに関するアラートを分析する方法について説明します。

監視の概要

Azure portal の、各 BLOB ストレージ リソースの [概要] ページには、リソースの要求や時間ごとの課金など、リソースの使用状況の要約が表示されます。 この情報は役立ちますが、使用できる監視データはごくわずかです。 このデータの一部は自動的に収集され、リソースを作成するとすぐに分析に使用できるようになります。 一定の構成によって追加の種類のデータ収集を有効にすることができます。

Azure Monitor とは

Azure Blob Storage では、Azure のフル スタック監視サービスである Azure Monitor を使用して監視データが作成されます。 Azure Monitor には、Azure リソースと、他のクラウドおよびオンプレミスのリソースを監視するための完全な機能セットが用意されています。

まず「Azure Monitor を使用した Azure リソースの監視」の記事にある次の事項の説明をお読みください。

  • Azure Monitor とは
  • 監視に関連するコスト
  • Azure で収集される監視データ
  • データ収集の構成
  • 監視データの分析とアラート生成のための Azure の標準ツール

以下のセクションでは、この記事に基づき、Azure Storage から収集された特定のデータについて説明します。 例では、Azure ツールを使用してデータ コレクションを構成し、このデータを分析する方法について説明します。

データの監視

Azure Blob Storage では、他の Azure リソースと同じ種類の監視データが収集されます。これについては、Azure リソースの監視データに関するページを参照してください。

Azure Blob Storage によって作成されるメトリックとログの詳細については、Azure Blob Storage 監視データのリファレンスに関するページを参照してください。

Azure Monitor のメトリックとログでは、Azure Resource Manager ストレージ アカウントのみがサポートされています。 Azure Monitor では、従来のストレージ アカウントはサポートされていません。 従来のストレージ アカウントでメトリックまたはログを使用する場合、Azure Resource Manager ストレージ アカウントに移行する必要があります。 詳細については、Azure Resource Manager への移行に関する記事を参照してください。

必要に応じて、従来のメトリックとログの使用を続けることができます。 実際に、従来のメトリックとログを Azure Monitor のメトリックとログと並行して使用できます。 このサポートは、Azure Storage で従来のメトリックとログのサービスが終了するまで引き続き提供されます。

収集とルーティング

プラットフォーム メトリックとアクティビティ ログは自動的に収集されますが、診断設定を使用して他の場所にルーティングすることができます。

リソース ログを収集するには、診断設定を作成する必要があります。 設定を作成するときに、ログを有効にするストレージの種類として [BLOB] を選択します。 次に、ログ収集の対象とする操作のカテゴリを次のいずれかから指定します。

カテゴリ 説明
StorageRead オブジェクトに対する読み取り操作。
StorageWrite オブジェクトに対する書き込み操作。
StorageDelete オブジェクトに対する削除操作。

Note

Data Lake Storage Gen2 はストレージの種類として表示されません。 これは、Data Lake Storage Gen2 が BLOB ストレージで使用できる機能のセットであるためです。

診断設定の作成

このセクションでは、Azure portal、PowerShell、Azure CLI を使って診断設定を作成する方法を示します。 このセクションでは、Azure Storage に固有の手順について説明します。 診断設定を作成する方法の全般的なガイダンスについては、「Azure でプラットフォーム ログとメトリックを収集するための診断設定を作成する」を参照してください。

ヒント

また、Azure Resource Manager テンプレートを使って、またはポリシー定義を使って診断設定を作成することもできます。 ポリシー定義を使うと、作成または更新されたすべてのアカウントに対して、確実に診断設定を作成できます。

このセクションでは、テンプレートまたはポリシー定義については説明しません。

  1. Azure portal にサインインします。

  2. ストレージ アカウントに移動します。

  3. [監視] セクションで、[診断設定] をクリックします。

    portal - Diagnostics logs

  4. ログを有効にするストレージの種類として [BLOB] を選択します。

  5. [診断設定の追加] をクリックします。

    [診断設定] ページが表示されます。

    Resource logs page

  6. このページの名前のフィールドに、このリソース ログ設定の名前を入力します。 次に、ログする操作 (読み取り、書き込み、削除の各操作) と、ログの送信先を選択します。

ログをストレージ アカウントにアーカイブする

ログをストレージ アカウントにアーカイブすることを選択した場合は、ストレージ アカウントに送信されるログの量に対して課金されます。 具体的な料金については、「Azure Monitor の価格」ページの「プラットフォーム ログ」セクションを参照してください。 この設定で監視している対象と同じストレージ アカウントにログを送信することはできません。 そのため、ログ エントリが別のログ エントリの書き込みを記述する再帰的なログになります。 ログ情報を格納するために、アカウントを作成するか、別の既存のアカウントを使う必要があります。

  1. [ストレージ アカウントへのアーカイブ] チェック ボックスをオンにし、 [構成] ボタンを選択します。

  2. [ストレージ アカウント] ドロップダウン リストで、ログのアーカイブ先とするストレージ アカウントを選択してから、[保存] ボタンを選択します。

    重要

    アイテム保持ポリシーを設定することはできません。 ただし、ライフサイクル管理ポリシーを定義することで、ログ コンテナーのアイテム保持ポリシーを管理できます。 方法については、「Azure Blob Storage アクセス層の自動化によるコストの最適化」を参照してください。

    Note

    ストレージ アカウントをエクスポート先として選択する前に、Azure リソース ログのアーカイブに関するページを参照して、ストレージ アカウントに関する前提条件を理解してください。

ログを Azure Event Hubs にストリーミングする

ログをイベント ハブにストリーミングすることを選択した場合は、イベント ハブに送信されるログの量に対して課金されます。 具体的な料金については、「Azure Monitor の価格」ページの「プラットフォーム ログ」セクションを参照してください。 既存のイベント ハブにアクセスする必要があります。または、この手順を完了する前に作成する必要があります。

  1. [イベント ハブへのストリーム] チェックボックスをオンにし、 [構成] ボタンを選択します。

  2. [イベント ハブを選択してください] ペインで、ログのストリーミング先とするイベン ト ハブの名前空間、名前、およびポリシー名を選択します。

  3. [保存] を選択します。

Azure Log Analytics にログを送信する

  1. [Log Analytics への送信] チェックボックスを オンにして Log Analytics ワークスペースを選択し、 [保存] ボタンを選択します。 既存の Log Analytics ワークスペースにアクセスする必要があります。または、この手順を完了する前に作成する必要があります。

重要

アイテム保持ポリシーを設定することはできません。 ただし、ワークスペース レベルで Log Analytics のデータ保有期間を管理したり、データの種類ごとに異なる保持設定を指定したりすることもできます。 方法については、「データ保有期間 の変更」を参照してください。

パートナー ソリューションに送信する

また、プラットフォームのメトリックとログを特定の Azure Monitor パートナーに送信することもできます。 最初にパートナー統合をサブスクリプションにインストールする必要があります。 構成オプションはパートナーによって異なります。 詳細については、Azure Monitor パートナー統合に関するドキュメントを参照してください。

メトリックの分析

(Azure Blob Storage を含む) すべての Azure Monitor サポート メトリックの一覧については、Azure Monitor でサポートされるメトリックに関するページを参照してください。

メトリックス エクスプローラーを使用して、他の Azure サービスのメトリックと共に Azure Storage のメトリックを分析できます。 メトリックス エクスプローラーを開くには、 [Azure Monitor] メニューの [メトリック] を選択します。 このツールの使用方法の詳細については、「Azure メトリックス エクスプローラーの概要」をご覧ください。

次の例は、アカウント レベルでトランザクションを表示する方法を示しています。

Screenshot of accessing metrics in the Azure portal

ディメンションをサポートするメトリックについては、目的のディメンション値でメトリックをフィルター処理できます。 次の例は、 [API 名] ディメンションの値を選択することで特定の操作に対するアカウント レベルのトランザクションを表示する方法を示しています。

Screenshot of accessing metrics with dimension in the Azure portal

Azure Storage でサポートされるディメンションの完全な一覧については、「メトリックのディメンション」をご覧ください。

Azure Blob Storage のメトリックは、次の名前空間にあります。

  • Microsoft.Storage/storageAccounts
  • Microsoft.Storage/storageAccounts/blobServices

コードを使ってメトリックを分析する

Azure Monitor には、メトリックの定義と値を読み取るための .NET SDK が用意されています。 サンプル コードでは、さまざまなパラメーターで SDK を使用する方法を示します。 ストレージ メトリックスについては 0.18.0-preview 以降のバージョンを使用する必要があります。

これらの例では、<resource-ID> プレースホルダーをストレージ アカウント全体または BLOB ストレージ サービスのリソース ID に置き換えます。 これらのリソース ID は、Azure portal 上のストレージ アカウントの [エンドポイント] ページで確認できます。

<subscription-ID> 変数をご自身のサブスクリプションの ID に置き換えます。 <tenant-ID><application-ID>、および <AccessKey> の値を取得する方法のガイダンスについては、「リソースにアクセスできる Azure AD アプリケーションとサービス プリンシパルをポータルで作成する」をご覧ください。

アカウント レベルのメトリック定義を一覧表示する

次の例は、アカウント レベルでメトリック定義を一覧表示する方法を示しています。

    public static async Task ListStorageMetricDefinition()
    {
        var resourceId = "<resource-ID>";
        var subscriptionId = "<subscription-ID>";
        var tenantId = "<tenant-ID>";
        var applicationId = "<application-ID>";
        var accessKey = "<AccessKey>";

        MonitorManagementClient readOnlyClient = AuthenticateWithReadOnlyClient(tenantId, applicationId, accessKey, subscriptionId).Result;
        IEnumerable<MetricDefinition> metricDefinitions = await readOnlyClient.MetricDefinitions.ListAsync(resourceUri: resourceId, cancellationToken: new CancellationToken());

        foreach (var metricDefinition in metricDefinitions)
        {
            // Enumrate metric definition:
            //    Id
            //    ResourceId
            //    Name
            //    Unit
            //    MetricAvailabilities
            //    PrimaryAggregationType
            //    Dimensions
            //    IsDimensionRequired
        }
    }

アカウント レベルのメトリック値を読み取る

次の例は、アカウント レベルで UsedCapacity データを読み取る方法を示しています。

    public static async Task ReadStorageMetricValue()
    {
        var resourceId = "<resource-ID>";
        var subscriptionId = "<subscription-ID>";
        var tenantId = "<tenant-ID>";
        var applicationId = "<application-ID>";
        var accessKey = "<AccessKey>";

        MonitorClient 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;

        Response = await readOnlyClient.Metrics.ListAsync(
            resourceUri: resourceId,
            timespan: timeSpan,
            interval: System.TimeSpan.FromHours(1),
            metricnames: "UsedCapacity",

            aggregation: "Average",
            resultType: ResultType.Data,
            cancellationToken: CancellationToken.None);

        foreach (var metric in Response.Value)
        {
            // Enumrate metric value
            //    Id
            //    Name
            //    Type
            //    Unit
            //    Timeseries
            //        - Data
            //        - Metadatavalues
        }
    }

多次元メトリック値を読み取る

多次元メトリックの場合、特定のディメンション値に対するメトリック データを読み取る必要がある場合は、メタデータ フィルターを定義する必要があります。

次の例では、多次元をサポートするメトリックについてのメトリック データを読み取る方法を示します。

    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}";
        // How to identify Tenant ID, Application ID and Access Key: https://azure.microsoft.com/documentation/articles/resource-group-create-service-principal-portal/
        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;
        // It's applicable to define meta data filter when a metric support dimension
        // More conditions can be added with the 'or' and 'and' operators, example: BlobType eq 'BlockBlob' or BlobType eq 'PageBlob'
        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)
        {
            //Enumrate metric value
            //    Id
            //    Name
            //    Type
            //    Unit
            //    Timeseries
            //        - Data
            //        - Metadatavalues
        }
    }

ログの分析

リソース ログには、ストレージ アカウント内の BLOB として、イベント データとして、またはログ分析クエリを使用してアクセスできます。

これらのログに表示されるフィールドの詳細なリファレンスについては、Azure Blob Storage 監視データのリファレンスに関するページを参照してください。

ログ エントリが作成されるのは、サービス エンドポイントに対して行われた要求がある場合に限られます。 たとえば、ストレージ アカウントの BLOB エンドポイントにはアクティビティが存在するが、テーブル エンドポイントまたはキュー エンドポイントには存在しない場合、BLOB サービスに関連したログだけが作成されます。 Azure Storage ログには、ストレージ サービスに対する要求の成功と失敗についての詳細な情報が含まれています。 この情報を使って個々の要求を監視したり、ストレージ サービスに関する問題を診断したりできます。 要求は、ベスト エフォートでログに記録されます。

認証済み要求をログに記録する

次のタイプの認証済み要求が記録されます。

  • 成功した要求
  • 失敗した要求 (タイムアウト、スロットル、ネットワーク、承認などに関する各種エラー)
  • Shared Access Signature (SAS) または OAuth を使用した要求 (失敗した要求と成功した要求を含む)
  • 分析データ ( $logs コンテナーの従来のログ データと、 $metric テーブルのクラス メトリック データ) に対する要求

BLOB ストレージ サービスそのものによる要求 (ログの作成や削除など) は記録されません。 ログに記録されるデータの完全な一覧については、ストレージのログに記録された操作とステータス メッセージに関するページと、ストレージのログの形式に関するページをご覧ください。

匿名要求をログに記録する

次のタイプの匿名要求が記録されます。

  • 成功した要求
  • サーバー エラー
  • クライアントとサーバーの両方のタイムアウト エラー
  • エラー コード 304 (変更されていません) で失敗した GET 要求

その他の失敗した匿名要求は一切記録されません。 ログに記録されるデータの完全な一覧については、ストレージのログに記録された操作とステータス メッセージに関するページと、ストレージのログの形式に関するページをご覧ください。

ストレージ アカウントのログにアクセスする

ログは、ターゲット ストレージ アカウントのコンテナーに格納された BLOB として表示されます。 データは、行区切りの JSON ペイロードとして収集され、1 つの BLOB 内に格納されます。 BLOB のこの名前は次の名前付け規則に従っています。

https://<destination-storage-account>.blob.core.windows.net/insights-logs-<storage-operation>/resourceId=/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<source-storage-account>/blobServices/default/y=<year>/m=<month>/d=<day>/h=<hour>/m=<minute>/PT1H.json

次に例を示します。

https://mylogstorageaccount.blob.core.windows.net/insights-logs-storagewrite/resourceId=/subscriptions/
208841be-a4v3-4234-9450-08b90c09f4/resourceGroups/myresourcegroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount/blobServices/default/y=2019/m=07/d=30/h=23/m=12/PT1H.json

イベント ハブのログにアクセスする

イベント ハブに送信されたログはファイルとして保存されませんが、イベント ハブでログ情報が受信されたことを確認することはできます。 Azure portal でイベント ハブに移動し、受信メッセージの数がゼロより大きいことを確認します。

Audit logs

イベント ハブに送信されるログ データのアクセスと読み取りには、セキュリティ情報とイベント管理のツールと監視ツールを使用します。 詳細については、イベント ハブに送信された監視データを処理する方法に関するページを参照してください。

Log Analytics ワークスペースのログにアクセスする

Azure Monitor ログ クエリを使用して、Log Analytics ワークスペースに送信されたログにアクセスできます。

詳細については、「Azure Monitor で Log Analytics の使用を開始する」を参照してください。

データは StorageBlobLog テーブルに格納されます。 Data Lake Storage Gen2 のログは、専用テーブルに表示されません。 この理由は Data Lake Storage Gen2 がサービスではないためです。 これは、お使いのストレージ アカウントで有効にできる機能のセットです。 これらの機能を有効にしている場合、ログは StorageBlobLog テーブルに引き続き表示されます。

サンプル Kusto クエリ

[ログ検索] バーに入力して BLOB ストレージの監視に利用できるクエリを紹介します。 これらのクエリは新しい言語で使用できます。

重要

ストレージ アカウント リソース グループ メニューから [ログ] を選択すると、クエリのスコープが現在のリソース グループに設定された状態で Log Analytics が開きます。 つまり、ログ クエリには、そのリソース グループのデータのみが含まれます。 他のリソースのデータや他の Azure サービスのデータを含むクエリを実行する場合は、Azure Monitor のメニューから [ログ] を選択します。 詳細については、「Azure Monitor Log Analytics のログ クエリのスコープと時間範囲」を参照してください。

これらのクエリを使用すると、Azure Storage アカウントの監視に役立ちます。

  • 過去 3 日間に発生した 10 件の最も一般的なエラーの一覧を表示します。

    StorageBlobLogs
    | where TimeGenerated > ago(3d) and StatusText !contains "Success"
    | summarize count() by StatusText
    | top 10 by count_ desc
    
  • 過去 3 日間で最も多く発生したエラーの原因となった上位 10 件の操作を一覧表示します。

    StorageBlobLogs
    | where TimeGenerated > ago(3d) and StatusText !contains "Success"
    | summarize count() by OperationName
    | top 10 by count_ desc
    
  • 過去 3 日間でエンドツーエンドの待機時間が最も長かった上位 10 個の操作を一覧表示します。

    StorageBlobLogs
    | where TimeGenerated > ago(3d)
    | top 10 by DurationMs desc
    | project TimeGenerated, OperationName, DurationMs, ServerLatencyMs, ClientLatencyMs = DurationMs - ServerLatencyMs
    
  • 過去 3 日間にサーバー側の調整エラーの原因となったすべての操作を一覧表示します。

    StorageBlobLogs
    | where TimeGenerated > ago(3d) and StatusText contains "ServerBusy"
    | project TimeGenerated, OperationName, StatusCode, StatusText
    
  • 過去 3 日間の匿名アクセスを含むすべての要求を一覧表示します。

    StorageBlobLogs
    | where TimeGenerated > ago(3d) and AuthenticationType == "Anonymous"
    | project TimeGenerated, OperationName, AuthenticationType, Uri
    
  • 過去 3 日間に使用された操作の円グラフを作成します。

    StorageBlobLogs
    | where TimeGenerated > ago(3d)
    | summarize count() by OperationName
    | sort by count_ desc
    | render piechart
    

機能サポート

次の表は、アカウントでのこの機能のサポートと、特定の機能を有効にした場合のサポートへの影響を示しています。

Azure Monitor のログ

ストレージ アカウントの種類 BLOB Storage (既定のサポート) Data Lake Storage Gen2 1 NFS 3.0 1 SFTP 1
Standard 汎用 v2 Yes Yes No Yes2
Premium ブロック BLOB Yes Yes No Yes2

Azure Monitor のメトリック

ストレージ アカウントの種類 BLOB Storage (既定のサポート) Data Lake Storage Gen2 1 NFS 3.0 1 SFTP 1
Standard 汎用 v2 Yes Yes Yes Yes
Premium ブロック BLOB Yes Yes2 Yes2 Yes2

1 Data Lake Storage Gen2、ネットワーク ファイル システム (NFS) 3.0 プロトコル、SSH ファイル転送プロトコル (SFTP) のサポートでは、すべて階層型名前空間が有効になっているストレージ アカウントが必要です。

2 機能のサポートはプレビュー段階です。

よく寄せられる質問

Azure Storage はマネージド ディスクまたはアンマネージド ディスクのメトリックをサポートしますか。

いいえ。 Azure Compute はディスク上のメトリックをサポートします。 詳細については、マネージド ディスクと非管理ディスクのディスクあたりのメトリックに関するページをご覧ください。

次のステップ

次のいずれかのガイドを参照します。

ガイド 説明
Azure Blob Storage コンテナーからメトリックを収集する メトリックを表示するグラフを作成します (詳細なガイダンスが含まれています)。
Azure Storage の監視、診断、トラブルシューティング ストレージ アカウントの問題 (手順のガイダンスなど) をトラブルシューティングします。
Azure Monitor Storage 分析情報を使ってストレージを監視する ストレージのパフォーマンス、容量、可用性の統合ビュー
Azure Blob Storage の監視に関するベスト プラクティス 一般的な監視とトラブルシューティングのシナリオに関するガイダンス。
Azure メトリックス エクスプローラーの概要 メトリックス エクスプローラーのツアー。
Azure Monitor の Log Analytics の概要 Log Analytics のツアー。
Azure Monitor メトリックの概要 メトリックとメトリック ディメンションの基本
Azure Monitor ログの概要 ログの基本とその収集と分析の方法
Azure Monitor のメトリックに移行する Storage Analytics のメトリックから Azure Monitor のメトリックに移行します。
Azure Blob Storage 監視データのリファレンス Azure Blob Storage で作成されるログとメトリックのリファレンス
パフォーマンスに関する問題のトラブルシューティング パフォーマンスに関する一般的な問題とそのトラブルシューティング方法に関するガイダンス。
可用性に関する問題のトラブルシューティング 可用性に関する一般的な問題とそのトラブルシューティング方法に関するガイダンス。
クライアント アプリケーション エラーのトラブルシューティング クライアントの接続に関する一般的な問題とそのトラブルシューティング方法。