📈

Log Analytics ワークスペースのログを削除 (Delete Data API)

に公開

はじめに

Log Analytics ワークスペースの特定のログを削除するデータ削除 API が GA になりました。
もともと Purge API と呼ばれる削除用の API があったのですが、今回のデータ削除 API の特徴としては以下になります。

  • 実際にデータを物理削除せず「削除済み」とタグ付けする仕組みを採用
  • そのため物理的にデータを削除する Purge API よりも短時間で処理
  • 物理的な削除が要求されるケース (GDPR 関連など) には適さない
  • タグ付けする仕組みとはいえ、一度実行すると元には戻せない
  • データ削除は、データ保持に関する請求に影響を与えない (=本 API で削除処理しても対象ログは継続して保持料金は課金されると理解)
    https://learn.microsoft.com/ja-jp/azure/azure-monitor/logs/delete-log-data

アクセス許可

Microsoft.OperationalInsights/workspaces/tables/deleteData/action を含むロールが必要です。共同作成者などには含まれています。

PowerShell スクリプト

Azure ポータルでは機能が提供されていないため、Azure PowerShell の Invoke-AzRestMethod から API を実行します。

# 必要な変数の設定
$subscriptionId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$resourcegroupName = "myrg"
$workspaceName = "mylaws"
$tableName = "Heartbeat"  # 削除するログを含むテーブル

# Azure へのサインイン
Connect-AzAccount -subscription $subscriptionId

# データ消去用の uri 作成
$uri = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.OperationalInsights/workspaces/$workspaceName/tables/$tableName/deleteData?api-version=2023-09-01"

# フィルタ設定 (AND 条件で複数指定可能)
$filters = @{
    filters = @(
        @{
            column = "TimeGenerated"
            operator = "<"
            value = "2025-03-01T00:00:00"
        },
        @{
            column = "Resource"
            operator = "=="
            value = "myvm"
        }
    )
} | ConvertTo-Json

# API 実行
$response = Invoke-AzRestMethod -Path $uri -Method POST -Payload $filters

# 実行ステータス確認用 URI の取得
$checkuri = $response.Headers | Where-Object { $_.Key -eq "Azure-AsyncOperation" } | Select-Object -ExpandProperty Value
$checkuri = $checkuri -replace "https://management.azure.com", ""

# 結果の確認
Invoke-AzRestMethod -Path $checkuri -Method GET

実行結果

実行前のログは以下のようになっています。

ログ件数と BilledSize は以下です。

以下のように Heartbeat テーブルで 2025/3/1 より前の vmcusadsv01 のログを削除します。

実行後、結果を確認する API を実行すると以下のように表示されます。以下のように Completed と表示されれば完了しています。

以下のように 2 月分のログが消えていることが分かります。

件数と BilledSize も表示できるログ件数が前提になるので減っているように見えます。が、課金には影響しないという話なので、実コストの容量と差異が出る可能性があるのが懸念点かと思います。

補足: Purge API

以下を参考に対象ログに対して Purge API も実行してみます。
https://jpazmon-integ.github.io/blog/LogAnalytics/LogAnalyticsWorkspacePurge/

以下のように実行できましたが、削除済みタグがついたログが物理的に消えているのかは分かりません。。。のでサポート リクエストで問い合わせて確認が必要かと思います。

Microsoft (有志)

Discussion