Azure Monitor活动日志记录对Azure资源的管理操作。 例如,它们记录创建虚拟机、更改密钥保管库访问策略或资源管理器部署错误等操作。 这些管理操作也称为 控制平面 操作。 使用活动日志查看或审核此信息,或创建警报,以在事件发生时主动通知。
小窍门
如果部署操作错误将你定向到本文,请参阅 排查常见 Azure 部署错误。
活动日志条目
默认情况下,Azure Monitor收集活动日志条目,无需配置。 系统生成这些条目,不能更改或删除它们。 条目通常是由更改(创建、更新、删除操作)或正在启动的操作导致的。 活动日志通常不会捕获读取操作。 活动日志条目通常用于在 事件发生后的 3 到 20 分钟内进行分析和警报。 有关活动日志类别的说明,请参阅Azure活动日志事件架构。
保留期
Azure将活动日志事件保留 90 天,然后删除它们。 在此期间,无论数量多少,您都不会为条目付费。 有关更多功能(例如更长的保留期),请创建诊断设置,并根据需求 将条目路由到另一个位置 。 延长保留期的最常见原因之一是保留 资源创建者信息,该信息仅在活动日志中可用。
查看和检索活动日志
可以从Azure门户中的大多数菜单访问活动日志。 从你打开的菜单将决定其初始筛选条件。 如果从 “监视 ”菜单打开它,则唯一的筛选器位于订阅上。 如果从资源的菜单中打开它,筛选器将设置为该资源。 始终可以更改筛选器以查看所有其他条目。 选择 “添加筛选器 ”以向筛选器添加更多属性。
还可以使用以下方法访问活动日志事件:
- 使用 Get-AzLog cmdlet 从 PowerShell 检索活动日志。 请参阅 Azure Monitor PowerShell 示例。
- 使用 az monitor activity-log 从 CLI 检索活动日志。 请参阅 Azure Monitor CLI 示例。
- 使用 Azure Monitor REST API 从 REST 客户端检索活动日志。
使用 REST API 检索活动日志事件
使用 活动日志 REST API 以编程方式查询活动日志事件。 包括参数 $filter ,并且它必须至少包含一个 eventTimestamp 起始值。 默认情况下,活动日志将事件保留 90 天。 请确保时间范围的开始和结束时间都属于该 90 天时段,除非配置更长的保留期。
支持的 $filter 模式 |
详细信息 |
|---|---|
| 具有时间范围的默认订阅 | $filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}' |
| 资源组 | $filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}' and resourceGroupName eq '{resourceGroupName}' |
| 特定资源 | $filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}' and resourceUri eq '{resourceURI}' |
| 资源提供程序 | $filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}' and resourceProvider eq '{resourceProviderName}' |
| 相关 ID | $filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}' and correlationId eq '{correlationID}' |
使用$filter列出资源组的活动日志事件
将 resourceGroupName 添加到筛选器中,以将结果范围限定为特定的资源组。
az rest --method get \
--uri "/subscriptions/{subscriptionId}/providers/Microsoft.Insights/eventtypes/management/values?api-version=2015-04-01&\$filter=eventTimestamp ge '2026-02-01T00:00:00Z' and eventTimestamp le '2026-02-28T23:59:59Z' and resourceGroupName eq '{resourceGroupName}'"
返回特定活动日志属性
$select使用参数仅返回指定属性,从而减少响应有效负载大小。 该值是一个以逗号分隔的属性名称列表。 有关详细信息,请参阅 活动日志架构属性说明。
Azure CLI能够动态计算时间范围,因此该示例显示当前日期的 30 天窗口。
startDate=$(date -u -d '30 days ago' '+%Y-%m-%dT00:00:00Z')
endDate=$(date -u '+%Y-%m-%dT23:59:59Z')
az rest --method get \
--uri "/subscriptions/{subscriptionId}/providers/Microsoft.Insights/eventtypes/management/values?api-version=2015-04-01&\$filter=eventTimestamp ge '$startDate' and eventTimestamp le '$endDate'&\$select=eventName,operationName,status,eventTimestamp,correlationId,submissionTimestamp,level"
列出订阅的活动日志事件
订阅级别事件捕获由资源提供程序直接创建的事件。 租户级别和管理组级别的事件仅捕获这些层次结构中的 Azure 资源管理器 事件。
以下示例在特定时间范围内检索订阅的活动日志事件。 Azure CLI能够动态计算时间范围,因此该示例显示当前日期的 14 天窗口。
若要列出活动日志事件,请使用 az rest Azure CLI 命令调用Azure 资源管理器 REST API:
startDate=$(date -u -d '14 days ago' '+%Y-%m-%dT00:00:00Z')
endDate=$(date -u '+%Y-%m-%dT23:59:59Z')
az rest --method get \
--uri "/subscriptions/{subscriptionId}/providers/Microsoft.Insights/eventtypes/management/values?api-version=2015-04-01&\$filter=eventTimestamp ge '$startDate' and eventTimestamp le '$endDate'"
列出租户级活动日志事件
租户级活动日志通常具有有限的条目,但可能包括管理组或订阅创建等重要事件。 这些事件独立于订阅级活动日志,但可能包含重复的资源管理事件。 使用 租户活动日志 REST API 检索租户级事件。
若要列出租户级活动日志事件,请使用 az rest Azure CLI 命令:
az rest --method get \
--uri "/providers/Microsoft.Insights/eventtypes/management/values?api-version=2015-04-01&\$filter=eventTimestamp ge '2026-01-15T00:00:00Z' and eventTimestamp le '2026-03-29T23:59:59Z'"
列出管理组级活动日志事件
管理组级活动日志捕获特定管理组范围内的事件,例如策略分配和管理组成员身份更改。
若要列出管理组级活动日志事件,请使用 az rest Azure CLI 命令:
az rest --method get \
--uri "/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Insights/eventtypes/management/values?api-version=2017-03-01-preview&\$filter=eventTimestamp ge '2026-03-01T00:00:00Z' and eventTimestamp le '2026-03-29T23:59:59Z'"
下表介绍了上述示例中使用的参数。
| 参数 | 说明 |
|---|---|
{subscriptionId} |
Azure订阅的 ID。 |
{resourceGroupName} |
资源组的名称。 |
{managementGroupId} |
管理组的 ID。 |
eventTimestamp ge / le |
ISO 8601 格式的时间范围的开始和结束。 开始日期不能超过当前日期的 90 天,除非为更长的时间段配置保留期。 |
查看更改历史记录
对于某些事件,可以查看更改历史记录,其中显示了在该事件时间发生的更改。 从要更深入地查看的活动日志中选择一个事件。 选择变更记录选项卡,查看操作前30分钟和之后对资源所做的任何更改。
如果有任何更改与事件关联,门户会显示一个可选择的更改列表。 选择更改将打开 “更改历史记录 ”页。 此页面显示对资源的更改。
以下示例显示 VM 已更改大小。 该页在更改之前和更改后显示 VM 大小。
活动日志见解
活动日志分析是一个工作簿,它提供一组仪表板,用于监控订阅中资源及资源组的变动。 仪表板还显示有关哪些用户或服务在订阅中执行了活动以及活动状态的数据。
若要启用活动日志见解,请将活动日志导出到Log Analytics工作区,如 Export 活动日志中所述。 此过程将事件发送到 AzureActivity 表,该表供活动日志见解使用。
可以在订阅或资源级别打开活动日志见解。 对于订阅,请从
对于单个资源,请从资源菜单的“工作簿”部分选择“活动日志见解”。
导出活动日志
创建诊断设置,以将活动日志条目发送到其他目标,以便额外的保留时间和功能。
在 Azure 门户中,在 Azure Monitor 菜单上选择 Activity log,然后选择 Export 活动日志。 有关创建诊断设置的详细信息和其他方法,请参阅 Azure Monitor 中的诊断设置。 请确保 禁用活动日志的任何旧配置。
以下部分提供有关资源日志的每个可配置目标的详细信息。
注释
导出活动日志的旧方法是日志配置文件。 请参阅 遗留集合方法。
将活动日志发送到 Log Analytics 工作区,以获取以下功能:
活动日志没有数据引入费用。 活动日志的保留费用仅适用于超过默认保留期 90 天的时间段。 可将 保留期增加到 最多 12 年。
Log Analytics工作区中的活动日志数据存储在名为 AzureActivity 的表中。 此表的结构因 日志条目的类别而异。
例如,若要查看每个类别的活动日志记录计数,请使用以下查询:
AzureActivity
| summarize count() by CategoryValue
若要检索管理类别中的所有记录,请使用以下查询:
AzureActivity
| where CategoryValue == "Administrative"
导出管理组活动日志
为管理组创建诊断设置日志时,它会导出该管理组的所有事件,还包括层次结构中其下所有管理组的事件。 如果层次结构中的多个管理组具有诊断设置,则会收到重复事件。 只需在最高级别管理组上设置诊断设置即可捕获层次结构的所有事件。
管理组还会收集与其下任何订阅相同的许多事件。 如果订阅和管理组都具有诊断设置,则会收到重复事件。 Azure 资源管理器写入事件时包括层次结构属性,但这不是必需的字段。 Azure 资源管理器之外的资源提供程序不会对此进行填充,因此他们的事件不会向上传递到层次结构中。 因此,获取重复事件比缺少事件更好。
例如,如果您有一个包含 MG2 的 MG1,而 MG2 又包含 Subscription1,那么在 MG1 上的诊断设置将捕获 MG1、MG2 的所有活动日志事件,以及许多由 Subscription1 中的诊断设置收集的事件。 在这种情况下,MG2 不需要诊断设置,因为它只会收集重复事件。
如果你有重复的事件,请使用使用所有字段哈希标识唯一记录的查询来合并它们。 以下示例 Kusto 查询显示了在 Log Analytics 工作区中收集的日志:
AzureActivity
| extend Hash = hash(dynamic_to_json(pack_all()))
| summarize arg_max(TimeGenerated, *) by Hash
将活动日志导出到 CSV
选择 Download 作为 CSV,将活动日志导出到Azure门户中的 CSV 文件。
重要
导出大量日志条目可能需要很长时间。 若要提高性能,请减少导出的时间范围。 在 Azure 门户中,设置 Timespan 设置。
还可以使用 PowerShell 或 Azure CLI 将活动日志导出到 CSV 文件,如以下示例所示。
az monitor activity-log list --start-time "2024-03-01T00:00:00Z" --end-time "2024-03-15T23:59:59Z" --max-items 1000 > activitylog.json
以下示例 PowerShell 脚本按一小时间隔将活动日志导出到 CSV 文件,每个文件都保存到单独的文件中。
# Parameters
$subscriptionId = "Subscription ID here" # Replace with your subscription ID
$startTime = [datetime]"2025-05-08T00:00:00" # Adjust as needed
$endTime = [datetime]"2025-05-08T12:00:00" # Adjust as needed
$outputFolder = "\Logs" # Change path as needed
# Ensure output folder exists
if (-not (Test-Path $outputFolder)) {
New-Item -Path $outputFolder -ItemType Directory
}
# Set subscription context
Set-AzContext -SubscriptionId $subscriptionId
# Loop through 1-hour intervals
$currentStart = $startTime
while ($currentStart -lt $endTime) {
$currentEnd = $currentStart.AddHours(1)
$timestamp = $currentStart.ToString("yyyyMMdd-HHmm")
$csvFile = Join-Path $outputFolder "ActivityLog_$timestamp.csv"
Write-Host "Fetching logs from $currentStart to $currentEnd..."
Get-AzActivityLog -StartTime $currentStart -EndTime $currentEnd |
Export-Csv -Path $csvFile -NoTypeInformation
$currentStart = $currentEnd
}
Write-Host "Export completed. Files saved to $outputFolder."
识别资源创建
使用活动日志了解系统何时创建资源以及创建资源的人员。 活动日志是存储资源创建者的唯一位置。 由于活动日志默认仅保留 90 天的数据,因此必须将日志导出到允许延长保留期的位置,例如Log Analytics工作区。 然后,通过查询 AzureActivity 表查找资源的创建者。 数据会按照您在 此表的保留期中指定的时间保留。