使用“删除数据 API”从 Log Analytics 工作区中删除数据

使用“删除数据 API”可以删除敏感数据、个人、损坏或错误的日志条目等数据。

本文介绍如何通过调用“删除数据 API”从 Log Analytics 工作区中的特定表删除日志条目。

删除数据 API 的工作原理

删除数据 API 非常适合对单个记录进行计划外删除。 例如,当你发现损坏的遥测数据引入到工作区时,你希望防止它扭曲查询结果。 删除数据 API 会将符合指定筛选条件的记录标记为已删除,而无需从存储中实际删除这些记录。

若要指定要删除的表的行,请在 API 调用的正文中发送一个或多个筛选器。

“删除”过程是最终的且不可逆的。 因此,在调用 API 之前,请在工作区中使用 Kusto 查询语言(KQL)where 运算符运行查询,以检查筛选器是否生成了预期结果。

例如,若要基于AzureMetrics值从TimeGenerated表中删除数据:

  • 可以在 API 调用的正文中发送此筛选器:

    {
      "filters": [
        {
          "column": "TimeGenerated",
          "operator": "==",
          "value": "2024-09-23T00:00:00"
        }
      ]
    }
    
  • 通过在 Log Analytics 工作区中运行此查询,检查筛选器是否返回要删除的条目:

    AzureMetrics
    | where TimeGenerated == "2024-09-23T00:00:00"
    

删除数据请求是异步的,通常在几分钟内完成。 在极端情况下,请求最多可以排队五天。

所需的权限

行动 所需的权限
从 Log Analytics 工作区中的表中删除数据 对 Log Analytics 工作区的 Microsoft.OperationalInsights/workspaces/tables/deleteData/action 权限,例如,Log Analytics 参与者内置角色所提供的权限

注释

“删除数据”操作不会影响保留费用。 保留费用受工作区中配置的保持期管理。

注意事项

  • 在单个 Log Analytics 工作区中,每小时最多可以提交 10 个删除数据请求。
  • 删除数据 API 对 Analytics 计划中的数据进行操作。 若要从包含基本计划的表中删除数据,请将计划更改为 Analytics,然后删除数据。 该辅助计划不被支持。

调用“删除数据 API”以从特定表中删除数据

若要从表中删除行,请在正文中使用命令并添加一个或多个筛选条件。 此示例对 TimeGenerated 列和 Resource 列进行筛选。

以下Azure CLI示例使用 az rest 调用 Tables - Delete Data REST API 操作。

# Set variables
resourceGroupName="<ResourceGroupName>"
workspaceName="<WorkspaceName>"
tableName="<TableName>"
apiVersion="<ApiVersion>"

# Get the subscription ID from the current Azure CLI context
subscriptionId=$(az account show --query id --output tsv)

# Build request URL
apiEndpoint="https://management.chinacloudapi.cn"
path="/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName"
provider="Microsoft.OperationalInsights/workspaces/$workspaceName/tables/$tableName"
queryString="?api-version=$apiVersion"
url="$apiEndpoint$path/providers/$provider/deleteData$queryString"

# Delete the data
az rest --method post --url "$url" --body @body.json

在运行该命令的目录中,将筛选器保存为 body.json

{
  "filters": [
    {
      "column": "TimeGenerated",
      "operator": "==",
      "value": "2024-09-23T00:00:00"
    },
    {
      "column": "Resource",
      "operator": "==",
      "value": "VM-1"
    }
  ]
}

az rest 不返回响应标头,因此无法提供 Azure-AsyncOperation URL。 若要跟踪操作,请使用Azure PowerShell选项卡。

筛选器参数

名称 DESCRIPTION
column 要对其应用筛选器的目标表中的列的名称。
operator 支持的运算符为===~inin~>>=<<=between
value 要筛选依据的值,采用受支持的格式。 该值可以是特定的日期、字符串或其他数据类型,具体取决于列。

反应

az rest 不返回任何输出。 202 响应表示已接受请求。

响应 DESCRIPTION
202 (已接受) 异步请求已成功接收。 若要检查操作是成功还是失败,请使用响应标头中提供的 Azure-AsyncOperation URL。
其他状态代码 描述请求被拒绝的原因的错误响应,例如,当目标表使用辅助计划时。

Important

202 响应表示已接受请求,而不是删除成功。 202 也接受无效筛选器,之后会失败,因此请始终检查操作状态。 失败的操作会返回 "status": "Failed",以及一个描述原因的 error 对象。

检查删除数据操作和状态

可以通过 Azure 活动日志跟踪工作区中的数据删除活动。 在Azure门户中的“Log Analytics工作区”菜单中,选择“活动日志”,并从log analytics工作区事件中找到“删除数据”。 选择一个事件,然后以 JSON 格式打开事件,以获取详细信息,例如调用方、目标表和操作状态。

活动日志事件不包括已删除的记录数。 若要检查作的状态并查看已删除的记录数,请使用响应标头中提供的 URL 发送 GET 请求 Azure-AsyncOperation

以下Azure CLI示例使用 az rest 调用 Operation Statuses - Get REST API 操作。

# Set variables
region="<Region>"
operationId="<OperationId>"
apiVersion="<ApiVersion>"

# Get the subscription ID from the current Azure CLI context
subscriptionId=$(az account show --query id --output tsv)

# Build request URL
apiEndpoint="https://management.chinacloudapi.cn"
path="/subscriptions/$subscriptionId"
provider="Microsoft.OperationalInsights/locations/$region"
queryString="?api-version=$apiVersion"
url="$apiEndpoint$path/providers/$provider/operationstatuses/$operationId$queryString"

# Get the operation status
az rest --method get --url "$url"

反应

{
  "endTime": "2024-11-04T09:36:49.0252644Z",
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.OperationalInsights/locations/chinanorth/operationstatuses/00000000-0000-0000-0000-000000001234",
  "name": "00000000-0000-0000-0000-000000001234",
  "properties": {
    "RecordCount": 234812,
    "Status": "Completed"
  },
  "startTime": "2024-11-04T09:31:41.689659Z",
  "status": "Succeeded"
}

有关详细信息,请参阅 跟踪异步 Azure 操作

后续步骤

学习如何做到: