Azure Monitor 活动日志是用于记录 Azure 资源控制平面事件的平台日志。 它包括诸如修改资源的时间或发生部署错误时等信息。 使用活动日志查看或审核所监视的资源的此信息,或创建警报,以便在创建事件时主动通知。
活动日志条目
活动日志中的条目默认收集,无需配置。 它们是系统生成的,无法更改或删除。 条目通常是变更(创建、更新、删除操作)或已启动的操作或动作的结果。 通常不会捕获专注于读取资源详细信息的操作。 有关活动日志类别的说明,请参阅 Azure 活动日志事件架构。
保留期
活动日志事件在 Azure 中保留 90 天 ,然后删除。 在此期间,无论条目数量多少,都无需付费。 有关更多功能(例如更长的保留期),请创建诊断设置,并根据需求 将条目路由到另一个位置 。
查看和检索活动日志
可以从 Azure 门户中的大多数菜单访问活动日志。 从你打开的菜单将决定其初始筛选条件。 如果从 “监视 ”菜单打开它,则唯一的筛选器位于订阅上。 如果从资源的菜单中打开它,筛选器将设置为该资源。 始终可以更改筛选器以查看所有其他条目。 选择 “添加筛选器 ”以向筛选器添加更多属性。
还可以使用以下方法访问活动日志事件:
查看更改历史记录
对于某些事件,可以查看更改历史记录,其中显示了在该事件时间发生的更改。 从要更深入地查看的活动日志中选择一个事件。 选择变更记录选项卡,查看操作前30分钟和之后对资源所做的任何更改。
如果有任何更改与事件相关联,你将看到一个可以选择的更改列表。 选择更改将打开 “更改历史记录 ”页。 此页面显示对资源的更改。 在以下示例中,可以看到 VM 已更改大小。 该页在更改之前和更改后显示 VM 大小。
活动日志见解
活动日志分析是一个工作簿,它提供一组仪表板,用于监控订阅中资源及资源组的变动。 仪表板还显示有关哪些用户或服务在订阅中执行了活动以及活动状态的数据。
若要启用活动日志见解,请将活动日志导出到 Log Analytics 工作区,如 导出活动日志中所述。 这会将事件发送到供活动日志分析使用的AzureActivity
表。
可以在订阅或资源级别打开活动日志见解。 对于订阅,请从“工作簿”部分选择“活动日志见解”并在“监视器”菜单中查看。
对于单个资源,请从资源菜单的“工作簿”部分选择“活动日志见解”。
导出活动日志
创建一个诊断设置,用于将活动日志条目发送到其他目标,以获取额外的保留时间和功能。
在 Azure 门户中,在 Azure Monitor 菜单上选择“活动日志”,然后选择“导出活动日志”。 有关创建诊断设置的其他详细信息和其他方法,请参阅 Azure Monitor 中的 诊断设置。 请确保 禁用活动日志的任何旧配置。
以下信息提供有关可将资源日志发送到的不同目标的更多详细信息。
注释
导出活动日志的旧方法是日志配置文件。 请参阅 旧集合方法。
将活动日志发送到 Log Analytics 工作区 以获取以下功能:
活动日志的默认保留期为 90 天,期间会收取数据引入或保留费用。 可将 保留期增加到 最多 12 年。
Log Analytics 工作区中的活动日志数据存储在名为 AzureActivity 的表中。 此表的结构因 日志条目的类别而异。
例如,若要查看每个类别的活动日志记录计数,请使用以下查询:
AzureActivity
| summarize count() by CategoryValue
若要检索管理类别中的所有记录,请使用以下查询:
AzureActivity
| where CategoryValue == "Administrative"
重要
在某些情况下,字段的值 AzureActivity
可能与其他等效值不同。 查询AzureActivity
的数据时,使用不区分大小写的运算符进行字符串比较,或使用标量函数在进行任何比较之前将字段强制转换为统一大小写。 例如,使用 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.chinacloudapi.cn/",
"iss": "https://sts.chinacloudapi.cn/72f988bf-86f1-41af-91ab-2d7cd011db47/",
"iat": "1421876371",
"nbf": "1421876371",
"exp": "1421880271",
"ver": "1.0",
"http://schemas.microsoft.com/identity/claims/tenantid": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0",
"http://schemas.microsoft.com/claims/authnmethodsreferences": "pwd",
"http://schemas.microsoft.com/identity/claims/objectidentifier": "2468adf0-8211-44e3-95xq-85137af64708",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn": "admin@contoso.com",
"puid": "20030000801A118C",
"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": "cacfe77c-e058-4712-83qw-f9b08849fd60,7f71d11d-4c41-4b23-99d2-d32ce7aa621c,31522864-0578-4ea0-9gdc-e66cc564d18c",
"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": "50d5cddb-8ca0-47ad-9b80-6cde2207f97c"
}
}
]
}
如果要保留超过 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"}}}
导出到 CSV
选择“ 下载为 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
Get-AzActivityLog -StartTime 2021-12-01T10:30 -EndTime 2022-01-14T11:30 | Export-csv operations_logs.csv
以下示例 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."
后续步骤
了解有关以下方面的详细信息: