Azure Monitor通过活动日志功能记录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 调用访问和检索活动日志事件的不同方法的常见方案:
Azure门户示例提供有关该视图中预期事件类型的额外上下文。
Azure CLI示例突出显示通过 az monitor activity-log list 命令提供的特定命令。
Azure PowerShell 示例重点介绍了通过 Get-AzActivityLog cmdlet 可用的特定 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 资源管理器操作外部的资源提供程序直接生成的事件。
以下示例在特定时间范围内检索订阅的活动日志事件。
从中打开 活动日志 的菜单确定其初始筛选器。 如果从 “监视 ”菜单打开它,则默认选择的唯一筛选器是订阅。 这与从 订阅> 中选择订阅 >活动日志打开它相同。
使用 az monitor activity-log list Azure CLI 命令检索指定时间范围内订阅的活动日志事件。 默认情况下,此命令检索当前在Azure CLI上下文中设置的订阅的事件。 若要显式指定订阅,请使用 --subscription 参数,如以下示例所示。
显式时间范围:
Azure CLI使用 --start-time 和 --end-time 支持与 REST 相同的显式时间范围:
subscriptionId="aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
startTime="2026-04-01T00:00:00Z"
endTime="2026-04-14T23:59:59Z"
az monitor activity-log list \
--subscription "$subscriptionId" \
--start-time "$startTime" \
--end-time "$endTime"
相对时间范围:
Azure CLI 还支持使用 --offset 指定相对时间范围。 例如, --offset 14d 返回过去 14 天内的事件:
subscriptionId="aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
offset="14d"
az monitor activity-log list \
--subscription "$subscriptionId" \
--offset "$offset"
注释
Azure CLI命令使用当前 CLI 上下文中的Azure 资源管理器终结点,因此无需在命令语法中指定 management.azure.com。
Azure PowerShell提供 Get-AzActivityLog cmdlet,以检索指定时间范围内的订阅的活动日志事件。
显式时间范围:
Azure PowerShell支持使用 StartTime 和 EndTime 指定确切的时间范围,类似于 REST:
$subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$startTime = [datetime]"2026-04-01T00:00:00Z"
$endTime = [datetime]"2026-04-14T23:59:59Z"
Set-AzContext -Subscription $subscriptionId
$getAzActivityLogParams = @{
StartTime = $startTime
EndTime = $endTime
}
Get-AzActivityLog @getAzActivityLogParams
相对时间范围:
Azure PowerShell还支持使用 Get-Date 和 StartTime 的 EndTime 表达式查询相对时间范围。 以下示例返回过去 14 天内的事件,该事件在命令运行时结束:
$subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$lookbackDays = 14
Set-AzContext -Subscription $subscriptionId
$getAzActivityLogParams = @{
StartTime = (Get-Date).AddDays(-$lookbackDays)
EndTime = Get-Date
}
Get-AzActivityLog @getAzActivityLogParams
注释
Azure PowerShell cmdlet 使用当前 Az 上下文中的Azure 资源管理器终结点,因此无需在 cmdlet 语法中指定 management.azure.com。
若要列出活动日志事件,请使用此GET活动日志 REST API 请求。
GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Insights/eventtypes/management/values?api-version={apiVersion}&$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}'
列出资源组的活动日志事件
将 resourceGroupName 添加到 $filter,以将 Azure Monitor 活动日志结果的范围限定为特定的资源组。
从中打开 活动日志 的菜单确定其初始筛选器。 如果从某个资源的菜单打开它,则筛选器将设置为该资源。 选择 “添加筛选器 ”以向筛选器添加更多属性。 下面是可在门户中筛选的其他属性:
-
Resource - 属于Azure解决方案的项,例如数据库或虚拟机。
-
资源类型 – 资源 所属的类别,例如虚拟机、Web 应用或数据库。
-
Operation - 影响Azure 资源管理器资源的操作或命令,例如创建、删除和写入。
-
事件启动者 – 按启动事件的标识筛选事件。
-
事件类别 – 筛选特定操作的事件类型。
注释
Prefer: wait=75的 REST 标头在此操作的 Azure CLI 命令中没有直接等效项。 此命令直接发出查询并返回匹配的活动日志记录。
使用 az monitor activity-log list 命令检索范围限定为资源组的活动日志事件。 特定的Azure CLI命令可降低等效 REST API 调用的复杂性。
subscriptionId="aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
resourceGroupName="myResourceGroup"
offset="30d"
az monitor activity-log list \
--subscription "$subscriptionId" \
--resource-group "$resourceGroupName" \
--offset "$offset"
注释
Azure CLI命令使用当前 CLI 上下文中的Azure 资源管理器终结点,因此无需在命令语法中指定 management.azure.com。
注释
Prefer: wait=75的 REST 标头在此操作的 Azure PowerShell cmdlet 中没有直接等效项。 此命令直接发出查询并返回匹配的活动日志记录。
Azure PowerShell提供 Get-AzActivityLog cmdlet,以检索在相对时间范围内限定为资源组的活动日志事件。
$subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$resourceGroupName = "myResourceGroup"
$lookbackDays = 30
Set-AzContext -Subscription $subscriptionId
$getAzActivityLogParams = @{
ResourceGroupName = $resourceGroupName
StartTime = (Get-Date).AddDays(-$lookbackDays)
EndTime = Get-Date
}
Get-AzActivityLog @getAzActivityLogParams
注释
Azure PowerShell cmdlet 使用当前 Az 上下文中的Azure 资源管理器终结点,因此无需在 cmdlet 语法中指定 management.azure.com。
若要使用 Azure 资源管理器 REST API 列出范围限定为资源组的活动日志事件,请将 GET 请求与包含时间范围和 $filter 属性的 resourceGroupName 结合使用。 (可选)包括 Prefer 标头以指定请求的特定超时(最长 75 等待时间(以秒为单位)。
GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Insights/eventtypes/management/values?api-version={apiVersion}&$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}' and resourceGroupName eq '{resourceGroupName}'
Prefer: wait=75
返回特定活动日志属性
使用参数仅返回指定属性,从而减少响应有效负载大小。 有关详细信息,请参阅 活动日志架构属性说明。
Azure门户不提供直接限制从活动日志事件返回的属性的方法。 若要减少查看的数据量,请使用“活动日志”边栏选项卡中的“编辑列”选项选择门户视图中显示哪些列。
将 az monitor activity-log list 命令与参数一起使用 --select ,以指定要从活动日志事件返回的属性。
使用--max-events的az monitor activity-log list参数来限制返回的记录数。
subscriptionId="aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
offset="30d"
maxEvents=100
selectFields=(
eventName
operationName
status
eventTimestamp
correlationId
submissionTimestamp
level
)
az monitor activity-log list \
--subscription "$subscriptionId" \
--offset "$offset" \
--max-events "$maxEvents" \
--select "${selectFields[@]}"
通过将 Get-AzActivityLog 的结果管道到 Select-Object 并指定要返回的属性,来限制Azure PowerShell中活动日志事件返回的属性。 这不会减少 API 响应大小,因为 Select-Object 仅筛选 PowerShell 显示的输出中的属性。
使用-MaxRecord的Get-AzActivityLog参数来限制返回的记录数。
$subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$lookbackDays = 30
$maxRecord = 100
$selectProperties = @(
"EventName"
"OperationName"
"Status"
"EventTimestamp"
"CorrelationId"
"SubmissionTimestamp"
"Level"
)
Set-AzContext -Subscription $subscriptionId
$activityLogParams = @{
StartTime = (Get-Date).AddDays(-$lookbackDays)
EndTime = Get-Date
MaxRecord = $maxRecord
}
Get-AzActivityLog @activityLogParams |
Select-Object -Property $selectProperties
若要列出仅使用 Azure 资源管理器 REST API 返回的特定属性的活动日志事件,请在 $select 请求中包含 GET 查询参数,其中包含要返回的属性的逗号分隔列表。
GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Insights/eventtypes/management/values?api-version={apiVersion}&$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}'&$select=eventName,operationName,status,eventTimestamp,correlationId,submissionTimestamp,level
列出租户级活动日志事件
租户级活动日志事件通常具有有限的条目,但可能包括管理组或订阅创建等重要事件。 这些事件独立于订阅级活动日志事件,但可能包含重复的资源管理事件。
在这一范围内查询使用的 REST API 与订阅级活动日志事件 API 不同。 Azure CLI和Azure PowerShell不提供专用命令。
在 Azure 门户中转到 Monitor>Activity log。 更改 “活动 ”下拉菜单,然后选择“ 目录活动”。
此截图显示 Azure 门户中活动日志页中选中的“目录活动”选项。
专用Azure CLI命令不适用于租户级活动日志事件。 以下示例使用 az rest 直接调用 REST API:
apiVersion="2015-04-01"
startTime="2026-04-01T00:00:00Z"
endTime="2026-04-30T23:59:59Z"
providers="Microsoft.Insights/eventtypes/management/values"
resourceId="/providers/$providers"
filter="eventTimestamp ge '$startTime' and eventTimestamp le '$endTime'"
az rest \
--method get \
--uri "$resourceId?api-version=$apiVersion&\$filter=$filter"
专用 PowerShell cmdlet 不适用于租户级活动日志事件。 以下示例通过使用 Invoke-AzRestMethod 直接调用 REST API:
$apiVersion = "2015-04-01"
$startTime = "2026-04-01T00:00:00Z"
$endTime = "2026-04-30T23:59:59Z"
$providers = "Microsoft.Insights/eventtypes/management/values"
$resourceId = "/providers/$providers"
$filter = "eventTimestamp ge '$startTime' and eventTimestamp le '$endTime'"
$invokeAzRestMethodParams = @{
Path = "$resourceId?api-version=$apiVersion&`$filter=$filter"
Method = "GET"
}
Invoke-AzRestMethod @invokeAzRestMethodParams
若要列出租户级活动日志事件,请使用此 GET 请求。 请注意,此请求面向租户级活动日志终结点,该终结点不同于订阅级活动日志 API。
GET https://management.azure.com/providers/Microsoft.Insights/eventtypes/management/values?api-version={apiVersion}&$filter=eventTimestamp ge '{starTime}' and eventTimestamp le '{endTime}'
列出管理组级活动日志事件
管理组级别活动日志事件会捕获范围限定为特定管理组的事件,例如策略分配和管理组成员资格更改。
注释
- 以下示例使用
2017-03-01-preview 管理组级活动日志查询所需的 API 版本。
若要查看Azure门户中的管理组级活动日志事件,请转到 Management 组>选择管理组>活动日志。
&显示 Azure 门户中管理组的活动日志边栏选项卡的屏幕截图。
若要列出管理组级活动日志事件,请使用 az rest Azure CLI 命令。 此命令直接调用 Azure 资源管理器 REST API,以检索限定为指定管理组的活动日志事件。
apiVersion="2017-03-01-preview"
managementGroupId="myManagementGroup"
startTime="2026-04-01T00:00:00Z"
endTime="2026-04-30T23:59:59Z"
providers="Microsoft.Insights/eventtypes/management/values"
resourceId="/providers/Microsoft.Management/managementGroups/$managementGroupId/providers/$providers"
filter="eventTimestamp ge '$startTime' and eventTimestamp le '$endTime'"
az rest \
--method get \
--url "$resourceId?api-version=$apiVersion&\$filter=$filter"
专用 PowerShell cmdlet 不适用于管理组级活动日志事件。 以下示例使用 Invoke-AzRestMethod 直接调用 REST API。
$apiVersion = "2017-03-01-preview"
$managementGroupId = "myManagementGroup"
$startTime = "2026-04-01T00:00:00Z"
$endTime = "2026-04-30T23:59:59Z"
$providers = "Microsoft.Insights/eventtypes/management/values"
$resourceId = "/providers/Microsoft.Management/managementGroups/$managementGroupId/providers/$providers"
$filter = "eventTimestamp ge '$startTime' and eventTimestamp le '$endTime'"
$invokeAzRestMethodParams = @{
Method = "GET"
Path = "$resourceId?api-version=$apiVersion&`$filter=$filter"
}
Invoke-AzRestMethod @invokeAzRestMethodParams
若要列出管理组级活动日志事件,请针对 Azure 资源管理器 REST API 使用此 GET 请求。 将 {managementGroupId} 替换为您要查询的管理组的 ID,并在 $filter 查询参数中指定时间范围。
GET https://management.azure.com/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Insights/eventtypes/management/values?api-version={apiVersion}&$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}'
下表介绍了上述示例中使用的参数。
| Variable |
示例值 |
Purpose |
| 主持人 |
management.azure.com |
隐式 ARM 终结点 |
| subscriptionId |
aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e |
用户输入 |
| resourceGroupName |
myResourceGroup |
用户输入 |
| managementGroupId |
myManagementGroup |
用户输入 |
| apiVersion |
• 2015-04-01 • 2017-03-01-preview(适用于管理组级别) |
引用 |
查看更改历史记录
对于某些事件,可以查看“更改历史记录”,其中显示了该事件期间进行的更改。 从要更深入地查看的活动日志中选择一个事件。 选择变更记录选项卡,查看操作前30分钟和之后对资源所做的任何更改。
如果有任何更改与事件关联,门户会显示一个可选择的更改列表。 选择更改将打开 “更改历史记录 ”页。 此页显示对资源所做的更改。
以下示例显示 VM 已更改大小。 该页在更改之前和更改后显示 VM 大小。 若要了解有关更改历史记录的详细信息,请参阅 “获取资源更改”。
活动日志见解
活动日志见解是一个 Azure Monitor 工作簿,它提供一组仪表板以监视订阅中资源和资源组的更改。 仪表板还显示有关哪些用户或服务在订阅中执行了活动以及活动状态的数据。
若要启用活动日志见解,请将活动日志导出到Log Analytics工作区,如 Export 活动日志中所述。 此过程将事件发送到 AzureActivity 表,该表供活动日志见解使用。
可以在订阅或资源级别打开活动日志洞察。 要获取订阅,请在“监视”菜单中的“工作簿”部分选择“活动日志见解”。
对于单个资源,请从资源菜单的“工作簿”部分选择“活动日志见解”。
导出活动日志
创建诊断设置,以将活动日志条目发送到其他目标,以便额外的保留时间和功能。
在 Azure 门户中,在 Azure Monitor 菜单上选择 Activity log,然后选择 Export 活动日志。 有关创建诊断设置的详细信息和其他方法,请参阅 Azure Monitor 中的诊断设置。 请确保 禁用活动日志的任何旧配置。
截屏显示 Azure Monitor 菜单,其中活动日志已选中,并且“导出活动日志”在 Monitor 活动日志菜单栏中突出显示。
以下部分提供有关资源日志的每个可配置目标的详细信息。
注释
导出活动日志的旧方法是日志配置文件。 请参阅 旧集合方法。
将活动日志发送到 Log Analytics 工作区,以获取以下功能:
活动日志没有数据引入费用。 活动日志的保留费用仅适用于超过默认保留期 90 天的时间段。 可将 保留期增加到 最多 12 年。
Log Analytics工作区中的活动日志数据存储在名为 AzureActivity 的表中。 此表的结构因 日志条目的类别而异。
例如,若要查看每个类别的活动日志记录计数,请使用以下查询:
AzureActivity
| summarize count() by CategoryValue
若要检索管理类别中的所有记录,请使用以下查询:
AzureActivity
| where CategoryValue == "Administrative"
重要
在某些情况下,AzureActivity 字段中的值可能与其他等效值不同。 在AzureActivity中查询数据时,使用不区分大小写的运算符进行字符串比较,或使用标量函数(scalar function)在比较之前,将字段强制为统一大小写。 例如,使用 tolower() 函数让字段始终为小写,或者在执行字符串比较时使用 =~ 运算符。
将活动日志发送到Azure 事件中心,以将Azure之外的条目发送到第三方 SIEM 或其他日志分析解决方案。 来自事件中心的活动日志事件以 JSON 格式使用,其中的 records 元素包含每个有效负载中的记录。 架构取决于类别,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": "aaaa0000-bb11-2222-33cc-444444dddddd",
"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/aaaabbbb-0000-cccc-1111-dddd2222eeee/",
"iat": "1421876371",
"nbf": "1421876371",
"exp": "1421880271",
"ver": "1.0",
"http://schemas.microsoft.com/identity/claims/tenantid": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"http://schemas.microsoft.com/claims/authnmethodsreferences": "pwd",
"http://schemas.microsoft.com/identity/claims/objectidentifier": "aaaa0000-bb11-2222-33cc-444444dddddd",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn": "admin@contoso.com",
"puid": "1003BFFD8EC002D4",
"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": "bbbb1111-cc22-3333-44dd-555555eeeeee,aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb,cccc2222-dd33-4444-55ee-666666ffffff",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name": " admin@contoso.com",
"appid": "00001111-aaaa-2222-bbbb-3333cccc4444",
"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": "bbbbbbbb-1111-2222-3333-cccccccccccc"
}
}
]
}
如果要保留超过 90 天的日志数据进行审核、静态分析或备份,请将活动日志发送到 Azure 存储帐户。 如果您需要将事件保留 90 天或更短时间,则无需将其存档到存储帐户中。
将活动日志发送到存储时,一旦发生事件,就会在存储帐户中创建存储容器。 容器中的 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-activity-logs/resourceId=/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/y=2020/m=06/d=08/h=18/m=00/PT1H.json
每个 PT1H.json Blob 都包含一个 JSON 对象,其中包含在 blob URL 中指定的小时收到的日志文件中的事件。 在当前小时内,收到的事件将被追加到 PT1H.json 文件中,无论它们是在何时生成的。 URL m=00 中的分钟参数始终为 00,因为 Blob 是每小时创建一次的。
每个事件使用以下格式存储在 PT1H.json 文件中。 此格式使用通用的顶级架构,但对于每个类别来说都是唯一的,如 活动日志架构中所述。
{ "time": "2020-06-12T13:07:46.766Z", "resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MY-RESOURCE-GROUP/PROVIDERS/MICROSOFT.COMPUTE/VIRTUALMACHINES/MV-VM-01", "correlationId": "bbbb1111-cc22-3333-44dd-555555eeeeee", "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"}}}
导出管理组活动日志
为管理组创建诊断设置时,Azure Monitor将导出该管理组及其层次结构中的所有子管理组的活动日志事件。 如果层次结构中的多个管理组具有诊断设置,则会收到重复事件。 只需在最高级别管理组上设置诊断设置即可捕获层次结构的所有事件。
管理组还将收集许多相同的事件,就像其下的任何订阅一样。 如果订阅和管理组都具有诊断设置,则会收到重复事件。 Azure 资源管理器在编写事件时包含层次结构属性,但这不是必需的字段。 Azure 资源管理器外部的资源提供程序不会填充它,因此它们的事件不会在层次结构中向上传播。 因此,获取重复事件比缺少事件更好。
如果你的 MG1 包含 MG2,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 ”,将活动日志导出到 Azure 门户中的 CSV 文件。
重要
导出大量日志条目可能需要很长时间。 若要提高性能,请减少导出的时间范围。 在 Azure 门户中,设置 Timespan 设置。
可以使用Azure CLI以编程方式导出活动日志。
subscriptionId="aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
startTime="2026-04-01T00:00:00Z"
endTime="2026-04-14T23:59:59Z"
maxItems=1000
outputFile="./activity-log.json"
az monitor activity-log list \
--subscription "$subscriptionId" \
--start-time "$startTime" \
--end-time "$endTime" \
--max-items "$maxItems" \
> "$outputFile"
可以使用Azure PowerShell以编程方式导出活动日志。
$subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$startTime = "2026-04-01T00:00:00Z"
$endTime = "2026-04-14T23:59:59Z"
$outputFile = "./activity-log.csv"
Set-AzContext -SubscriptionId $subscriptionId
$getAzActivityLogParams = @{
StartTime = $startTime
EndTime = $endTime
}
Get-AzActivityLog @getAzActivityLogParams |
Export-Csv -Path $outputFile -NoTypeInformation
以下示例 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 表查找资源的创建者。 数据会按照您在 此表的保留期中指定的时间保留。
相关内容