Azure Monitor中的活动日志

Azure Monitor通过活动日志功能记录Azure资源的管理操作。 活动日志记录操作,例如创建虚拟机、更改密钥保管库访问策略或资源管理器部署错误。 这些管理操作也称为 控制平面 操作。 使用活动日志查看或审核此信息,或创建警报,以在事件发生时主动通知。

与活动日志不同,Azure资源日志捕获在资源内执行的数据平面操作。 例如,这些操作包括从密钥保管库获取机密或向数据库发出请求。 默认情况下不会收集资源日志,并且需要使用 诊断设置进行配置。

小窍门

如果部署操作错误将你定向到本文,请参阅 排查常见 Azure 部署错误

活动日志条目

默认情况下,Azure Monitor收集活动日志条目,无需配置。 系统生成这些条目,不能更改或删除它们。 条目通常是由更改(创建、更新和删除操作)或正在启动的操作导致的。 活动日志通常不会捕获读取操作。

活动日志条目通常用于在 事件发生后的 3 到 20 分钟内进行分析和警报。 有关活动日志类别的说明,请参阅Azure活动日志事件架构

保留期

Azure将活动日志事件保留 90 天,然后删除它们。 在此期间,无论数量多少,您都不会为条目付费。 有关更多功能(例如更长的保留期),请创建诊断设置,并根据需求 收集其他位置中的条目 。 延长保留期的最常见原因之一是保留 资源创建者信息,该信息仅在活动日志中可用。

查看和检索活动日志

查看订阅、资源组或单个资源的活动日志事件。 使用Azure门户,或使用 Activity Log REST API 以编程方式查询它们。

Azure 门户从大多数服务菜单中提供活动日志窗格。 其中每个区域还支持使用 REST 或通过特定的Azure CLI和Azure PowerShell命令进行编程访问。

指定要检索的事件的时间间隔。 若要使用 REST API 检索事件,必须包含 $filter 参数以及至少一个 eventTimestamp 起始值。 默认情况下,活动日志将事件保留 90 天。 确保时间范围的开始和结束时间都位于该 90 天时段内。

活动日志访问场景

以下各节演示了通过 Azure 门户访问和检索活动日志事件的不同方法,以及使用 Azure CLI、Azure PowerShell 和 REST API 以编程方式访问和检索活动日志事件。

  • Azure门户示例提供有关该视图中预期事件类型的额外上下文。

  • Azure CLI示例突出显示通过 az monitor activity-log list 命令提供的特定命令。

  • Azure PowerShell 示例突出显示通过 Get-AzActivityLog 命令提供的特定 cmdlet。

  • REST API 示例演示如何通过$filter 使用所需的参数来检索事件。 这些示例还演示如何使用 Prefer 标头显式设置客户端的超时时间,以匹配活动日志 REST API 的最长超时期限 75 秒。

    支持的 $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}'

列出订阅的活动日志事件

订阅级别事件捕获由资源提供程序直接创建的事件,是列出活动日志事件的默认范围。 租户级别和管理组级别的事件仅捕获这些层次结构中的 Azure 资源管理器 事件。 这些更高级别的范围不包括由Azure 资源管理器操作外部的资源提供程序直接生成的事件。

以下示例在特定时间范围内检索订阅的活动日志事件。

从中打开 活动日志 的菜单确定其初始筛选器。 如果从 “监视 ”菜单打开它,则默认选择的唯一筛选器是订阅。 这与从 订阅> 中选择订阅 >活动日志打开它相同。

显示活动日志的屏幕截图。

列出资源组的活动日志事件

resourceGroupName 添加到 $filter,以将 Azure Monitor 活动日志结果的范围限定为特定的资源组。

从中打开 活动日志 的菜单确定其初始筛选器。 如果从资源的菜单中打开它,筛选器将设置为该资源。 选择 “添加筛选器 ”以向筛选器添加更多属性。 下面是可在门户中筛选的其他属性:

  • Resource - 属于Azure解决方案的项,例如数据库或虚拟机。
  • 资源类型 - 资源 所属的类别,例如虚拟机、Web 应用或数据库。
  • Operation - 影响Azure 资源管理器资源的操作或命令,例如创建、删除和写入。
  • 事件发起者 - 按启动事件的标识筛选事件。
  • 事件类别 - 筛选特定操作的事件类型。

返回特定活动日志属性

使用参数仅返回指定属性,从而减少响应有效负载大小。 有关详细信息,请参阅 活动日志架构属性说明

Azure门户不提供直接限制从活动日志事件返回的属性的方法。 若要减少查看的数据量,请使用“活动日志”边栏选项卡中的“编辑列”选项选择门户视图中显示哪些列。

