Azure Monitor アクティビティ ログ

Azure Monitor アクティビティ ログは、Azure のプラットフォーム ログであり、サブスクリプション レベルのイベントの分析情報を提供します。 このアクティビティ ログには、リソースが変更されたときや仮想マシンが起動されたときなどの情報が含まれます。 Azure portal でアクティビティ ログを表示したり、PowerShell と Azure CLI を使用してエントリを取得したりすることができます。 この記事では、アクティビティ ログを表示して、さまざまな宛先に送信する方法について説明します。

その他の機能については、次の理由により、これらの場所の 1 つまたは複数にアクティビティ ログを送信するための診断設定を作成してください。

  • より複雑なクエリやアラートを作成したり、データ保持期間を延長 (最長 2 年) したりするために、Azure Monitor ログに送信するため。
  • Azure の外部に転送するために、Azure Event Hubs に送信するため。
  • より価格を抑えて、長期的なアーカイブのために、Azure Storage に送信するため。

診断設定の作成方法の詳細については、「プラットフォーム ログとメトリックを異なる宛先に送信するための診断設定を作成する」を参照してください。

Note

  • アクティビティ ログのエントリはシステムによって生成されるため、変更または削除することはできません。
  • アクティビティ ログのエントリは、仮想マシンの再起動などのコントロール プレーンの変更を表しており、関連のないエントリは Azure リソース ログに書き込まれる必要があります

保持期間

アクティビティログイベントは、Azure で 90 日間保持された後、削除されます。 ボリュームに関係なく、この期間中のエントリに対して料金は発生しません。 保持期間の延長など、より多くの機能を使用するには、診断設定を作成し、必要に応じてエントリを別の場所にルーティングします。 条件については、前のセクションを参照してください。

アクティビティ ログを表示する

アクティビティ ログには、Azure portal のほとんどのメニューからアクセスできます。 開くメニューによって、最初のフィルターが決まります。 [モニター] メニューから開くと、そのサブスクリプションに対するフィルターだけになります。 リソースのメニューから開くと、フィルターはそのリソースに対して設定されます。 いつでもフィルターを変更して、他のすべてのエントリを表示できます。 フィルターにプロパティを追加するには、[フィルターの追加] を選択します。

アクティビティ ログを示すスクリーンショット。

アクティビティ ログのカテゴリの説明については、「Azure アクティビティ ログのイベント スキーマ」を参照してください。

アクティビティ ログをダウンロードする

[CSV 形式でダウンロード] を選択し、現在のビューのイベントをダウンロードします。

アクティビティ ログのダウンロードを示すスクリーンショット。

変更履歴を表示する

イベントによっては、変更履歴を表示することができます。そこには、そのイベントの間に発生した変更が表示されます。 アクティビティ ログから、詳細を確認したいイベントを選びます。 [変更履歴 (プレビュー)] タブを選択し、そのイベントに関連する変更を表示します。

イベントの変更履歴一覧を示すスクリーンショット。

イベントに関連する変更がある場合は、表示される変更のリストから選ぶことができます。 変更を選ぶと、[変更履歴 (プレビュー)] ページが開きます。 このページには、リソースに対する変更が表示されます。 次の例では、VM のサイズが変更されていることがわかります。 このページには、変更前と変更後の VM サイズが表示されます。 変更履歴の詳細については、「リソースの変更の取得」を参照してください。

差異を表示する変更履歴ページを示すスクリーンショット。

アクティビティ ログ イベントを取得する他の方法

次の方法を使用して、アクティビティ ログ イベントにアクセスすることもできます。

Log Analytics ワークスペースに送信する

アクティビティ ログを Log Analytics ワークスペースに送信して、Azure Monitor ログの機能を有効にします。この機能を使用すると、次のことができます。

  • アクティビティ ログ データを、Azure Monitor によって収集されたその他の監視データと関連付けることができます。
  • 複数の Azure サブスクリプションおよびテナントのログ エントリを 1 つの場所に統合して、まとめて分析できるようにします。
  • ログ クエリを使用して複雑な分析を実行し、アクティビティ ログのエントリから詳細な分析情報を取得できます。
  • より複雑なアラート ロジックに、アクティビティ エントリでログ アラートを使用できます。
  • アクティビティ ログ エントリを、アクティビティ ログの保持期間よりも長く保存できます。
  • Log Analytics ワークスペースに格納されているアクティビティ ログ データのインジェストや保持の料金が発生ません。
  • Log Analytics での既定の保持期間は 90 日です。