列出租户级活动日志事件

租户级活动日志事件通常具有有限的条目,但可能包括管理组或订阅创建等重要事件。 这些事件独立于订阅级活动日志事件,但可能包含重复的资源管理事件。

在这一范围内查询使用的 REST API 与订阅级活动日志事件 API 不同。 Azure CLI和Azure PowerShell不提供专用命令。

在 Azure 门户中转到 Monitor>Activity log。 更改 “活动 ”下拉菜单,然后选择“ 目录活动”。

此截图显示 Azure 门户中活动日志页中选中的“目录活动”选项。

列出管理组级活动日志事件

管理组级活动日志的事件捕获针对特定管理组的事件,例如政策分配和管理组成员身份更改。

若要查看Azure门户中的管理组级活动日志事件,请转到 Management 组>选择管理组>活动日志

&显示 Azure 门户中管理组的活动日志边栏选项卡的屏幕截图。

下表介绍了上述示例中使用的参数。

参数 说明
{subscriptionId} Azure订阅的 ID。
{resourceGroupName} 资源组的名称。
{managementGroupId} 管理组的 ID。
eventTimestamp ge / le ISO 8601 格式的时间范围的开始和结束。 开始日期不能超过当前日期的 90 天,除非为更长的时间段配置保留期。

活动日志见解

活动日志洞察是一个 Azure Monitor 工作簿,它提供一组仪表板,用于监视订阅中资源和资源组的更改。 仪表板还显示有关哪些用户或服务在订阅中执行了活动以及活动状态的数据。

若要启用活动日志见解,请将活动日志导出到Log Analytics工作区,如 Export 活动日志中所述。 此过程将事件发送到 AzureActivity 表,该表供活动日志见解使用。

显示活动日志见解仪表板的屏幕截图。

可以在订阅或资源级别打开活动日志见解。 对于订阅,请从“工作簿”部分选择“活动日志见解”并在“监视器”菜单中查看。

显示如何在规模层面查找和打开活动日志见解工作簿的屏幕截图。

对于单个资源,请从资源菜单的“工作簿”部分选择“活动日志见解”。

显示如何在资源级别查找和打开活动日志见解工作簿的屏幕截图。

导出活动日志

创建诊断设置,以将活动日志条目发送到其他目标,以便额外的保留时间和功能。

显示活动日志、资源日志和平台指标集合的关系图。

在 Azure 门户中,在 Azure Monitor 菜单上选择 Activity log,然后选择 Export 活动日志。 有关创建诊断设置的详细信息和其他方法,请参阅 Azure Monitor 中的诊断设置。 请确保 禁用活动日志的任何旧配置

截图显示了 Azure Monitor 菜单,其中选择了活动日志,并在 Monitor-Activity 日志菜单栏中突出显示了导出活动日志选项。

以下部分提供有关资源日志的每个可配置目标的详细信息。

注释

导出活动日志的旧方法是日志配置文件。 请参阅 遗留集合方法

将活动日志发送到 Log Analytics 工作区,以获取以下功能:

活动日志没有数据引入费用。 活动日志的保留费用仅适用于超过默认保留期 90 天的时间段。 可将 保留期增加到 最多 12 年。

Log Analytics工作区中的活动日志数据存储在名为 AzureActivity 的表中。 此表的结构因 日志条目的类别而异。

例如,若要查看每个类别的活动日志记录计数,请使用以下查询:

AzureActivity
| summarize count() by CategoryValue

若要检索管理类别中的所有记录,请使用以下查询:

AzureActivity
| where CategoryValue == "Administrative"

重要

在某些情况下,字段中 AzureActivity 的值可能与其他等效值不同。 查询AzureActivity的数据时,使用不区分大小写的运算符进行字符串比较,或使用标量函数在进行任何比较之前将字段强制转换为统一大小写。 例如,使用 tolower() 函数让字段始终为小写,或者在执行字符串比较时使用 =~ 运算符

导出管理组活动日志

为管理组创建诊断设置时,Azure Monitor将导出该管理组及其层次结构中的所有子管理组的活动日志事件。 如果层次结构中的多个管理组具有诊断设置,则会收到重复事件。 只需在最高级别管理组上设置诊断设置即可捕获层次结构的所有事件。

管理组还会收集与其下任何订阅相同的许多事件。 如果订阅和管理组都具有诊断设置,则会收到重复事件。 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 门户活动日志中“下载为 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 表查找资源的创建者。 数据会按照您在 此表的保留期中指定的时间保留。