アクティビティ ログを Log Analytics ワークスペースに送信するには、[アクティビティ ログのエクスポート] を選びます。

Azure アクティビティ ログのエクスポートを示すスクリーンショット。

任意の 1 つのサブスクリプションから最大 5 つのワークスペースに、アクティビティ ログを送信できます。

Log Analytics ワークスペースでは、アクティビティ ログのデータは AzureActivity という名前のテーブルに格納されます。このテーブルは、Log Analyticsログ クエリで取得できます。 このテーブルの構造はログ エントリのカテゴリによって異なります。 テーブルのプロパティの説明については、Azure Monitor データ リファレンスのページを参照してください。

たとえば、各カテゴリのアクティビティ ログ レコードの数を表示するには、次のクエリを使用します。

AzureActivity
| summarize count() by CategoryValue

管理カテゴリのすべてのレコードを取得するには、次のクエリを使用します。

AzureActivity
| where CategoryValue == "Administrative"

Azure Event Hubs に送信する

たとえば、サードパーティの SIEM や他のログ分析ソリューションなど、Azure の外部にエントリを送信するには、アクティビティ ログを Azure Event Hubs に送信します。 イベント ハブからのアクティビティ ログ イベントは、各ペイロードにレコードを格納する records 要素で JSON 形式で使用されます。 スキーマはカテゴリによって異なり、「Azure アクティビティ ログのイベント スキーマ」で説明されています。

次のサンプル出力データは、アクティビティ ログのイベント ハブからのものです。

{
    "records": [
        {
            "time": "2019-01-21T22:14:26.9792776Z",
            "resourceId": "/subscriptions/s1/resourceGroups/MSSupportGroup/providers/microsoft.support/supporttickets/115012112305841",
            "operationName": "microsoft.support/supporttickets/write",
            "category": "Write",
            "resultType": "Success",
            "resultSignature": "Succeeded.Created",
            "durationMs": 2826,
            "callerIpAddress": "111.111.111.11",
            "correlationId": "c776f9f4-36e5-4e0e-809b-c9b3c3fb62a8",
            "identity": {
                "authorization": {
                    "scope": "/subscriptions/s1/resourceGroups/MSSupportGroup/providers/microsoft.support/supporttickets/115012112305841",
                    "action": "microsoft.support/supporttickets/write",
                    "evidence": {
                        "role": "Subscription Admin"
                    }
                },
                "claims": {
                    "aud": "https://management.core.windows.net/",
                    "iss": "https://sts.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/",
                    "iat": "1421876371",
                    "nbf": "1421876371",
                    "exp": "1421880271",
                    "ver": "1.0",
                    "http://schemas.microsoft.com/identity/claims/tenantid": "00000000-0000-0000-0000-000000000000",
                    "http://schemas.microsoft.com/claims/authnmethodsreferences": "pwd",
                    "http://schemas.microsoft.com/identity/claims/objectidentifier": "2468adf0-8211-44e3-95xq-85137af64708",
                    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn": "admin@contoso.com",
                    "puid": "20030000801A118C",
                    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier": "9vckmEGF7zDKk1YzIY8k0t1_EAPaXoeHyPRn6f413zM",
                    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname": "John",
                    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname": "Smith",
                    "name": "John Smith",
                    "groups": "cacfe77c-e058-4712-83qw-f9b08849fd60,7f71d11d-4c41-4b23-99d2-d32ce7aa621c,31522864-0578-4ea0-9gdc-e66cc564d18c",
                    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name": " admin@contoso.com",
                    "appid": "c44b4083-3bq0-49c1-b47d-974e53cbdf3c",
                    "appidacr": "2",
                    "http://schemas.microsoft.com/identity/claims/scope": "user_impersonation",
                    "http://schemas.microsoft.com/claims/authnclassreference": "1"
                }
            },
            "level": "Information",
            "location": "global",
            "properties": {
                "statusCode": "Created",
                "serviceRequestId": "50d5cddb-8ca0-47ad-9b80-6cde2207f97c"
            }
        }
    ]
}

Azure Storage への送信

監査、静的分析、またはバックアップのためにログ データを 90 日より長く保持する場合は、アクティビティ ログを Azure Storage アカウントに送信します。 イベントを保持する必要があるのが 90 日以内の場合は、ストレージ アカウントにアーカイブを設定する必要はありません。 アクティビティ ログのイベントは Azure プラットフォームに 90 日間保持されます。

アクティビティ ログを Azure に送信すると、イベントが発生するとすぐに、ストレージ アカウント内にストレージ コンテナーが作成されます。 コンテナー内の BLOB には、次の名前付け規則が使用されます。

insights-activity-logs/resourceId=/SUBSCRIPTIONS/{subscription ID}/y={four-digit numeric year}/m={two-digit numeric month}/d={two-digit numeric day}/h={two-digit 24-hour clock hour}/m=00/PT1H.json

たとえば、特定の BLOB には次のような名前が付けられることがあります。

insights-logs-networksecuritygrouprulecounter/resourceId=/SUBSCRIPTIONS/00000000-0000-0000-0000-000000000000/y=2020/m=06/d=08/h=18/m=00/PT1H.json

各 PT1H.json BLOB には、BLOB URL で指定されている時間に受信したログ ファイルからのイベントを含む JSON オブジェクトが含まれています。 現在の時間内にイベントが発生すると、イベントは生成された時間に関係なく、受信されるたびに PT1H.json ファイルに追記されます。 BLOB は 1 時間ごとに作成されるため、URL の分を示す数値 (m=00) は常に 00 です。

各イベントは、次の形式で PT1H.json ファイルに保存されます。 この形式は、一般的な最上位スキーマを使用しますが、それ以外については、「アクティビティ ログのスキーマ」で説明されているようにカテゴリごとに固有の形式となっています。

{ "time": "2020-06-12T13:07:46.766Z", "resourceId": "/SUBSCRIPTIONS/00000000-0000-0000-0000-000000000000/RESOURCEGROUPS/MY-RESOURCE-GROUP/PROVIDERS/MICROSOFT.COMPUTE/VIRTUALMACHINES/MV-VM-01", "correlationId": "0f0cb6b4-804b-4129-b893-70aeeb63997e", "operationName": "Microsoft.Resourcehealth/healthevent/Updated/action", "level": "Information", "resultType": "Updated", "category": "ResourceHealth", "properties": {"eventCategory":"ResourceHealth","eventProperties":{"title":"This virtual machine is starting as requested by an authorized user or process. It will be online shortly.","details":"VirtualMachineStartInitiatedByControlPlane","currentHealthStatus":"Unknown","previousHealthStatus":"Unknown","type":"Downtime","cause":"UserInitiated"}}}

従来の収集方法

従来の収集方法を使用してアクティビティ ログを収集する場合は、次のように、アクティビティ ログを Log Analytics ワークスペースにエクスポートし、Data Sources - Delete API を使用してレガシ コレクションを無効にすることをお勧めします。

  1. Data Sources - List By Workspace API を使用してワークスペースに接続されているすべてのデータ ソースを一覧表示し、filter=kind='AzureActivityLog' を設定してアクティビティ ログをフィルター処理します。

    Data Sources - List By Workspace API の構成を示すスクリーンショット。

  2. API 応答から無効にする接続の名前をコピーします。

    Data Sources - List By Workspace API の出力からコピーする必要がある接続情報を示すスクリーンショット。

  3. Data Sources - Delete API を使用して、特定のリソースのアクティビティ ログの収集を停止します。

    Data Sources - Delete API の構成のスクリーンショット。

従来のログ プロファイルの管理

ログ プロファイルは、ストレージまたはイベント ハブにアクティビティ ログを送信するための従来の方法です。 この方法を使用している場合は、機能およびリソース ログとの整合性がより優れている、診断設定への移行を検討してください。

ログ プロファイルが既に存在する場合は、最初に既存のログ プロファイルを削除してから、新しいものを作成する必要があります。

  1. Get-AzLogProfile を使用して、ログ プロファイルが存在するかどうかを確認します。 ログ プロファイルが存在する場合は、Name プロパティをメモします。

  2. Name プロパティの値を使用してログ プロファイルを削除するには、Remove-AzLogProfile を使用します。

    # For example, if the log profile name is 'default'
    Remove-AzLogProfile -Name "default"
    
  3. Add-AzLogProfile を使用して、新しいログ プロファイルを作成します。

    Add-AzLogProfile -Name my_log_profile -StorageAccountId /subscriptions/s1/resourceGroups/myrg1/providers/Microsoft.Storage/storageAccounts/my_storage -serviceBusRuleId /subscriptions/s1/resourceGroups/Default-ServiceBus-EastUS/providers/Microsoft.ServiceBus/namespaces/mytestSB/authorizationrules/RootManageSharedAccessKey -Location global,westus,eastus -RetentionInDays 90 -Category Write,Delete,Action
    
    プロパティ 必須 説明
    名前 はい ログ プロファイルの名前。
    StorageAccountId いいえ アクティビティ ログの保存先となるストレージ アカウントのリソース ID。
    serviceBusRuleId いいえ イベント ハブを作成する Service Bus 名前空間の Service Bus 規則 ID。 この文字列の形式は {service bus resource ID}/authorizationrules/{key name} になります。
    Location はい アクティビティ ログ イベントを収集するリージョンのコンマ区切りリスト。
    RetentionInDays はい ストレージ アカウントにイベントを保持する日数 (1 - 365 の範囲)。 値が 0 の場合、ログは無期限に保存されます。
    カテゴリ いいえ 収集するイベント カテゴリのコンマ区切りリスト。 指定できる値は、Write、Delete、Action です。

サンプル スクリプト

このサンプル PowerShell スクリプトは、ストレージ アカウントとイベント ハブの両方にアクティビティ ログを書き込むログ プロファイルを作成します。

# Settings needed for the new log profile
$logProfileName = "default"
$locations = (Get-AzLocation).Location
$locations += "global"
$subscriptionId = "<your Azure subscription Id>"
$resourceGroupName = "<resource group name your Event Hub belongs to>"
$eventHubNamespace = "<Event Hub namespace>"

# Build the service bus rule Id from the settings above
$serviceBusRuleId = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.EventHub/namespaces/$eventHubNamespace/authorizationrules/RootManageSharedAccessKey"

# Build the Storage Account Id from the settings above
$storageAccountId = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Storage/storageAccounts/$storageAccountName"

Add-AzLogProfile -Name $logProfileName -Location $locations -StorageAccountId  $storageAccountId -ServiceBusRuleId $serviceBusRuleId

データ構造の変更

アクティビティ ログのエクスポート操作では、従来のアクティビティ ログ送信方法と同じデータが送信されますが、AzureActivity テーブルの構造が若干変更されています。

次の表の列は、更新されたスキーマで非推奨とされています。 これらは、AzureActivity にまだ存在しますが、データを持ちません。 これらの列の代わりになる列は新しいものではありませんが、非推奨の列と同じデータが格納されています。 それらは形式が異なるため、それらを使用するログ クエリの変更が必要になる場合があります。

アクティビティ ログ JSON Log Analytics の列名
(以前は非推奨)
新しい Log Analytics の列名 メモ
category カテゴリ CategoryValue
status

値は success、start、accept、failure
ActivityStatus

JSON と同じ値
ActivityStatusValue

値が succeeded、started、accepted、failed に変わる
有効な値は左記のように変更されます。
subStatus ActivitySubstatus ActivitySubstatusValue
operationName OperationName OperationNameValue REST API は操作名の値をローカライズします。 Log Analytics UI には常に英語が表示されます。
resourceProviderName ResourceProvider ResourceProviderValue

重要

場合によっては、これらの列の値がすべて大文字になることがあります。 これらの列を含むクエリがある場合は、=~ 演算子を使用して、大文字と小文字を区別しない比較を実行します。

更新されたスキーマの AzureActivity には、次の列が追加されています。

  • Authorization_d
  • Claims_d
  • Properties_d

次のステップ

各項目の詳細情報